{"schemaVersion":1,"recordType":"documentation-chunk","id":"AGENTS.md::0000","path":"AGENTS.md","title":"AGENTS.md — Guide for AI Agents Working on These Docs","description":"","kind":"guide","source":"MD/AGENTS.md","updated":"","headings":["AGENTS.md — Guide for AI Agents Working on These Docs","Project overview","Where things are (navigate here)","Commands (run from MD/)","What you MAY change","Hard boundaries (do NOT do these)","Code & writing style","Security considerations","Verify your work"],"chunkIndex":0,"chunkCount":2,"text":"AGENTS.md — Guide for AI Agents Working on These Docs A \"README for agents.\" If you are an AI assistant reading, navigating, or editing this documentation, read this first. It tells you where things live, what you may change, and the hard boundaries. This follows the agents.md convention and complements . Project overview This folder is the single source of truth for the WebGPU OS stack documentation. The stack has five subsystems: , , , , and . Start at for the human entry point and for a curated machine index. Where things are (navigate here) Curated, hand authored prose: , , and each subsystem's / / / . Generated API reference: — produced from source by . Navigation manifest: (the one place that defines curated nav for all viewers). Tooling: (Python only — no Node). Conventions: (style guide, API standard, AI & accessibility, workflow). Commands (run from ) After editing Markdown, run . After touching source code that has reference pages, run then . What you MAY change Curated pages under (follow the style guide). The section (everything below the marker) in any generated reference page — this is preserved across regenerations. when adding/removing curated pages. Hard boundaries (do NOT do these) Do not edit generated content above in — it is overwritten on the next run. To fix a signature or description, edit the JSDoc in the source file upstream , then regenerate. Do not edit files outside as part of docs work. The originals under , , , and per component files are read only reference sources . (The single exception, already made, is the app under .) Do not invent APIs, file paths, or behavior. Every claim about how something works must be verifiable against a source file — cite it (e.g. (Source: §4) ). If unsure, say so rather than guessing. Do not auto run network","contentHash":"4b731086ffe25ac6e271fe596e7397ef50faf7d2d8371b0b57d55c6af997ebb3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"AGENTS.md::0001","path":"AGENTS.md","title":"AGENTS.md — Guide for AI Agents Working on These Docs","description":"","kind":"guide","source":"MD/AGENTS.md","updated":"","headings":["AGENTS.md — Guide for AI Agents Working on These Docs","Project overview","Where things are (navigate here)","Commands (run from MD/)","What you MAY change","Hard boundaries (do NOT do these)","Code & writing style","Security considerations","Verify your work"],"chunkIndex":1,"chunkCount":2,"text":"how something works must be verifiable against a source file — cite it (e.g. (Source: §4) ). If unsure, say so rather than guessing. Do not auto run network or destructive commands (e.g. , deletes) without explicit human approval. Code & writing style Active voice, short sentences, descriptive link text, alt text on images/diagrams. See Docs Style Guide. Keep Markdown plain and standard (the zero build viewer has only a minimal fallback parser). Make sections self contained : front load context, avoid \"as mentioned above,\" so a chunk read in isolation still makes sense. See AI & Accessibility. Security considerations Never put secrets (keys, tokens, passwords) in documentation or examples. The docs describe a real security/trust model; keep Security & Trust Model accurate and do not weaken or misstate capability/permission claims. Treat the generated reference as machine extracted : it can lag the source. Verify against the cited source file before relying on it. Verify your work Run — it must exit 0 (all nav paths resolve). Open over HTTP and click through changed pages (no \"Page not found\"). Run through the Writing Checklist.","contentHash":"6f5c8dcdb28de3deba31b2e0c7b93a90aa2a61facd1c44cca6feea1ca69f2c81"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"CHANGELOG.md::0000","path":"CHANGELOG.md","title":"Changelog","description":"","kind":"guide","source":"MD/CHANGELOG.md","updated":"","headings":["Changelog","[Unreleased]","Changed","Added","Notes","[0.1.0] — 2026-06-05","Added"],"chunkIndex":0,"chunkCount":3,"text":"Changelog All notable changes to this documentation set are recorded here. Format follows Keep a Changelog; this set is versioned independently of the code. [Unreleased] Changed Updated Particle Realms Studio to the six stage recipe workflow: recipe backed demos, Simulate first tuning, project schema v2, typed recipe plans, native adapters, bounded evidence paths, and CSE/sandbox persistence. Legacy Artist/Twin sidecars remain losslessly compatible without appearing as workspaces. Expanded Recipe into a full width visual typed builder with add/remove/connect/disconnect operations, draggable persisted node positions, exact invalid draft diagnostics, last valid execution plan retention, a bounded measured native readback preview, and direct navigation to the authoritative Simulate canvas. Scoped dialog styling now prevents the Recipe workspace from inheriting modal width and height constraints. Changed Simulate to keep its tuning drawer closed until explicitly requested and replaced user selectable particle tiers with an automatic, measured population controller targeting stable 60 FPS. Population uses smoothed cadence, hysteresis, cooldown, workgroup quantization, and only internal device/runtime safety ceilings. Added Initial restructured documentation set in (single source of truth). Zero build HTML viewer ( ) with sidebar nav, search, in page TOC, code copy, and Mermaid support, plus a built in fallback Markdown renderer. Viewer QoL pass: collapsible/nested API reference tree (lazy rendered, per folder counts), sidebar filter box ( ) with highlighted matches, custom themed scrollbars, breadcrumbs, reading progress bar, back to top button, collapse all control, and persisted open/scroll state via . Active reference pages auto expand their folders and scroll into view.","contentHash":"223cd70979cf9c02b149701c852639f3da8bdf1a452996f5d9a915b8cf9e1812"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"CHANGELOG.md::0001","path":"CHANGELOG.md","title":"Changelog","description":"","kind":"guide","source":"MD/CHANGELOG.md","updated":"","headings":["Changelog","[Unreleased]","Changed","Added","Notes","[0.1.0] — 2026-06-05","Added"],"chunkIndex":1,"chunkCount":3,"text":"bar, back to top button, collapse all control, and persisted open/scroll state via . Active reference pages auto expand their folders and scroll into view. AI safe & human safe pass: (agent boundaries/commands), + (llmstxt.org discovery standard) generated by , YAML frontmatter support across the viewer + build tools (title/description/updated; reference pages stamped + ), a AI & Accessibility conventions page, a home page accuracy/safety notice, per page View source links, and accessibility upgrades ( , / ). Discovery & metadata pass: (allows crawlers, references + the indexes); a repo wide root for coding agents (the one stays docs scoped); git based \"last updated\" fallback — now emits and the viewer uses it when a page has no frontmatter; and hand authored / / frontmatter on every curated page (Getting Started, Concepts, all five subsystems, and Contributing). Author attribution: Author & Credits page, a persistent \"Built by Jake Wehmeier\" viewer footer credit, and SPDX license headers across the docs tooling and the wider source tree (see root , , and ). Ported website guides: the curated guides from were hand ported into MD as the single source of truth — a new Guides (How To) section (Capabilities — What You Can Build, Engine Stack Usage) plus Engine deep dives (Virtual GPU, ECS v2, Rendering, Shaders & WGSL, Particle System, Physics, GPU Physics Engine, Math Library, Audio). Website single source docs: the public site's Guide and API tabs now embed the MD zero build viewer ( + are thin shells over ), backed by a new API Reference hub. now ships into on every build (fresh cache, no manual copy) for both the website embeds and the WebGPU OS , refreshing the search index first; the dev embed path is rewritten to for the release layout. Hand authored notes overlay","contentHash":"8427de7846ba5532f00c4be1a04e495833562912f7231a365f32547d0ab50247"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"CHANGELOG.md::0002","path":"CHANGELOG.md","title":"Changelog","description":"","kind":"guide","source":"MD/CHANGELOG.md","updated":"","headings":["Changelog","[Unreleased]","Changed","Added","Notes","[0.1.0] — 2026-06-05","Added"],"chunkIndex":2,"chunkCount":3,"text":"website embeds and the WebGPU OS , refreshing the search index first; the dev embed path is rewritten to for the release layout. Hand authored notes overlay for the API reference: notes now live outside the generated pages in , so the 1700 reference files stay purely generated (regenerable from scratch) while prose is never clobbered. injects them below the marker on every run: per page notes ( ) and reusable shared blocks ( ) applied to many pages by glob — write common context once instead of copying it onto every page. Expanded to 13 shared blocks with detailed runnable examples: GPU device sharing, package trust tiers, AGI training loop, Plauna lifecycle, ECS pattern (complex queries, system groups, ev","contentHash":"81909c5e164db4a7a5a493a27b572371f1b5ad7515961a23cf31cfd6e5c177a5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"README.md::0000","path":"README.md","title":"WebGPU OS Documentation (`MD/`)","description":"","kind":"guide","source":"MD/README.md","updated":"","headings":["WebGPU OS Documentation (MD/)","Three viewers, one source","Layout","Regenerate derived artifacts"],"chunkIndex":0,"chunkCount":1,"text":"WebGPU OS Documentation ( ) This folder is the single source of truth for the whole stack's documentation: plain Markdown that AI tools read directly, rendered for humans by three viewers that all read these same files. Start reading: (the docs home). Style & process: and . Three viewers, one source 1. Zero build HTML viewer — serve the repo and open (e.g. ). No build step. 2. MkDocs Material — . 3. app in WebGPU OS — open Docs from the OS Start Menu (embeds the same viewer). Layout Regenerate derived artifacts Run from (Python only — no Node): Existing docs under , , , and per component files are read only reference sources ; new documentation lives here.","contentHash":"7264352d2375d542d594a62246ead0e607d5b1c26a5fa9ccc2fb18675adc3c4f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"about/credits.md::0000","path":"about/credits.md","title":"Author & Credits","description":"The entire WebGPU OS stack was designed and built by Jake Wehmeier (BTSpaniel).","kind":"guide","source":"MD/about/credits.md","updated":"2026-06-05","headings":["Author & Credits","About the author","Selected work","Connect","Credits & acknowledgements","License"],"chunkIndex":0,"chunkCount":1,"text":"The entire WebGPU OS stack was designed and built by Jake Wehmeier (BTSpaniel). Author & Credits The entire WebGPU OS stack — the engine , the editor , Plauna , AGI , and the WebGPU OS that composes them — was designed and built by Jake Wehmeier . About the author Jake Wehmeier is a Canada based developer who works across the whole stack, from small scripts and Python tools to a from scratch, browser resident, GPU first operating system. He is the sole author of this project, which also carries its original name Particle Realms (ParticleRealms.Online). On GitHub (@BTSpaniel) his profile reads, plainly, \"I make Batch Scripts Because I'm lazy.\" — but the work collected here tells a larger story: a hand built WebGPU engine, an editor, a UI framework, a reinforcement learning rig, and an OS, assembled without heavy third party framework dependencies. The biographical details on this page are limited to what is publicly verifiable (his GitHub profile) and what the author has stated directly. If anything here is wrong or you'd like to expand it, edit this page — it is the canonical place the project credits its author. Selected work — the WebGPU engine at the heart of this stack. NodesIn.Space — frontend project (JavaScript). Dubtitles — Python project. Augment — Python project. Connect GitHub: github.com/BTSpaniel Threads: @zisishans Project site: ParticleRealms.Online Credits & acknowledgements Design, architecture, and implementation: Jake Wehmeier. Documentation viewer — vendored open source libraries (used by the zero build viewer, all permissively licensed): marked — Markdown parser (MIT). highlight.js — syntax highlighting (BSD 3 Clause). Mermaid — diagrams (MIT). License See the project and at the repository root for licensing and attribution terms.","contentHash":"e73645f8c4a9d89589f0084fc6a88fde1758b9d063a34ea2ff499d05f72c9612"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/architecture.md::0000","path":"agi/architecture.md","title":"AGI Architecture","description":"How AGI is layered — a WebGPU tensor library, neural networks, an RL control loop, and the rig visuals plus AGI Studio.","kind":"guide","source":"MD/agi/architecture.md","updated":"2026-06-05","headings":["AGI Architecture","Layers","Tensor library (agi/tensor/)","Neural networks (agi/brain/)","RL control (agi/core/)","Scene and rig","Studio (agi/studio/)","Multi-runtime + API","Performance targets","See also"],"chunkIndex":0,"chunkCount":2,"text":"How AGI is layered — a WebGPU tensor library, neural networks, an RL control loop, and the rig visuals plus AGI Studio. AGI Architecture How AGI is layered: a WebGPU tensor library at the bottom, neural networks above it, an RL control loop on top, and the rig visuals + Studio around it. Layers Tensor library ( ) A zero dependency tensor implementation on WebGPU: Operations including softmax, layernorm, dropout. A compute graph for chaining operations. WebGPU compute shaders in (matmul, activation, reduction). Automatic differentiation (gradient tape) and a tensor cache for memory management. Neural networks ( ) Policy network (12→64→64→17, tanh) and value network (12→64→64→1, linear). PPO trainer ( ), optimizers (Adam/AdamW/SGD), losses (policy/value/entropy), and training utils (GAE, normalizer, scheduler). Forward/backward passes and network serialization (save/load). RL control ( ) — the main training loop driving episodes. — builds the 12D observation each step. — applies the 17D action as bone impulses. — configurable reward weights. — advances through the 7 training stages. — motion matching guidance. Scene and rig — training scene controller, infinite grid ground, tracking camera, WebGPU scene renderer, debug visualizer. — brain sphere with pulse animation, the 17 tentacle injection system, tentacle renderer (curved paths, electrical effects), and neural activity visualization. Studio ( ) A professional workspace app: core ( , project/workspace managers), panels (Scene/Training/Network/Curriculum), visual editors (Reward/Network/Curriculum/Action), visualizers (Graph/Network/Activation/Gradient), and tools (Exporter/Recorder/Benchmarker/Debugger). Multi runtime + API exposes a Gym compatible environment interface. provides optional WebGPU/Python/WASM/Rust/C++","contentHash":"fbb2fd7ade2fed1e95951f9c5751b18720e56446eaf59b2f965c3661f03909c5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/architecture.md::0001","path":"agi/architecture.md","title":"AGI Architecture","description":"How AGI is layered — a WebGPU tensor library, neural networks, an RL control loop, and the rig visuals plus AGI Studio.","kind":"guide","source":"MD/agi/architecture.md","updated":"2026-06-05","headings":["AGI Architecture","Layers","Tensor library (agi/tensor/)","Neural networks (agi/brain/)","RL control (agi/core/)","Scene and rig","Studio (agi/studio/)","Multi-runtime + API","Performance targets","See also"],"chunkIndex":1,"chunkCount":2,"text":"(Exporter/Recorder/Benchmarker/Debugger). Multi runtime + API exposes a Gym compatible environment interface. provides optional WebGPU/Python/WASM/Rust/C++ runtime adapters. Performance targets Physics 60 FPS (16.67 ms), neural inference < 5 ms/forward pass, rendering < 8 ms/frame, total memory < 1 GB. See also Training Guide. AGI API Reference — , , , .","contentHash":"1dfe42e428d22c0764159ea9d0b8da1b8553e43e27e9615484335a63de2b6238"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/getting-started.md::0000","path":"agi/getting-started.md","title":"AGI Getting Started","description":"Launch AGI Studio and start a training run, with the requirements and steps from the AGI README.","kind":"guide","source":"MD/agi/getting-started.md","updated":"2026-06-05","headings":["AGI Getting Started","Requirements","Launch AGI Studio","then browse to:","http://127.0.0.1:9001/agi/studio/","First run","Default hyperparameters","Next steps"],"chunkIndex":0,"chunkCount":1,"text":"Launch AGI Studio and start a training run, with the requirements and steps from the AGI README. AGI Getting Started Launch AGI Studio and start a training run. Based on . Assumes Install & Run is done. Requirements A current browser that exposes WebGPU on the machine. Verify both and a successful call. 8 GB RAM minimum (16 GB recommended); a dedicated GPU recommended. Launch AGI Studio First run 1. Create or load a project — click New Project in the header. The system initializes with default settings and configures the WebGPU device. 2. Start training — click Start Training in the viewport controls. The parasite rig injects into the ragdoll; metrics update live; training runs at 60 FPS. 3. Save your model — click Save Model ; the model downloads as JSON. Load it later to continue. Default hyperparameters Parameter Value Learning rate 3e 4 Clip range 0.2 Gamma 0.99 Lambda (GAE) 0.95 Batch size 64 Buffer size 2048 Next steps Training Guide — stages, tuning, troubleshooting. AGI Architecture — how the pieces connect. AGI API Reference — , , .","contentHash":"8eec20184400db83721cd52b39ebcea3e9e079094729a755ef95c393ac51de8e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/index.md::0000","path":"agi/index.md","title":"AGI","description":"Section index for AGI — RL animation rigging with a WebGPU tensor library and AGI Studio (overview, architecture, getting started, training guide, API reference).","kind":"guide","source":"MD/agi/index.md","updated":"2026-06-05","headings":["AGI","In this section","Module map","Related"],"chunkIndex":0,"chunkCount":1,"text":"Section index for AGI — RL animation rigging with a WebGPU tensor library and AGI Studio (overview, architecture, getting started, training guide, API reference). AGI Reinforcement learning animation rigging (\"parasite rig\") with a WebGPU tensor library and AGI Studio. Source: . In this section Overview — what AGI is and how the RL loop works. Architecture — tensor → brain → core → scene/rig → studio. Getting Started — launch Studio and start training. Training Guide — curriculum, tuning, troubleshooting. API Reference — per file symbols from (browse ). Module map Related GPU Device Sharing — the tensor library runs on the shared device. Engine — AGI is built on Engine v2.","contentHash":"472a86ebe4dcc8886b50999f37d1ac721f41f1c3ee04bce95db26a0c8ece947b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/overview.md::0000","path":"agi/overview.md","title":"AGI Overview","description":"The reinforcement-learning animation rigging system — a \"parasite rig\" with its own WebGPU tensor library, neural networks, curriculum, and AGI Studio.","kind":"guide","source":"MD/agi/overview.md","updated":"2026-06-05","headings":["AGI Overview","What it provides","Audience","How it works (RL loop)","Module map","Next steps"],"chunkIndex":0,"chunkCount":2,"text":"The reinforcement-learning animation rigging system — a \"parasite rig\" with its own WebGPU tensor library, neural networks, curriculum, and AGI Studio. AGI Overview AGI ( ) is a reinforcement learning animation rigging system: a \"Doc Octavius\" style mechanical parasite rig that injects into a humanoid ragdoll and learns to control it through RL. It ships its own WebGPU tensor library , neural networks, a curriculum system, and AGI Studio — a full training workspace application. What it provides From : A custom WebGPU tensor library ( ) with compute shaders (matmul, activation, reduction) and automatic differentiation. Neural networks ( ): policy + value networks, PPO trainer, experience buffer, optimizers, losses. Core RL control ( ): ragdoll controller, observation builder, motor controller, reward function, curriculum manager, motion matching teacher. A parasite rig visual system ( ): brain sphere, 17 tentacles, neural pulses, injection animation. AGI Studio ( ): a workspace app with panels, editors, visualizers, and tools. Audience ML and animation developers training or extending the rig. How it works (RL loop) Observation space (12D): pelvis height, uprightness, angular velocity (3D), linear velocity (3D), ground contact (2D), target direction (2D). Action space (17D): one impulse based action per controllable bone, range . Algorithm: PPO (clipped surrogate objective) with GAE. Module map Module Path Purpose Core RagdollController, ObservationBuilder, MotorController, RewardFunction, CurriculumManager, MotionMatchingTeacher Brain policy/value networks, PPO trainer, optimizers, losses, training utils Tensor WebGPU tensor ops + compute shaders Rig parasite rig visuals (injection, tentacles, brain) Scene training scene, ground, camera, renderer, debug Studio the AGI","contentHash":"c9a9874d2c7deef7e8da3db7b9a20449c17af4a2c00d1c54e6de60d462424579"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/overview.md::0001","path":"agi/overview.md","title":"AGI Overview","description":"The reinforcement-learning animation rigging system — a \"parasite rig\" with its own WebGPU tensor library, neural networks, curriculum, and AGI Studio.","kind":"guide","source":"MD/agi/overview.md","updated":"2026-06-05","headings":["AGI Overview","What it provides","Audience","How it works (RL loop)","Module map","Next steps"],"chunkIndex":1,"chunkCount":2,"text":"WebGPU tensor ops + compute shaders Rig parasite rig visuals (injection, tentacles, brain) Scene training scene, ground, camera, renderer, debug Studio the AGI Studio workspace app Runtime runtime manager API Gym compatible environment API Adapters multi runtime adapters (WebGPU, Python, WASM, Rust, C++) Loader / Config / Data , , model loading, hyperparameters/curriculum/rewards, data Next steps AGI Architecture. AGI Getting Started. Training Guide. AGI API Reference — generated from .","contentHash":"4501a09962ee528c04ac1e23d088a3dfe5694da39b7ef87fb3be345a30b854ef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/adapters/PBDRagdollAgentAdapter.md::0000","path":"agi/reference/adapters/PBDRagdollAgentAdapter.md","title":"adapters/PBDRagdollAgentAdapter.js","description":"","kind":"reference","source":"agi/adapters/PBDRagdollAgentAdapter.js","updated":"","headings":["adapters/PBDRagdollAgentAdapter.js","Classes","class PBDRagdollAgentAdapter","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d54c0fe4212106a953d540c0294afcadfaa3c76480569d8c4a1adf0bfe52988b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/brain/ExperienceBuffer.md::0000","path":"agi/reference/brain/ExperienceBuffer.md","title":"brain/ExperienceBuffer.js","description":"","kind":"reference","source":"agi/brain/ExperienceBuffer.js","updated":"","headings":["brain/ExperienceBuffer.js","Classes","class ExperienceBuffer","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Clear buffer Add experience to buffer Check if buffer is full Get all experiences Get batch of experiences Compute advantages using GAE (Generalized Advantage Estimation) Normalize advantages Get buffer statistics <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"536922f33277473dd03d29515a58e75aebd419039b6e31cc2051bb3f43d5e6dd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/brain/NetworkArchitecture.md::0000","path":"agi/reference/brain/NetworkArchitecture.md","title":"brain/NetworkArchitecture.js","description":"","kind":"reference","source":"agi/brain/NetworkArchitecture.js","updated":"","headings":["brain/NetworkArchitecture.js","Classes","class Layer","Constants","Notes & Examples","Creating a network","Observation preprocessing","Training configuration","Forward pass (inference)","Saving and loading","Gotchas","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Layer class represents a single neural network layer Method Signature Summary Initialize weights using orthogonal initialization Initialize biases to zero Forward pass Linear transformation Apply activation function Backward pass Activation gradient Get parameters (weights and biases) Get gradients Set parameters Constants — Network Architecture Definitions Layer configurations and hyperparameters for Policy and Value networks <! HUMAN NOTES Notes & Examples Neural network definitions for AGI agents. Supports feedforward, recurrent (LSTM/GRU), transformer, and custom architectures. Networks map observations to actions and are trained via policy gradients (PPO) or Q learning. Creating a network Observation preprocessing Training configuration Forward pass (inference) Saving and loading Gotchas Input normalization : Networks expect normalized inputs (mean=0, std=1). Use to add normalization layers. Action bounds : Continuous outputs use tanh ( 1, 1) — scale to your action space externally. Discrete actions use softmax + argmax. Gradient clipping : Essential for recurrent nets. PPO config defaults to clip by norm (0.5), but increase for very deep nets. See also: AGI Training Guide · ExperienceBuffer · PolicyNetwork Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a3181a5c1e5b1e5dbbbec0843a64c903c795cc86b017485f1dbbb32355a97821"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/brain/PolicyNetwork.md::0000","path":"agi/reference/brain/PolicyNetwork.md","title":"brain/PolicyNetwork.js","description":"","kind":"reference","source":"agi/brain/PolicyNetwork.js","updated":"","headings":["brain/PolicyNetwork.js","Classes","class PolicyNetwork","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Build network from architecture config Initialize network (async setup if needed) Forward pass compute actions from observations Backward pass compute gradients Get all network parameters Get all gradients Set network parameters Save network to JSON Load network from JSON Get network info <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"741e876ee41195cd95cf36fb256e93b60c8ffa27e62e3a74ee5a48f52edae440"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/brain/ValueNetwork.md::0000","path":"agi/reference/brain/ValueNetwork.md","title":"brain/ValueNetwork.js","description":"","kind":"reference","source":"agi/brain/ValueNetwork.js","updated":"","headings":["brain/ValueNetwork.js","Classes","class ValueNetwork","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Build network from architecture config Initialize network (async setup if needed) Forward pass estimate value from observations Backward pass compute gradients Get all network parameters Get all gradients Set network parameters Save network to JSON Load network from JSON Get network info <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1cf3ce317eeb954d13a756baed3b1ee2ab364f7773c19efbf908fa1a20425fd6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/brain/trainers/PPOTrainer.md::0000","path":"agi/reference/brain/trainers/PPOTrainer.md","title":"brain/trainers/PPOTrainer.js","description":"","kind":"reference","source":"agi/brain/trainers/PPOTrainer.js","updated":"","headings":["brain/trainers/PPOTrainer.js","Classes","class PPOTrainer","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Train on batch of experiences Compute PPO losses Update networks with gradients Update parameters with gradients Helper functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d61e86282449e204e139248f463c5de2932b05d9e6f0549612ef9ee09eca83da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/config/curriculum.md::0000","path":"agi/reference/config/curriculum.md","title":"config/curriculum.js","description":"","kind":"reference","source":"agi/config/curriculum.js","updated":"","headings":["config/curriculum.js","Constants","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Curriculum Learning Stages Progressive training stages from standing to full locomotion <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b6199563f1f5d810b91053d3d4076e6e840e00154c261a956ab510c63d292aa1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/config/hyperparameters.md::0000","path":"agi/reference/config/hyperparameters.md","title":"config/hyperparameters.js","description":"","kind":"reference","source":"agi/config/hyperparameters.js","updated":"","headings":["config/hyperparameters.js","Constants","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Neural Network Hyperparameters Configuration for Policy and Value networks, training parameters <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"45d94c6730a092311867fc8ad09984933951265598c9e675de5be59a3bb17786"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/config/rewards.md::0000","path":"agi/reference/config/rewards.md","title":"config/rewards.js","description":"","kind":"reference","source":"agi/config/rewards.js","updated":"","headings":["config/rewards.js","Functions","computeReward(state, config = REWARDWEIGHTS.standing)","Constants","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Compute reward for current state Parameters: (Object) — Current ragdoll state (Object) — Reward configuration Returns: Total reward Constants — Reward Function Weights Configurable reward components for different training objectives <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"35014696800eb1916befd3e1a4730470bc045920d728d9e66c65fc902e7e6602"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/core/CurriculumManager.md::0000","path":"agi/reference/core/CurriculumManager.md","title":"core/CurriculumManager.js","description":"","kind":"reference","source":"agi/core/CurriculumManager.js","updated":"","headings":["core/CurriculumManager.js","Classes","class CurriculumManager","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Get current curriculum stage Get stage index Check if episode was successful for current stage Update curriculum after episode Check if should advance to next stage Advance to next stage Get reward configuration for current stage Get observation configuration for current stage Get perturbation configuration for current stage Reset to first stage Set specific stage (for debugging/testing) Get curriculum statistics <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c6d5ae1dfda830796bf12cef12aba6b9b3df323cf3df26791daaea39cb6e2d98"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/core/MotionMatchingTeacher.md::0000","path":"agi/reference/core/MotionMatchingTeacher.md","title":"core/MotionMatchingTeacher.js","description":"","kind":"reference","source":"agi/core/MotionMatchingTeacher.js","updated":"","headings":["core/MotionMatchingTeacher.js","Classes","class MotionMatchingTeacher extends MotionMatcher","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d54c0fe4212106a953d540c0294afcadfaa3c76480569d8c4a1adf0bfe52988b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/core/MotorController.md::0000","path":"agi/reference/core/MotorController.md","title":"core/MotorController.js","description":"","kind":"reference","source":"agi/core/MotorController.js","updated":"","headings":["core/MotorController.js","Classes","class MotorController","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Motor Controller Converts neural network actions into physics impulses Method Signature Summary Apply actions to ragdoll Action space (17 dimensions): One impulse vector per major bone Actions in range [ 1, 1] Scaled to appropriate impulse magnitude Bone mapping: 0: Pelvis, 1: Spine, 2: Head 3 4: Upper arms, 5 6: Lower arms 7 8: Upper legs, 9 10: Lower legs 11 12: Hands, 13 14: Feet 15 16: Shoulders Convert action value to 3D impulse vector Get forward vector from quaternion rotation Apply PD control to reach target pose (Alternative control method for fine tuning) Set impulse scale (for curriculum learning) Set PD gains Get action space info <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"ba41c609664f2847e4fc59e3b2f665a3cac7f217d20c8c1a2e2b182b474b3bcb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/core/ObservationBuilder.md::0000","path":"agi/reference/core/ObservationBuilder.md","title":"core/ObservationBuilder.js","description":"","kind":"reference","source":"agi/core/ObservationBuilder.js","updated":"","headings":["core/ObservationBuilder.js","Classes","class ObservationBuilder","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Observation Builder Converts ragdoll sensor data into neural network input Method Signature Summary Build observation vector from ragdoll state Observation space (12 dimensions): Pelvis height (1) Uprightness (1) Angular velocity (3) Linear velocity (3) Ground contact (2) left/right foot Target direction (2) x, z normalized Get up vector from quaternion rotation Check if bone is in contact with ground Normalize observation vector Get observation space info <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"33b1a2f9a5f6033200578694a9d4dcb4f4ede2597bc441bca1a873a9dfda8d72"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/core/RagdollController.md::0000","path":"agi/reference/core/RagdollController.md","title":"core/RagdollController.js","description":"","kind":"reference","source":"agi/core/RagdollController.js","updated":"","headings":["core/RagdollController.js","Classes","class RagdollController","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize controller Run single episode Check if episode should terminate Check if episode was successful Helper: Sum of squared values Get training metrics Save model Load model <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d5c6ee0dcb057e1c7972d8c51105d40b6eda6131831ec3bd5b49b60934769bd1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/core/RewardFunction.md::0000","path":"agi/reference/core/RewardFunction.md","title":"core/RewardFunction.js","description":"","kind":"reference","source":"agi/core/RewardFunction.js","updated":"","headings":["core/RewardFunction.js","Classes","class RewardFunction","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Compute reward for current ragdoll state Extract state information from ragdoll Compute reward from state Get up vector from quaternion rotation Set reward configuration Reset reward function state Get reward breakdown for debugging <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b45a22d4f485abc2095ea35646fb1d04dc2de96347a679f0b6466726092cfa7c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/index.md::0000","path":"agi/reference/index.md","title":"index.js","description":"","kind":"reference","source":"agi/index.js","updated":"","headings":["index.js","Re-exports","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7b8363a4ae04128b80354faf2ef0259833acc1295adde0628c5a61ceca05aee7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/DeviceProfiler.md::0000","path":"agi/reference/llm/DeviceProfiler.md","title":"llm/DeviceProfiler.js","description":"","kind":"reference","source":"agi/llm/DeviceProfiler.js","updated":"","headings":["llm/DeviceProfiler.js","Classes","class AIDeviceProfiler","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DeviceProfiler.js WebGPU capability and LLM feasibility profiler. This module is intentionally browser native and dependency free. It can use the kernel's shared GPU device when available, or probe navigator.gpu directly for standalone AGI tests. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"bbef9cd96871334b0bb2607738ea747219db10f016566b34d492858d1859ef63"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/formats/GGUFParser.md::0000","path":"agi/reference/llm/formats/GGUFParser.md","title":"llm/formats/GGUFParser.js","description":"","kind":"reference","source":"agi/llm/formats/GGUFParser.js","updated":"","headings":["llm/formats/GGUFParser.js","Classes","class GGUFParser","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/formats/GGUFTensorReader.md::0000","path":"agi/reference/llm/formats/GGUFTensorReader.md","title":"llm/formats/GGUFTensorReader.js","description":"","kind":"reference","source":"agi/llm/formats/GGUFTensorReader.js","updated":"","headings":["llm/formats/GGUFTensorReader.js","Classes","class GGUFTensorReader","Functions","bf16ToF32(value)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a490d1bdfb0c7032e5fcda5314e4341d3f9722c120a4cde804b7268f7db3f6e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/formats/LLMPersistenceContracts.md::0000","path":"agi/reference/llm/formats/LLMPersistenceContracts.md","title":"llm/formats/LLMPersistenceContracts.js","description":"","kind":"reference","source":"agi/llm/formats/LLMPersistenceContracts.js","updated":"","headings":["llm/formats/LLMPersistenceContracts.js","Functions","validateConversationId(value)","validateModelId(value)","prepareModelRegistry(input)","prepareModelPackage(input)","prepareConversation(input, expectedId = null)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Accept a legacy bare conversation and return the canonical durable v1 envelope. Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"acfd62c0f4e456c31650757f27bc85b613fd4f763b96cd2a2805ae7530fff302"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/formats/ModelPackageReader.md::0000","path":"agi/reference/llm/formats/ModelPackageReader.md","title":"llm/formats/ModelPackageReader.js","description":"","kind":"reference","source":"agi/llm/formats/ModelPackageReader.js","updated":"","headings":["llm/formats/ModelPackageReader.js","Classes","class ModelPackageReader","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/formats/ModelPackageWriter.md::0000","path":"agi/reference/llm/formats/ModelPackageWriter.md","title":"llm/formats/ModelPackageWriter.js","description":"","kind":"reference","source":"agi/llm/formats/ModelPackageWriter.js","updated":"","headings":["llm/formats/ModelPackageWriter.js","Classes","class ModelPackageWriter","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/formats/Quantization.md::0000","path":"agi/reference/llm/formats/Quantization.md","title":"llm/formats/Quantization.js","description":"","kind":"reference","source":"agi/llm/formats/Quantization.js","updated":"","headings":["llm/formats/Quantization.js","Functions","quantTypeName(type)","ggufFileTypeName(type)","inferQuantization(tensors = [], metadata = {})","normalizeQuantization(value)","isSupportedMetadataQuant(value)","quantBlockInfo(type)","tensorElementCount(dims = [])","tensorByteSize(type, dims = [])","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4627ee7e48f39bb2a9d588e605536cdf1f2656254a8851250fd06bf53c8577a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/formats/TensorShardIndex.md::0000","path":"agi/reference/llm/formats/TensorShardIndex.md","title":"llm/formats/TensorShardIndex.js","description":"","kind":"reference","source":"agi/llm/formats/TensorShardIndex.js","updated":"","headings":["llm/formats/TensorShardIndex.js","Classes","class UnsupportedTensorShardIndexVersionError extends Error","class TensorShardIndex","Functions","prepareTensorShardIndexDocument(input)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Functions Accept legacy bare indexes and return a canonical, independently cloned v1 document. Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4e527bd25ec4e4af32c80c7dcb4e589315eac781c2dce2c5166ac466c89534d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/index.md::0000","path":"agi/reference/llm/index.md","title":"llm/index.js","description":"","kind":"reference","source":"agi/llm/index.js","updated":"","headings":["llm/index.js","Re-exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"128b8d4392322f83e0edabffa288c3a3d9624d9f6ed8a1aded214a039dfe4f63"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/CacheGovernor.md::0000","path":"agi/reference/llm/inference/CacheGovernor.md","title":"llm/inference/CacheGovernor.js","description":"","kind":"reference","source":"agi/llm/inference/CacheGovernor.js","updated":"","headings":["llm/inference/CacheGovernor.js","Classes","class CacheGovernor","Functions","planAdaptivePreload(tensors = [], options = {})","adaptiveWeightPriority(tensor)","adaptiveEvictionScore(name, entry = {}, options = {})","weightFamily(name)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a490d1bdfb0c7032e5fcda5314e4341d3f9722c120a4cde804b7268f7db3f6e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/CpuTensorRunner.md::0000","path":"agi/reference/llm/inference/CpuTensorRunner.md","title":"llm/inference/CpuTensorRunner.js","description":"","kind":"reference","source":"agi/llm/inference/CpuTensorRunner.js","updated":"","headings":["llm/inference/CpuTensorRunner.js","Classes","class CpuTensorRunner","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/Gemma4GraphRunner.md::0000","path":"agi/reference/llm/inference/Gemma4GraphRunner.md","title":"llm/inference/Gemma4GraphRunner.js","description":"","kind":"reference","source":"agi/llm/inference/Gemma4GraphRunner.js","updated":"","headings":["llm/inference/Gemma4GraphRunner.js","Classes","class Gemma4GraphRunner","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/GenerationLoop.md::0000","path":"agi/reference/llm/inference/GenerationLoop.md","title":"llm/inference/GenerationLoop.js","description":"","kind":"reference","source":"agi/llm/inference/GenerationLoop.js","updated":"","headings":["llm/inference/GenerationLoop.js","Classes","class GenerationLoop","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/GpuPrimitiveRunner.md::0000","path":"agi/reference/llm/inference/GpuPrimitiveRunner.md","title":"llm/inference/GpuPrimitiveRunner.js","description":"","kind":"reference","source":"agi/llm/inference/GpuPrimitiveRunner.js","updated":"","headings":["llm/inference/GpuPrimitiveRunner.js","Classes","class GpuPrimitiveRunner","Functions","blockedTokenKey(ids, vocabSize)","mapAsyncWithTimeout(buffer, mode, timeoutMs, message)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a490d1bdfb0c7032e5fcda5314e4341d3f9722c120a4cde804b7268f7db3f6e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/GpuRuntimeResources.md::0000","path":"agi/reference/llm/inference/GpuRuntimeResources.md","title":"llm/inference/GpuRuntimeResources.js","description":"","kind":"reference","source":"agi/llm/inference/GpuRuntimeResources.js","updated":"","headings":["llm/inference/GpuRuntimeResources.js","Classes","class GpuParameterArena","class GpuBindGroupCache","Functions","uniformBinding(allocation)","isArenaAllocation(value)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"177c49552390bb6f979341eaa21bf746b3728f784eaa6bc242a62167bd4e243c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/GraphCompiler.md::0000","path":"agi/reference/llm/inference/GraphCompiler.md","title":"llm/inference/GraphCompiler.js","description":"","kind":"reference","source":"agi/llm/inference/GraphCompiler.js","updated":"","headings":["llm/inference/GraphCompiler.js","Classes","class GraphCompiler","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/InferenceEngine.md::0000","path":"agi/reference/llm/inference/InferenceEngine.md","title":"llm/inference/InferenceEngine.js","description":"","kind":"reference","source":"agi/llm/inference/InferenceEngine.js","updated":"","headings":["llm/inference/InferenceEngine.js","Classes","class InferenceEngine","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/KVCache.md::0000","path":"agi/reference/llm/inference/KVCache.md","title":"llm/inference/KVCache.js","description":"","kind":"reference","source":"agi/llm/inference/KVCache.js","updated":"","headings":["llm/inference/KVCache.js","Classes","class KVCache","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/LocalGGUFExecutor.md::0000","path":"agi/reference/llm/inference/LocalGGUFExecutor.md","title":"llm/inference/LocalGGUFExecutor.js","description":"","kind":"reference","source":"agi/llm/inference/LocalGGUFExecutor.js","updated":"","headings":["llm/inference/LocalGGUFExecutor.js","Classes","class LocalGGUFExecutor","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/PagedAttention.md::0000","path":"agi/reference/llm/inference/PagedAttention.md","title":"llm/inference/PagedAttention.js","description":"","kind":"reference","source":"agi/llm/inference/PagedAttention.js","updated":"","headings":["llm/inference/PagedAttention.js","Classes","class PagedAttention","class PrefixBlockCache","Functions","blockHash(namespace, prefixHash, blockTokens)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"177c49552390bb6f979341eaa21bf746b3728f784eaa6bc242a62167bd4e243c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/QuantizedMatVecRunner.md::0000","path":"agi/reference/llm/inference/QuantizedMatVecRunner.md","title":"llm/inference/QuantizedMatVecRunner.js","description":"","kind":"reference","source":"agi/llm/inference/QuantizedMatVecRunner.js","updated":"","headings":["llm/inference/QuantizedMatVecRunner.js","Classes","class QuantizedMatVecRunner","Functions","kernelNameForQuant(quantization)","batchedKernelNameForQuant(quantization)","rowStrideForQuant(quantization, cols)","createKQuantParityProbeData(quantization, { rows = SUBGROUPPROBEROWS } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a490d1bdfb0c7032e5fcda5314e4341d3f9722c120a4cde804b7268f7db3f6e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/StaticMemoryPlanner.md::0000","path":"agi/reference/llm/inference/StaticMemoryPlanner.md","title":"llm/inference/StaticMemoryPlanner.js","description":"","kind":"reference","source":"agi/llm/inference/StaticMemoryPlanner.js","updated":"","headings":["llm/inference/StaticMemoryPlanner.js","Classes","class StaticMemoryPlanner","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/TransformerExecutor.md::0000","path":"agi/reference/llm/inference/TransformerExecutor.md","title":"llm/inference/TransformerExecutor.js","description":"","kind":"reference","source":"agi/llm/inference/TransformerExecutor.js","updated":"","headings":["llm/inference/TransformerExecutor.js","Classes","class TransformerExecutor","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/inference/WeightCache.md::0000","path":"agi/reference/llm/inference/WeightCache.md","title":"llm/inference/WeightCache.js","description":"","kind":"reference","source":"agi/llm/inference/WeightCache.js","updated":"","headings":["llm/inference/WeightCache.js","Classes","class WeightCache","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/KernelRegistry.md::0000","path":"agi/reference/llm/kernels/KernelRegistry.md","title":"llm/kernels/KernelRegistry.js","description":"","kind":"reference","source":"agi/llm/kernels/KernelRegistry.js","updated":"","headings":["llm/kernels/KernelRegistry.js","Classes","class KernelRegistry","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/PipelineUtils.md::0000","path":"agi/reference/llm/kernels/PipelineUtils.md","title":"llm/kernels/PipelineUtils.js","description":"","kind":"reference","source":"agi/llm/kernels/PipelineUtils.js","updated":"","headings":["llm/kernels/PipelineUtils.js","Functions","async createComputePipelineChecked(device, module, { label, name = label, entryPoint = 'main' } = {})","async assertShaderCompiled(module, name = 'shader')","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/attention_decode.md::0000","path":"agi/reference/llm/kernels/shaders/attention_decode.md","title":"llm/kernels/shaders/attention_decode.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/attention_decode.js","updated":"","headings":["llm/kernels/shaders/attentiondecode.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/attention_decode_legacy.md::0000","path":"agi/reference/llm/kernels/shaders/attention_decode_legacy.md","title":"llm/kernels/shaders/attention_decode_legacy.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/attention_decode_legacy.js","updated":"","headings":["llm/kernels/shaders/attentiondecodelegacy.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/attention_prefill_legacy.md::0000","path":"agi/reference/llm/kernels/shaders/attention_prefill_legacy.md","title":"llm/kernels/shaders/attention_prefill_legacy.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/attention_prefill_legacy.js","updated":"","headings":["llm/kernels/shaders/attentionprefilllegacy.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/attention_prefill_tiled.md::0000","path":"agi/reference/llm/kernels/shaders/attention_prefill_tiled.md","title":"llm/kernels/shaders/attention_prefill_tiled.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/attention_prefill_tiled.js","updated":"","headings":["llm/kernels/shaders/attentionprefilltiled.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/dequant_row_dense.md::0000","path":"agi/reference/llm/kernels/shaders/dequant_row_dense.md","title":"llm/kernels/shaders/dequant_row_dense.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/dequant_row_dense.js","updated":"","headings":["llm/kernels/shaders/dequantrowdense.js","Functions","shader({ format = 'F16' } = {})","shaderDequantF32(options = {})","shaderDequantF16(options = {})","shaderDequantBF16(options = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/dequant_row_k_quant.md::0000","path":"agi/reference/llm/kernels/shaders/dequant_row_k_quant.md","title":"llm/kernels/shaders/dequant_row_k_quant.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/dequant_row_k_quant.js","updated":"","headings":["llm/kernels/shaders/dequantrowkquant.js","Functions","shader({ quant = 'Q4K' } = {})","shaderDequantQ4K(options = {})","shaderDequantQ5K(options = {})","shaderDequantQ6K(options = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/dequant_row_q4_0.md::0000","path":"agi/reference/llm/kernels/shaders/dequant_row_q4_0.md","title":"llm/kernels/shaders/dequant_row_q4_0.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/dequant_row_q4_0.js","updated":"","headings":["llm/kernels/shaders/dequantrowq40.js","Functions","shader()","shaderDequantQ40(options = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/dequant_row_q8_0.md::0000","path":"agi/reference/llm/kernels/shaders/dequant_row_q8_0.md","title":"llm/kernels/shaders/dequant_row_q8_0.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/dequant_row_q8_0.js","updated":"","headings":["llm/kernels/shaders/dequantrowq80.js","Functions","shader()","shaderDequantQ80(options = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/embedding_row_gather.md::0000","path":"agi/reference/llm/kernels/shaders/embedding_row_gather.md","title":"llm/kernels/shaders/embedding_row_gather.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/embedding_row_gather.js","updated":"","headings":["llm/kernels/shaders/embeddingrowgather.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/matmul_k_quant.md::0000","path":"agi/reference/llm/kernels/shaders/matmul_k_quant.md","title":"llm/kernels/shaders/matmul_k_quant.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/matmul_k_quant.js","updated":"","headings":["llm/kernels/shaders/matmulkquant.js","Functions","shader({ quant = 'Q4K', workgroupSize = WORKGROUPSIZE } = {})","shaderMatMulQ4K(options = {})","shaderMatMulQ5K(options = {})","shaderMatMulQ6K(options = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/matmul_q4.md::0000","path":"agi/reference/llm/kernels/shaders/matmul_q4.md","title":"llm/kernels/shaders/matmul_q4.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/matmul_q4.js","updated":"","headings":["llm/kernels/shaders/matmulq4.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/matmul_q4_0.md::0000","path":"agi/reference/llm/kernels/shaders/matmul_q4_0.md","title":"llm/kernels/shaders/matmul_q4_0.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/matmul_q4_0.js","updated":"","headings":["llm/kernels/shaders/matmulq40.js","Functions","shader({ workgroupSize = WORKGROUPSIZE } = {})","shaderMatMulQ40(options = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/matvec_dense.md::0000","path":"agi/reference/llm/kernels/shaders/matvec_dense.md","title":"llm/kernels/shaders/matvec_dense.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/matvec_dense.js","updated":"","headings":["llm/kernels/shaders/matvecdense.js","Functions","shader({ format = 'F32', workgroupSize = WORKGROUPSIZE } = {})","shaderF32(options = {})","shaderF16(options = {})","shaderBF16(options = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/matvec_k_quant.md::0000","path":"agi/reference/llm/kernels/shaders/matvec_k_quant.md","title":"llm/kernels/shaders/matvec_k_quant.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/matvec_k_quant.js","updated":"","headings":["llm/kernels/shaders/matveckquant.js","Functions","shader({ quant = 'Q4K', workgroupSize = WORKGROUPSIZE, useSubgroups = false } = {})","shaderQ4K(options = {})","shaderQ5K(options = {})","shaderQ6K(options = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4627ee7e48f39bb2a9d588e605536cdf1f2656254a8851250fd06bf53c8577a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/matvec_q4_0.md::0000","path":"agi/reference/llm/kernels/shaders/matvec_q4_0.md","title":"llm/kernels/shaders/matvec_q4_0.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/matvec_q4_0.js","updated":"","headings":["llm/kernels/shaders/matvecq40.js","Functions","shader({ workgroupSize = WORKGROUPSIZE } = {})","shaderQ40(options = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4627ee7e48f39bb2a9d588e605536cdf1f2656254a8851250fd06bf53c8577a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/matvec_q8_0.md::0000","path":"agi/reference/llm/kernels/shaders/matvec_q8_0.md","title":"llm/kernels/shaders/matvec_q8_0.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/matvec_q8_0.js","updated":"","headings":["llm/kernels/shaders/matvecq80.js","Functions","shader({ workgroupSize = WORKGROUPSIZE } = {})","shaderQ80(options = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4627ee7e48f39bb2a9d588e605536cdf1f2656254a8851250fd06bf53c8577a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/rmsnorm_fused.md::0000","path":"agi/reference/llm/kernels/shaders/rmsnorm_fused.md","title":"llm/kernels/shaders/rmsnorm_fused.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/rmsnorm_fused.js","updated":"","headings":["llm/kernels/shaders/rmsnormfused.js","Functions","shader({ hiddenSize = 1536, epsilon = '0.000001', workgroupSize = 256 } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/rmsnorm_residual_fused.md::0000","path":"agi/reference/llm/kernels/shaders/rmsnorm_residual_fused.md","title":"llm/kernels/shaders/rmsnorm_residual_fused.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/rmsnorm_residual_fused.js","updated":"","headings":["llm/kernels/shaders/rmsnormresidualfused.js","Functions","shader({ hiddenSize = 1536, epsilon = '0.000001', workgroupSize = 256 } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/rope_batch.md::0000","path":"agi/reference/llm/kernels/shaders/rope_batch.md","title":"llm/kernels/shaders/rope_batch.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/rope_batch.js","updated":"","headings":["llm/kernels/shaders/ropebatch.js","Functions","shader({ theta = '10000.0' } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/rope_fused.md::0000","path":"agi/reference/llm/kernels/shaders/rope_fused.md","title":"llm/kernels/shaders/rope_fused.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/rope_fused.js","updated":"","headings":["llm/kernels/shaders/ropefused.js","Functions","shader({ theta = '10000.0' } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/rope_kv_append.md::0000","path":"agi/reference/llm/kernels/shaders/rope_kv_append.md","title":"llm/kernels/shaders/rope_kv_append.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/rope_kv_append.js","updated":"","headings":["llm/kernels/shaders/ropekvappend.js","Functions","shader({ theta = '10000.0' } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/rope_table.md::0000","path":"agi/reference/llm/kernels/shaders/rope_table.md","title":"llm/kernels/shaders/rope_table.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/rope_table.js","updated":"","headings":["llm/kernels/shaders/ropetable.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/sampling_topk_candidates.md::0000","path":"agi/reference/llm/kernels/shaders/sampling_topk_candidates.md","title":"llm/kernels/shaders/sampling_topk_candidates.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/sampling_topk_candidates.js","updated":"","headings":["llm/kernels/shaders/samplingtopkcandidates.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/sampling_topk_reduce.md::0000","path":"agi/reference/llm/kernels/shaders/sampling_topk_reduce.md","title":"llm/kernels/shaders/sampling_topk_reduce.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/sampling_topk_reduce.js","updated":"","headings":["llm/kernels/shaders/samplingtopkreduce.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/sampling_topk_topp.md::0000","path":"agi/reference/llm/kernels/shaders/sampling_topk_topp.md","title":"llm/kernels/shaders/sampling_topk_topp.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/sampling_topk_topp.js","updated":"","headings":["llm/kernels/shaders/samplingtopktopp.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/sampling_topk_topp_legacy.md::0000","path":"agi/reference/llm/kernels/shaders/sampling_topk_topp_legacy.md","title":"llm/kernels/shaders/sampling_topk_topp_legacy.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/sampling_topk_topp_legacy.js","updated":"","headings":["llm/kernels/shaders/samplingtopktopplegacy.js","Functions","shader()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/swiglu_fused.md::0000","path":"agi/reference/llm/kernels/shaders/swiglu_fused.md","title":"llm/kernels/shaders/swiglu_fused.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/swiglu_fused.js","updated":"","headings":["llm/kernels/shaders/swiglufused.js","Functions","shader({ activation = 'gelupytorchtanh' } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/tied_embedding_logits.md::0000","path":"agi/reference/llm/kernels/shaders/tied_embedding_logits.md","title":"llm/kernels/shaders/tied_embedding_logits.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/tied_embedding_logits.js","updated":"","headings":["llm/kernels/shaders/tiedembeddinglogits.js","Functions","shader({ workgroupSize = 128 } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/kernels/shaders/vector_ops.md::0000","path":"agi/reference/llm/kernels/shaders/vector_ops.md","title":"llm/kernels/shaders/vector_ops.js","description":"","kind":"reference","source":"agi/llm/kernels/shaders/vector_ops.js","updated":"","headings":["llm/kernels/shaders/vectorops.js","Functions","shader({ op = 'add' } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/LLMRuntime.md::0000","path":"agi/reference/llm/runtime/LLMRuntime.md","title":"llm/runtime/LLMRuntime.js","description":"","kind":"reference","source":"agi/llm/runtime/LLMRuntime.js","updated":"","headings":["llm/runtime/LLMRuntime.js","Classes","class LLMRuntime","Functions","normalizeLocalRuntimeResourceUsage(before, after)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a490d1bdfb0c7032e5fcda5314e4341d3f9722c120a4cde804b7268f7db3f6e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/LLMSession.md::0000","path":"agi/reference/llm/runtime/LLMSession.md","title":"llm/runtime/LLMSession.js","description":"","kind":"reference","source":"agi/llm/runtime/LLMSession.js","updated":"","headings":["llm/runtime/LLMSession.js","Classes","class LLMSession","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/LogFormat.md::0000","path":"agi/reference/llm/runtime/LogFormat.md","title":"llm/runtime/LogFormat.js","description":"","kind":"reference","source":"agi/llm/runtime/LogFormat.js","updated":"","headings":["llm/runtime/LogFormat.js","Functions","logRuntimeEvent(event, data = {}, options = {})","compactLogLine(data)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/ModelRegistry.md::0000","path":"agi/reference/llm/runtime/ModelRegistry.md","title":"llm/runtime/ModelRegistry.js","description":"","kind":"reference","source":"agi/llm/runtime/ModelRegistry.js","updated":"","headings":["llm/runtime/ModelRegistry.js","Classes","class ModelRegistry","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/PromptTemplate.md::0000","path":"agi/reference/llm/runtime/PromptTemplate.md","title":"llm/runtime/PromptTemplate.js","description":"","kind":"reference","source":"agi/llm/runtime/PromptTemplate.js","updated":"","headings":["llm/runtime/PromptTemplate.js","Classes","class PromptTemplate","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"6812329593f6f82aa3cac9c6862daff8831da922bdc947f20db36592c374f5b7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/RuntimePerformanceMonitor.md::0000","path":"agi/reference/llm/runtime/RuntimePerformanceMonitor.md","title":"llm/runtime/RuntimePerformanceMonitor.js","description":"","kind":"reference","source":"agi/llm/runtime/RuntimePerformanceMonitor.js","updated":"","headings":["llm/runtime/RuntimePerformanceMonitor.js","Classes","class RuntimePerformanceMonitor","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/Sampler.md::0000","path":"agi/reference/llm/runtime/Sampler.md","title":"llm/runtime/Sampler.js","description":"","kind":"reference","source":"agi/llm/runtime/Sampler.js","updated":"","headings":["llm/runtime/Sampler.js","Classes","class Sampler","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/Tokenizer.md::0000","path":"agi/reference/llm/runtime/Tokenizer.md","title":"llm/runtime/Tokenizer.js","description":"","kind":"reference","source":"agi/llm/runtime/Tokenizer.js","updated":"","headings":["llm/runtime/Tokenizer.js","Classes","class Tokenizer","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/TokenizerWorkerClient.md::0000","path":"agi/reference/llm/runtime/TokenizerWorkerClient.md","title":"llm/runtime/TokenizerWorkerClient.js","description":"","kind":"reference","source":"agi/llm/runtime/TokenizerWorkerClient.js","updated":"","headings":["llm/runtime/TokenizerWorkerClient.js","Classes","class TokenizerWorkerClient","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/runtime/ToolBridge.md::0000","path":"agi/reference/llm/runtime/ToolBridge.md","title":"llm/runtime/ToolBridge.js","description":"","kind":"reference","source":"agi/llm/runtime/ToolBridge.js","updated":"","headings":["llm/runtime/ToolBridge.js","Classes","class ToolBridge","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/storage/AtomicJSON.md::0000","path":"agi/reference/llm/storage/AtomicJSON.md","title":"llm/storage/AtomicJSON.js","description":"","kind":"reference","source":"agi/llm/storage/AtomicJSON.js","updated":"","headings":["llm/storage/AtomicJSON.js","Functions","async replaceJSONCopyOnWrite(store, path, value, { validate = null, label = 'JSON record' } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Publish JSON through a verified staging file while retaining the previous revision until the replacement move succeeds. Functions Publish JSON through a verified staging file while retaining the previous revision until the replacement move succeeds. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d0aa71aac8d1f70709e8c770d74a955a17a2bda9b9813c56012c986c75080cc7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/storage/Checksum.md::0000","path":"agi/reference/llm/storage/Checksum.md","title":"llm/storage/Checksum.js","description":"","kind":"reference","source":"agi/llm/storage/Checksum.js","updated":"","headings":["llm/storage/Checksum.js","Functions","async checksumBytes(bytes, algorithm = 'SHA-256')","async checksumString(text, algorithm = 'SHA-256')","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c32c057ef076f1d33cad4bc5ef4ed9c624b9bee6d435315be970bcf0e72e6b9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/storage/ModelCache.md::0000","path":"agi/reference/llm/storage/ModelCache.md","title":"llm/storage/ModelCache.js","description":"","kind":"reference","source":"agi/llm/storage/ModelCache.js","updated":"","headings":["llm/storage/ModelCache.js","Classes","class ModelCache","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/storage/ModelHandleStore.md::0000","path":"agi/reference/llm/storage/ModelHandleStore.md","title":"llm/storage/ModelHandleStore.js","description":"","kind":"reference","source":"agi/llm/storage/ModelHandleStore.js","updated":"","headings":["llm/storage/ModelHandleStore.js","Classes","class ModelHandleStoreError extends Error","class ModelHandleStore","Functions","prepareModelHandleRecord(value, expectedModelId = null)","prepareLastModelRecord(value)","isFileSystemHandle(value)","async queryHandlePermission(handle)","async requestHandlePermission(handle)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"92e80b9cecb59ffaa398700f49181871551d4281ce1588d243076eb86e7e5ff9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/storage/OPFSStore.md::0000","path":"agi/reference/llm/storage/OPFSStore.md","title":"llm/storage/OPFSStore.js","description":"","kind":"reference","source":"agi/llm/storage/OPFSStore.js","updated":"","headings":["llm/storage/OPFSStore.js","Classes","class OPFSStore","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/storage/VFSConversationStore.md::0000","path":"agi/reference/llm/storage/VFSConversationStore.md","title":"llm/storage/VFSConversationStore.js","description":"","kind":"reference","source":"agi/llm/storage/VFSConversationStore.js","updated":"","headings":["llm/storage/VFSConversationStore.js","Classes","class VFSConversationStore","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1f9e497ddcb9437dabacb67e400395c91a315b466409eac6b78778865679b857"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/workers/LLMLoadPlannerWorker.md::0000","path":"agi/reference/llm/workers/LLMLoadPlannerWorker.md","title":"llm/workers/LLMLoadPlannerWorker.js","description":"","kind":"reference","source":"agi/llm/workers/LLMLoadPlannerWorker.js","updated":"","headings":["llm/workers/LLMLoadPlannerWorker.js","Exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b94223be26ebd55defb77f13a78fcd007b1eca3aa4b2b05e7d4b2dd48eb6dcc4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/llm/workers/LLMTokenizerWorker.md::0000","path":"agi/reference/llm/workers/LLMTokenizerWorker.md","title":"llm/workers/LLMTokenizerWorker.js","description":"","kind":"reference","source":"agi/llm/workers/LLMTokenizerWorker.js","updated":"","headings":["llm/workers/LLMTokenizerWorker.js","Exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b94223be26ebd55defb77f13a78fcd007b1eca3aa4b2b05e7d4b2dd48eb6dcc4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/loader/ModelLoader.md::0000","path":"agi/reference/loader/ModelLoader.md","title":"loader/ModelLoader.js","description":"","kind":"reference","source":"agi/loader/ModelLoader.js","updated":"","headings":["loader/ModelLoader.js","Classes","class ModelLoader","Functions","modelLoaderVertexDedupHash32(posBits, pOff, uvBits = null, uOff = 0)","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Load model from file Load model from blob URL Parse GLB binary format Parse GLTF JSON Extract bone hierarchy for ragdoll Get bone count Get model info Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c765def822000015fa92c13a5388fa2699959f0dd3a4b5cd8706a3c16d8d66f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/network/TrainingStateChannel.md::0000","path":"agi/reference/network/TrainingStateChannel.md","title":"network/TrainingStateChannel.js","description":"","kind":"reference","source":"agi/network/TrainingStateChannel.js","updated":"","headings":["network/TrainingStateChannel.js","Classes","class AgiTrainingStateChannel","Functions","createAgiTrainingStateChannel(options = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Bind AGI Studio telemetry to the standard State Channel stack. The training runtime is authoritative; same origin tabs need no setup, and callers hosted inside WebGPU OS may pass NetworkDriver to publish over mesh. Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"61bea52120eaf7c1cf56bf2eae59203170e41ffc9e6a89f60f85afd5be2f4560"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/BreathReservoirState.md::0000","path":"agi/reference/particle_voice/articulatory/BreathReservoirState.md","title":"particle_voice/articulatory/BreathReservoirState.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/BreathReservoirState.js","updated":"","headings":["particlevoice/articulatory/BreathReservoirState.js","Functions","lagRateFromCompliance(compliance, sampleRate)","createBreathReservoirState({ sampleIndex, pressure, compliance, targetSubglottalPressure })","stepBreathReservoirState(state, sampleRate)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BreathReservoirState.js — Phase 2 Voice Box state schema ( ). \"Lung pressure, compliance, target subglottal pressure\" per §4 — the JS side state container wrapping 's per instance recurrence ( , proven against (R6A)). This module owns the derivation from / (the caller computed value that kernel's docstring says it expects pre computed, not recomputed in shader) and the timestamped state container the kernel's / buffers round trip through across chunks — it does not itself dispatch the kernel (that is 's job once a real model exists to drive it). Functions — matches (R6A)'s proven formula exactly; 's own docstring requires this be computed by the caller, not the kernel. Returns: A validated, timestamped for one instance. Advance one by one sample using the exact same recurrence / implement — the CPU side single sample equivalent, useful for tests and for any non GPU fallback path, not a replacement for the GPU kernel's chunked dispatch. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"50a0a38198f1a532f1607bdb9ac81286e2e2a4d590d26632bb1c8811f3b149e2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/FormantSolver.md::0000","path":"agi/reference/particle_voice/articulatory/FormantSolver.md","title":"particle_voice/articulatory/FormantSolver.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/FormantSolver.js","updated":"","headings":["particlevoice/articulatory/FormantSolver.js","Functions","impulseResponse(areas, { glottalReflection, lipReflection, responseLength, wallLoss = 1 })","findFormants(areas, sampleRate, options = {})","profileFromParams(params, numSections)","fitVowelAreas(target, numSections, sampleRate, options = {})","fitTargets(targets, numSections, sampleRate, options = {})","fitAllVowels(numSections, sampleRate, options = {})","fitAllApproximants(numSections, sampleRate, options = {})","tractLengthFor(numSections, sampleRate)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FormantSolver.js — Phase 3 ParticleVoice articulatory calibration. Measures the resonances a Kelly Lochbaum area profile actually produces, and inverts that: given target formants, searches for an area profile that hits them. Why this exists Vowel identity in speech is carried almost entirely by F1 and F2 . An area profile invented from articulatory adjectives (\"high\", \"back\", \"rounded\") produces some formants, but nothing forces them to be the RIGHT ones — and if they are wrong, every vowel collapses toward a neutral timbre and the speech is unintelligible no matter how clean the pipeline is. That was the state before this module: 's height/backness → area mapping was plausible but uncalibrated. Defining vowels by their measured formant targets and SOLVING for the geometry inverts the dependency: the targets are citable data (Peterson & Barney 1952 / Hillenbrand et al. 1995 male averages, whose vowel set maps exactly onto 's ten monophthongs), and the geometry becomes a derived quantity that stays correct if the section count or sample rate changes. The response is measured with the SAME recurrence the GPU runs reimplements 's scattering recurrence on the CPU rather than using an analytic transfer function. That is deliberate: an analytic formula would be a second model that could disagree with the kernel, and then a \"calibrated\" vowel would not actually be calibrated for the thing doing the synthesis. In particular this omits the lip first difference, matching 's (its source is already a flow derivative). Functions Impulse response of the lossless KL chain, mirroring 's recurrence (and, like , WITHOUT the lip first difference). Resonance frequencies of an area profile, lowest","contentHash":"04ab672278f59f990eb2276807ffca9f0767417f2a6f12fa7c75a3877f6b3138"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/FormantSolver.md::0001","path":"agi/reference/particle_voice/articulatory/FormantSolver.md","title":"particle_voice/articulatory/FormantSolver.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/FormantSolver.js","updated":"","headings":["particlevoice/articulatory/FormantSolver.js","Functions","impulseResponse(areas, { glottalReflection, lipReflection, responseLength, wallLoss = 1 })","findFormants(areas, sampleRate, options = {})","profileFromParams(params, numSections)","fitVowelAreas(target, numSections, sampleRate, options = {})","fitTargets(targets, numSections, sampleRate, options = {})","fitAllVowels(numSections, sampleRate, options = {})","fitAllApproximants(numSections, sampleRate, options = {})","tractLengthFor(numSections, sampleRate)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"response of the lossless KL chain, mirroring 's recurrence (and, like , WITHOUT the lip first difference). Resonance frequencies of an area profile, lowest first. Returns: Peak frequencies in Hz. Build the profile this solver searches over. exists because a single control point is not enough for high front vowels. interpolates LINEARLY between control points, so one narrow point produces a smooth V — a tract that tapers and re widens with no distinct cavities. /i/ needs the opposite: a genuinely SHORT front cavity (F2 = 2290 Hz implies c/(4 F2) 3.7 cm) sharply separated from a long back cavity. Giving the constriction a WIDTH creates that two cavity structure, and with it F2 values a single point cannot reach (an earlier 3 point version topped out at 1889 Hz against IY's 2290 Hz target, 333 cents low, which made IY and IH nearly identical in F2). A width of 0 degenerates to the original 3 point shape, so the parametrisation strictly extends the old one rather than replacing it. Search for an area profile whose first two resonances match . Error is measured in the LOG frequency domain, because formant perception is roughly logarithmic: being 100 Hz off matters far more at F1 = 270 than at F2 = 2290, and a linear error would happily sacrifice F1 accuracy to shave a little off F2. Exhaustive over a coarse grid, then a local refinement pass. Exhaustive rather than gradient based on purpose: the map from geometry to formants is non monotonic (moving a constriction can swap which cavity dominates F2), so a descent method lands in whichever basin it started in. Fit every entry in a formant target table. Slow (a full grid per entry) — intended for a calibration tool/test, not a hot path. The tract length a section count represents, for reporting alongside a fit. Constants —","contentHash":"70dc6c2ef3d9d8095128267ef3748a4b1fc14c625343bcaf0530119f0d9cca25"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/FormantSolver.md::0002","path":"agi/reference/particle_voice/articulatory/FormantSolver.md","title":"particle_voice/articulatory/FormantSolver.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/FormantSolver.js","updated":"","headings":["particlevoice/articulatory/FormantSolver.js","Functions","impulseResponse(areas, { glottalReflection, lipReflection, responseLength, wallLoss = 1 })","findFormants(areas, sampleRate, options = {})","profileFromParams(params, numSections)","fitVowelAreas(target, numSections, sampleRate, options = {})","fitTargets(targets, numSections, sampleRate, options = {})","fitAllVowels(numSections, sampleRate, options = {})","fitAllApproximants(numSections, sampleRate, options = {})","tractLengthFor(numSections, sampleRate)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"grid per entry) — intended for a calibration tool/test, not a hot path. The tract length a section count represents, for reporting alongside a fit. Constants — Peterson & Barney (1952) male averages, Hz. Their vowel set — heed, hid, head, had, hod, hawed, hood, who'd, hud, heard — is exactly this project's ten monophthongs, so no mapping or interpolation is needed. F3 is carried for only, where the unusually LOW F3 is the defining rhotic cue; for the others F1/F2 determine identity. — The solved geometry for each vowel, produced by and baked here so the runtime does not pay for the search (a full grid per vowel takes tens of seconds). re verifies this table against the targets cheaply on every run, so it cannot","contentHash":"fa73c757b372469e9d81bc1fe7b598ecd7a5ab505252aa925a3948cb03578372"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/NeuralPhysiologyState.md::0000","path":"agi/reference/particle_voice/articulatory/NeuralPhysiologyState.md","title":"particle_voice/articulatory/NeuralPhysiologyState.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/NeuralPhysiologyState.js","updated":"","headings":["particlevoice/articulatory/NeuralPhysiologyState.js","Functions","createNeuralPhysiologyState({ sampleIndex, respiratoryDrive, glottalState, tractGesture, articulationEvent = null, uncertainty = { confidence: 1 }, })","validateRespiratoryDriveHead(head)","validateGlottalStateHead(head)","validateTractGestureHead(head)","validateArticulationEventHead(head)","validateUncertaintyHead(head)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NeuralPhysiologyState.js — Phase 2 Voice Box state schema ( ). The model's predicted per frame physiology state, per §4: four control heads plus an uncertainty head, version . This is a working definition of each head's field set — the heads themselves are named and required by the plan, but their exact field composition was not otherwise specified anywhere in the frozen documents, so the fields chosen here are deliberately the smallest set that maps DIRECTLY onto an already built, already tested GPU kernel's input parameters (not invented ahead of a consumer): → drives / . ( / / / / ) → the exact parameter names takes per instance. → the area profile / consume. ( / / ) → drives / injection points (the actual multi port coupling math those two kernels' docstrings still flag as deferred — this head only carries the control values, not a coupling implementation). → a single scalar per frame confidence, the minimal representation until a real model exists to justify a richer (e.g. per head covariance) shape. Like every other document in this project, this field set may still change before a freeze — it is not a claim that these are the final head shapes, only that they are usable today and traceable to real kernel inputs rather than speculative. Per §4's timestamping rule, every state object here carries the absolute sample counter it was produced at ( ), never a chunk relative index. Functions Returns: A validated , throwing on any missing/invalid required field rather than silently defaulting physiologically meaningful values. Constants — NeuralPhysiologyState.js — Phase 2 Voice Box state schema ( ). The model's predicted per frame physiology state, per §4: four control heads plus","contentHash":"4eab4440e539968a680e36d496cfa2a6e15654973093dc59c12bde6935e3c42f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/NeuralPhysiologyState.md::0001","path":"agi/reference/particle_voice/articulatory/NeuralPhysiologyState.md","title":"particle_voice/articulatory/NeuralPhysiologyState.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/NeuralPhysiologyState.js","updated":"","headings":["particlevoice/articulatory/NeuralPhysiologyState.js","Functions","createNeuralPhysiologyState({ sampleIndex, respiratoryDrive, glottalState, tractGesture, articulationEvent = null, uncertainty = { confidence: 1 }, })","validateRespiratoryDriveHead(head)","validateGlottalStateHead(head)","validateTractGestureHead(head)","validateArticulationEventHead(head)","validateUncertaintyHead(head)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"Constants — NeuralPhysiologyState.js — Phase 2 Voice Box state schema ( ). The model's predicted per frame physiology state, per §4: four control heads plus an uncertainty head, version . This is a working definition of each head's field set — the heads themselves are named and required by the plan, but their exact field composition was not otherwise specified anywhere in the frozen documents, so the fields chosen here are deliberately the smallest set that maps DIRECTLY onto an already built, already tested GPU kernel's input parameters (not invented ahead of a consumer): → drives / . ( / / / / ) → the exact parameter names takes per instance. → the area profile / consume. ( / / ) → drives / injection points (the actual multi port coupling math those two kernels' docstrings still flag as deferred — this head only carries the control values, not a coupling implementation). → a single scalar per frame confidence, the minimal representation until a real model exists to justify a richer (e.g. per head covariance) shape. Like every other document in this project, this field set may still change before a freeze — it is not a claim that these are the final head shapes, only that they are usable today and traceable to real kernel inputs rather than speculative. Per §4's timestamping rule, every state object here carries the absolute sample counter it was produced at ( ), never a chunk relative index. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"5f5fadec9844fe8bcbe54d7de5b228b44c652c98d098ddf168f2dc2bd3b54b95"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/ParticleTract.md::0000","path":"agi/reference/particle_voice/articulatory/ParticleTract.md","title":"particle_voice/articulatory/ParticleTract.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/ParticleTract.js","updated":"","headings":["particlevoice/articulatory/ParticleTract.js","Classes","class ParticleTract","Functions","sectionsForLength(lengthM, sampleRate, speedOfSound = SPEEDOFSOUNDMPERS)","lengthForSections(numSections, sampleRate, speedOfSound = SPEEDOFSOUNDMPERS)","createParticleTract(device, options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleTract.js — Phase 2 ParticleVoice Voice Box orchestrator. The GPU resident articulatory synthesizer: composes the already verified Phase 2 articulatory kernels into audible speech, one fixed size chunk at a time, with all cross chunk state persisted ON THE GPU (no CPU round trip mid pipeline). This is the production counterpart of R6's pure CPU , and deliberately reproduces the same four controllable behaviors that probe proved: stable vowels, nasal coupling, closure/release/frication, and pitch sweeps. Signal graph per chunk (7 GPU passes + 4 state copies, ONE submit): glottal lf ────────────────► voicing ──┐ ├─ signal add ─► source flow ─┐ constriction noise(asp seed) ─► asp ────┘ │ ▼ constriction noise(fric seed) ─► frication ──────► tract waveguide (oral) │ │ radiated ◄─────────┘ └──► nasal tap │ │ │ nasal junction ◄────┘ │ │ └── signal add ◄── radiated │ ▼ final PCM Design decisions worth knowing: Frication is injected at the constriction, not the glottis. The frication noise buffer goes to 's input and is added to the right going wave at , so only the cavity in FRONT of the constriction filters it. Mixing it into instead would make every fricative sound like a whisper. Aspiration, which really is glottal, IS mixed into . No pass. already applies the radiation first difference internally (exactly as R6's does). Running on its output would differentiate twice and produce a thin, bass less buzz. That kernel exists for callers holding an undifferentiated signal. Fixed . / pack their radiated signal and persisted state into one buffer whose internal offsets depend on , so a varying chunk size would move every offset and invalidate the pre built bind groups. A fixed chunk","contentHash":"e72cd148260c4588cbdac1dc4fec375b31019c4df81adfa2914e465d630bbeb1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/ParticleTract.md::0001","path":"agi/reference/particle_voice/articulatory/ParticleTract.md","title":"particle_voice/articulatory/ParticleTract.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/ParticleTract.js","updated":"","headings":["particlevoice/articulatory/ParticleTract.js","Classes","class ParticleTract","Functions","sectionsForLength(lengthM, sampleRate, speedOfSound = SPEEDOFSOUNDMPERS)","lengthForSections(numSections, sampleRate, speedOfSound = SPEEDOFSOUNDMPERS)","createParticleTract(device, options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"into one buffer whose internal offsets depend on , so a varying chunk size would move every offset and invalidate the pre built bind groups. A fixed chunk size is also what a real time audio bridge wants anyway ( schedules in fixed frame buckets), so it is required here rather than worked around. Reflection coefficients are computed CPU side each chunk via 's proven , matching 's stated contract. Changing between chunks is how closure/release is articulated. Visualization is optional and structurally incapable of changing the PCM. §4 requires visualization to be \"bit identically disable able without changing rendered PCM\". Here that is not a runtime convention but a structural property: when is 0 (the default) the visualization buffers, pipeline and dispatches are never created at all, and when it is enabled every visualization buffer is WRITE ONLY from the acoustic path's perspective — the field is copied OUT of / 's already final packed outputs, and nothing in the visualization path is ever read back into the acoustic path. makes the same guarantee at kernel level (it has no read write access to anything the acoustic path reads). Known limitations, stated honestly rather than papered over: and are DISPATCH WIDE (they live in the kernels' uniform structs, not per instance storage arrays), so all instances of one share them. Per instance variation would require promoting both to storage buffers. They are therefore top level controls here, not per instance ones, so the API does not imply a capability that does not exist. The nasal tap is a read only observation of the oral tract, not a rigorous 3 port scattering junction — the oral tract is not loaded by the nasal branch. This matches R6 exactly and is noted in 's docstring too. The visualization field carries the THREE","contentHash":"68631782deac6c3cecd512ba6c1619bc15c781fc4578db09558240ca610e6915"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/ParticleTract.md::0002","path":"agi/reference/particle_voice/articulatory/ParticleTract.md","title":"particle_voice/articulatory/ParticleTract.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/ParticleTract.js","updated":"","headings":["particlevoice/articulatory/ParticleTract.js","Classes","class ParticleTract","Functions","sectionsForLength(lengthM, sampleRate, speedOfSound = SPEEDOFSOUNDMPERS)","lengthForSections(numSections, sampleRate, speedOfSound = SPEEDOFSOUNDMPERS)","createParticleTract(device, options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"— the oral tract is not loaded by the nasal branch. This matches R6 exactly and is noted in 's docstring too. The visualization field carries the THREE per sample solver signals the kernels actually expose (oral radiated, nasal tap, nasal radiated), not one channel per tube section. §4 describes the richer per section field, but does not emit a field — only its radiated signal, final state and the single tapped section. Adding one would mean a output block ( 512 KB per chunk at 32 sections / 1024 samples) allocated whether or not visualization is on. That is a deliberate follow up, not an oversight; the three channels here are enough to drive a ribbon/heatmap of what the solver is actually radiatin","contentHash":"04ca8a7313f6bf29a634184c28cbe0aacb183f69ff488575df85bba1c724e3dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/PhysiologyFeedbackState.md::0000","path":"agi/reference/particle_voice/articulatory/PhysiologyFeedbackState.md","title":"particle_voice/articulatory/PhysiologyFeedbackState.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/PhysiologyFeedbackState.js","updated":"","headings":["particlevoice/articulatory/PhysiologyFeedbackState.js","Functions","createPhysiologyFeedbackState({ sampleIndex, numFrames, mean, rms })","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PhysiologyFeedbackState.js — Phase 2 Voice Box state schema ( ). §4's : \"a reduced/decimated feedback signal from the acoustic solve back toward the model\". The JS side timestamped container for one dispatch's output — per instance (mean, RMS) pairs, one pair per fixed size frame — distinct from 's multi channel visualization field ( 's output): this shape is what the model's control loop reads back, not what a rig/visual system reads. Every consumer of this state should treat it as internal physiology feedback, not a real acoustic measurement — matching §8's / / three domain separation (this is 's reduced form, never to be confused with a microphone observed or rendered PCM measured energy value). Functions Returns: A validated, timestamped for one dispatched reduction. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1dac4d21e11b280dad33314fa5902dae1a709f1130aa6cf1c36d11bbc0d063b3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/TractStateSnapshot.md::0000","path":"agi/reference/particle_voice/articulatory/TractStateSnapshot.md","title":"particle_voice/articulatory/TractStateSnapshot.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/TractStateSnapshot.js","updated":"","headings":["particlevoice/articulatory/TractStateSnapshot.js","Functions","createTractStateSnapshot({ sampleIndex, numChannels, numFrames, field })","channelSeries(snapshot, channel)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TractStateSnapshot.js — Phase 2 Voice Box state schema ( ). §4's : \"low rate timestamped state for rigs/visualization, decimated from the per sample waveguide state\". The JS side timestamped container for one dispatch's output — a box averaged field (one channel per tube section, per that kernel's docstring), NOT the model feedback (mean, RMS) shape wraps ( 's output) — the two are read by different consumers (a rig/visual system here, the model's control loop there) and were kept as separate kernels for exactly this reason (see 's own docstring). Per §4's requirement that visualization \"must be bit identically disable able without changing rendered PCM\", this container holds ONLY derived/decimated data for display — nothing here is ever read back into the acoustic path, matching 's structural read only guarantee. Functions Returns: A validated, timestamped for one decimated field dispatch. Reads channel 's decimated time series out of a snapshot's flat field — matches 's packing (single instance view; the caller selects / slicing upstream of this helper). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b0b14d3b9967afc6b1c046833202afd1bdaa4e2ffd5776f112fe2d64f9228d2c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/VoiceAnatomyProfile.md::0000","path":"agi/reference/particle_voice/articulatory/VoiceAnatomyProfile.md","title":"particle_voice/articulatory/VoiceAnatomyProfile.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/VoiceAnatomyProfile.js","updated":"","headings":["particlevoice/articulatory/VoiceAnatomyProfile.js","Functions","createVoiceAnatomyProfile({ oralAreas, nasalAreas = null, glottalReflection = DEFAULTGLOTTALREFLECTION, lipReflection = DEFAULTLIPREFLECTION, nostrilReflection = DEFAULTNOSTRILREFLECTION, formantScale = 1, pitchRangeHz = { min: 80, max: 400 }, } = {})","defaultVoiceAnatomyProfile()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VoiceAnatomyProfile.js — Phase 2 Voice Box state schema ( ). §4's : \"persistent per character morphology (equivalent role to 's /pitch range calibration, but for non cloned/authored characters rather than captured voices)\". This is the STATIC per voice data that stays constant across frames — the rest position oral tube area profile, optional nasal branch area profile, and the three boundary reflection coefficients / require ( / / , all magnitude for BIBO stability per (R6)) — as distinct from 's , which is the per FRAME predicted deviation/gesture applied on top of this rest profile, not a replacement for it. (R6/R6A) already proved out / , , , as one working anatomy — below reuses those exact proven values as the default rather than inventing new ones. Functions Returns: A validated, immutable . The R6/R6A proven default anatomy (uniform tube, no nasal coupling) — a reasonable starting profile for an authored (non cloned) character, not a claim of acoustic realism. Constants — VoiceAnatomyProfile.js — Phase 2 Voice Box state schema ( ). §4's : \"persistent per character morphology (equivalent role to 's /pitch range calibration, but for non cloned/authored characters rather than captured voices)\". This is the STATIC per voice data that stays constant across frames — the rest position oral tube area profile, optional nasal branch area profile, and the three boundary reflection coefficients / require ( / / , all magnitude for BIBO stability per (R6)) — as distinct from 's , which is the per FRAME predicted deviation/gesture applied on top of this rest profile, not a replacement for it. (R6/R6A) already proved out / , , , as one working anatomy — below reuses those exact proven","contentHash":"3f46e8b3e84145d5c3009d19f2fb27c4cca6a1c1c9b02baf63e3a30cc85e53b2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/VoiceAnatomyProfile.md::0001","path":"agi/reference/particle_voice/articulatory/VoiceAnatomyProfile.md","title":"particle_voice/articulatory/VoiceAnatomyProfile.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/VoiceAnatomyProfile.js","updated":"","headings":["particlevoice/articulatory/VoiceAnatomyProfile.js","Functions","createVoiceAnatomyProfile({ oralAreas, nasalAreas = null, glottalReflection = DEFAULTGLOTTALREFLECTION, lipReflection = DEFAULTLIPREFLECTION, nostrilReflection = DEFAULTNOSTRILREFLECTION, formantScale = 1, pitchRangeHz = { min: 80, max: 400 }, } = {})","defaultVoiceAnatomyProfile()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"applied on top of this rest profile, not a replacement for it. (R6/R6A) already proved out / , , , as one working anatomy — below reuses those exact proven values as the default rather than inventing new ones. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"fba4d7f6923afbf867f016ba53636145de6b5bdd04e74ea69d47818cf18cf773"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/articulatory/WaveguideAcousticState.md::0000","path":"agi/reference/particle_voice/articulatory/WaveguideAcousticState.md","title":"particle_voice/articulatory/WaveguideAcousticState.js","description":"","kind":"reference","source":"agi/particle_voice/articulatory/WaveguideAcousticState.js","updated":"","headings":["particlevoice/articulatory/WaveguideAcousticState.js","Functions","createWaveguideAcousticState({ sampleIndex, numSamples, radiated, finalRight, finalLeft, finalPrevOutput, nasalRadiated = null })","nextChunkInitialState(previousState)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WaveguideAcousticState.js — Phase 2 Voice Box state schema ( ). \"The R6 tract's per sample output (radiated signal + nasal tap)\" per §4 — the JS side timestamped container for one dispatched chunk's worth of ( , plus the persisted / / continuation state that kernel's packed output layout produces) and, optionally, a coupled chunk's own radiated output. This container does not itself dispatch either kernel or compute ( 's own docstring notes the nasal tap read out is still deferred there) — it only fixes the shape a caller that DOES dispatch those kernels should hand back, so downstream consumers (the audio bridge, , ) have one stable state shape to depend on regardless of which kernel(s) produced it. Functions Returns: A validated, timestamped for one dispatched chunk. Builds the next chunk's initial state inputs ( 's / / bindings) from a previous chunk's — the exact cross chunk continuity 's test verifies at the kernel level. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"e83b5609ed0e27d31886be863e962bc9a49d6e730c304b0257ee4f46809d1cc6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/G2PModel.md::0000","path":"agi/reference/particle_voice/frontend/G2PModel.md","title":"particle_voice/frontend/G2PModel.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/G2PModel.js","updated":"","headings":["particlevoice/frontend/G2PModel.js","Classes","class G2PModel","Functions","graphemesToPhonemeSymbols(word)","assignStressHeuristic(word, symbols)","graphemesToPhonemes(word)","textToPhonemeSequence(normalized, { g2p = new G2PModel()","createG2PModel(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: G2PModel.js — Phase 3 ParticleVoice text frontend. Grapheme to phoneme fallback for words does not cover, plus — the deterministic lowering §4 describes, which turns raw text into the triple the model consumes. It is rules, not a network — deliberately The plan calls for a \"minimal \" in Phase 3, and this is a deterministic, context sensitive letter to sound rule set , not a trained model. That is the honest choice at this stage: a neural G2P needs a pronunciation corpus to train against, and this project vendors no external data (CMUdict included). Rules give reproducible output today, and the class boundary here is what a learned model would later slot into without touching callers. The name matches the plan's; the implementation does not pretend to be learned. Accuracy expectations, stated plainly English orthography is not a function of spelling alone, so a rule set of this size gets the regular cases right and a meaningful minority wrong ( has two pronunciations; breaks the rule; stress placement in long words is genuinely lexical). That is exactly why exists and is consulted FIRST — every word whose spelling actively lies belongs there. G2P's job is to make unseen words (character names, invented words, rare vocabulary) pronounceable and stable, not to be a dictionary. Rule format Each rule is , tried in order at each position, first match winning. Rules are authored longest target first per letter so digraphs beat single letters. The context pattern language is deliberately tiny — three metacharacters, no regex — so a rule's behaviour is obvious by inspection: word boundary (start of a left context, end of a right context) exactly one consonant letter exactly one vowel","contentHash":"9867e0704b04df347e0269a61fb2dbb1564f2e10d650613ca23bbea65aaa30d6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/G2PModel.md::0001","path":"agi/reference/particle_voice/frontend/G2PModel.md","title":"particle_voice/frontend/G2PModel.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/G2PModel.js","updated":"","headings":["particlevoice/frontend/G2PModel.js","Classes","class G2PModel","Functions","graphemesToPhonemeSymbols(word)","assignStressHeuristic(word, symbols)","graphemesToPhonemes(word)","textToPhonemeSequence(normalized, { g2p = new G2PModel()","createG2PModel(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"so a rule's behaviour is obvious by inspection: word boundary (start of a left context, end of a right context) exactly one consonant letter exactly one vowel letter anything else, a literal letter Stress is assigned afterwards by syllable heuristic (see ), because stress is a property of the whole word, not of any single grapheme. Classes Method Signature Summary Resolve one word, preferring the lexicon. (from ) triggers spell out ONLY when the lexicon has no entry — so , once added to a lexicon, is spoken as a word, while an unknown is spelled out. That ordering is the whole reason the normalizer defers the decision rather than making it. Functions Apply the rule set to a spelling. Returns: Phoneme SYMBOLS (stress is assigned separately). Place a single primary stress by syllable heuristic. Documented as a heuristic because English stress is genuinely lexical — the lexicon is the place to be exact. Suffixes pull stress onto the syllable immediately before them (na TION al → \"NA tion\", in for MA tion). pull stress two syllables back. Otherwise stress the first syllable, unless the word opens with a normally unstressed prefix and has more than one syllable, in which case stress the second. Returns: null} only if the spelling produced no phonemes at all. Deterministic lowering of normalized text into §4's . All three arrays are the same length, one entry per phoneme instance including structural tokens, exactly as that spec requires. Structural insertion follows §4's Effect column: a phrase's token ( for comma level, for terminals) is appended after its words, and a paragraph boundary additionally emits before its (§4: \"longer SIL, breath event likely\"). Parameters: (object) — Output of . Returns: } Constants — Letter to sound rules, grouped by first letter of . Order","contentHash":"22e55c391ba6177f9b6542f6e0117335f65f9da0b941abc7708cb9ecee6b0fb4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/G2PModel.md::0002","path":"agi/reference/particle_voice/frontend/G2PModel.md","title":"particle_voice/frontend/G2PModel.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/G2PModel.js","updated":"","headings":["particlevoice/frontend/G2PModel.js","Classes","class G2PModel","Functions","graphemesToPhonemeSymbols(word)","assignStressHeuristic(word, symbols)","graphemesToPhonemes(word)","textToPhonemeSequence(normalized, { g2p = new G2PModel()","createG2PModel(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"(§4: \"longer SIL, breath event likely\"). Parameters: (object) — Output of . Returns: } Constants — Letter to sound rules, grouped by first letter of . Order within a group IS the priority order. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d4b4f60b839feab068f357bb6ae9b7fd272dcc01dd836c861b3ecd063672bf58"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/PhonemeSet.md::0000","path":"agi/reference/particle_voice/frontend/PhonemeSet.md","title":"particle_voice/frontend/PhonemeSet.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/PhonemeSet.js","updated":"","headings":["particlevoice/frontend/PhonemeSet.js","Functions","phonemeIdOf(symbol)","hasPhoneme(symbol)","phonemeAt(id)","phonemeBySymbol(symbol)","diphthongTargetIds(id)","constrictionPositionOf(id)","isValidStress(stress)","isValidPunctuationContext(tag)","isVowel(id)","isConsonant(id)","isStructural(id)","isVoiced(id)","isDiphthong(id)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PhonemeSet.js — Phase 3 ParticleVoice text frontend. The executable form of : the English phoneme inventory, its per entry articulatory feature vectors, the stress scale, and the punctuation context tags. This module is the SINGLE SOURCE OF TRUTH every other Phase 3 component reads — validates against it, targets it, sizes its embedding table from , and consumes the feature vectors to bias . Corrections to Encoding the spec surfaced four places where its §1 tables (the actual data) disagree with its §1 summary line or its §2 enum declarations. The tables are treated as normative and the spec has been corrected to match; each is recorded here because a reader comparing the two must know which way the discrepancy was resolved. 1. Inventory size. §1 claimed \"24 vowel symbols + 24 consonant symbols + 3 structural tokens = 51\" and IDs . The tables actually list 10 monophthongs + 5 diphthongs = 15 vowels , so the real total is 42 entries, IDs . \"24 vowel symbols\" appears to be an accidental duplication of the consonant count. This matters concretely: it sets 's embedding table size and the legal range in §4, both of which were also stated as 51/ and are now corrected. 2. Vowel height values. §2 declares , but §1's table also uses ( ) and ( ). All five values are kept (see ); the narrower §2 enum was the error. 3. 's rounded column contains , which is not a rounded ness value at all. Modeled here as plus a separate flag, since rhoticity is an independent articulatory property (it shapes the area profile rather than the lip aperture). 4. 's place is in §1's table, which is not one of §2's values. Modeled as with , preserving the information without inventing an enum member the spec does","contentHash":"0a8c11aaafde151be004554229e10bbed5515009d8b8b7273ddad72e1e021425"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/PhonemeSet.md::0001","path":"agi/reference/particle_voice/frontend/PhonemeSet.md","title":"particle_voice/frontend/PhonemeSet.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/PhonemeSet.js","updated":"","headings":["particlevoice/frontend/PhonemeSet.js","Functions","phonemeIdOf(symbol)","hasPhoneme(symbol)","phonemeAt(id)","phonemeBySymbol(symbol)","diphthongTargetIds(id)","constrictionPositionOf(id)","isValidStress(stress)","isValidPunctuationContext(tag)","isVowel(id)","isConsonant(id)","isStructural(id)","isVoiced(id)","isDiphthong(id)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"4. 's place is in §1's table, which is not one of §2's values. Modeled as with , preserving the information without inventing an enum member the spec does not define. Structural tokens ( / / ) carry , , and are identified by — deliberately NOT given invented enum values, since §2's / enums describe articulated speech sounds only. Functions Returns: The id for . Throws on an unknown symbol rather than returning a sentinel, so a G2P/lexicon typo fails loudly instead of silently synthesizing the wrong phone. Returns: The frozen entry for . Returns: null} The two monophthong Returns: The normalized 0..1 constriction position for Returns: True if is one of §3's three legal values. Returns: True if is one of §4's six legal punctuation context ids. Constants — §3: per vowel instance stress, separate from the phoneme symbol. — §4: punctuation context tag ids, emitted per phoneme by . — Includes §1's / , which §2's three value enum omitted (correction 2). — §2: place → normalized position (0 = glottis, 1 = lips) of the narrowest point, fed to 's control points. Provisional estimates per the spec's own §6 — NOT measured against vocal tract MRI data. — The inventory, in §1 table order. Array index IS the phoneme id — appending is safe, reordering is a breaking change to every trained embedding table. — 42 — sizes 's embedding table. See correction 1. — Highest legal phoneme id (41). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"bda6a1b34db25e3096aa06b5a00eb3ea33974452663a98e19cf1d1c09b5fe645"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/PronunciationLexicon.md::0000","path":"agi/reference/particle_voice/frontend/PronunciationLexicon.md","title":"particle_voice/frontend/PronunciationLexicon.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/PronunciationLexicon.js","updated":"","headings":["particlevoice/frontend/PronunciationLexicon.js","Classes","class PronunciationLexicon","Functions","parsePronunciation(pronunciation, wordLabel = '<unknown>')","createPronunciationLexicon(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PronunciationLexicon.js — Phase 3 ParticleVoice text frontend. Word → phoneme sequence dictionary, checked entry by entry against at construction time. Sits between and : a lexicon hit is authoritative, and only words with no entry fall through to G2P's letter to sound rules. ⚠ Stress digits are the INVERSE of CMUdict Pronunciation strings use CMUdict's familiar shape ( ), but the digit follows §3: 0 = unstressed, 1 = SECONDARY, 2 = PRIMARY CMUdict is the other way round ( = primary, = secondary). Copying CMUdict strings verbatim would therefore silently swap primary and secondary stress on every polysyllabic word — audible as wrong prosody, not as an error. This module cannot detect that mistake for you, so the convention is stated here, in §3, and enforced by range validation only. Authoring rules (validated, not merely documented) Every symbol must exist in . A typo throws at construction, naming the word — never at synthesis time. A stress digit is legal ONLY on a vowel. Spec §3 defines stress as a per vowel instance property, so is rejected outright rather than quietly ignored. Omitting the digit on a vowel means unstressed (0). This keeps reduced function words ( = ) readable. At most one primary stress per word. Not exactly one: genuinely reduced function words ( , , ) carry no stress at all, and forcing a primary onto them would produce robotically over stressed speech. Scope is a deliberately curated core, NOT a full dictionary. It covers high frequency function/content words plus — the reason a lexicon exists at all — words whose spelling actively lies about their pronunciation ( , , , , , , ), which any letter to sound rule set gets wrong. CMUdict is not vendored: this","contentHash":"2206f089e1d477f4bcd31884a3b2e78913629e9fd16b3efd818c544b376ba259"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/PronunciationLexicon.md::0001","path":"agi/reference/particle_voice/frontend/PronunciationLexicon.md","title":"particle_voice/frontend/PronunciationLexicon.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/PronunciationLexicon.js","updated":"","headings":["particlevoice/frontend/PronunciationLexicon.js","Classes","class PronunciationLexicon","Functions","parsePronunciation(pronunciation, wordLabel = '<unknown>')","createPronunciationLexicon(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"— words whose spelling actively lies about their pronunciation ( , , , , , , ), which any letter to sound rule set gets wrong. CMUdict is not vendored: this project takes no external data dependencies, and the long tail is 's job. Callers add domain vocabulary (character names, place names) via / . Classes Method Signature Summary defaults to true; pass false for a lexicon containing only caller supplied entries (useful for testing G2P fallback). Words are matched case insensitively; already lowercases, but a caller adding entries by hand should not have to remember that. Add or REPLACE one entry. Replacement is intentional and silent: a caller supplying a character specific pronunciation must be able to override the core lexicon without first removing the default. Spell a token out letter by letter ( → \"you ess ay\"). The caller decides WHEN to do this — 's flag is the signal, but only the caller knows whether a given initialism is pronounced as a word instead. Functions Parse one pronunciation string. Returns: } Constants — Spoken letter names, for spelling out initialisms. flags all caps tokens with but deliberately does not decide whether they are words or initialisms; here is the mechanism for the latter. — Curated core lexicon. Stress digits: 2 = PRIMARY (see the warning above). Grouped by why each entry is here. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"afcf2330526f3ed240724c2d4c00acfc8130c1933192a6110a68dca5fa861b66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/TextNormalizer.md::0000","path":"agi/reference/particle_voice/frontend/TextNormalizer.md","title":"particle_voice/frontend/TextNormalizer.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/TextNormalizer.js","updated":"","headings":["particlevoice/frontend/TextNormalizer.js","Functions","expandCardinal(n)","expandOrdinal(n)","expandDigits(digits)","expandYear(year)","normalizeCharacters(raw)","normalizeText(raw)","flattenWords(normalized)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TextNormalizer.js — Phase 3 ParticleVoice text frontend. Turns raw author/LLM text into speakable words plus the per phrase punctuation context tags §4 defines, ready for / to lower into phoneme ids. Output shape ( ): { raw: string, phrases: [{ words: [{ text, wasAllCaps }], boundary: PUNCTUATION CONTEXT id, // §4 tag for THIS phrase's end structural: 'SP' 'SIL' null, // token to insert at the boundary breathLikely: boolean, // §4: paragraph breaks only }] } One tag per phrase (not per phoneme): §4's per phoneme array is produced downstream by repeating a phrase's tag across the phonemes its words expand into, which is exactly what that spec means by \"repeats within a phrase, changes at boundaries\". Ordering matters Abbreviation expansion and decimal point protection run BEFORE phrase splitting, because both consume characters that would otherwise be mistaken for sentence terminators — is one phrase, not two, and is one number, not then . Getting this order wrong is the classic text frontend bug, so it is enforced by construction here rather than left to a later cleanup pass. Deliberate non guesses Two things this module refuses to infer, because guessing wrong is worse than not trying: Years. could be a year (\"nineteen ninety nine\") or a quantity (\"one thousand nine hundred ninety nine\"), and proves the quantity reading is often right. Bare integers are ALWAYS read as cardinals; is exported for callers that actually know the context (e.g. a date field), rather than being applied by a heuristic that would silently corrupt prices and counts. Acronym pronunciation. is said as a word, letter by letter, and nothing in the surface form distinguishes them. All caps tokens are passed","contentHash":"f7ddbf73eac928293fa547cd33abdfed8f3eca36ab25bf6d2cf5e9b20e087a86"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/frontend/TextNormalizer.md::0001","path":"agi/reference/particle_voice/frontend/TextNormalizer.md","title":"particle_voice/frontend/TextNormalizer.js","description":"","kind":"reference","source":"agi/particle_voice/frontend/TextNormalizer.js","updated":"","headings":["particlevoice/frontend/TextNormalizer.js","Functions","expandCardinal(n)","expandOrdinal(n)","expandDigits(digits)","expandYear(year)","normalizeCharacters(raw)","normalizeText(raw)","flattenWords(normalized)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"prices and counts. Acronym pronunciation. is said as a word, letter by letter, and nothing in the surface form distinguishes them. All caps tokens are passed through with so gets first refusal and can fall back to spelling out — the decision belongs where the pronunciation knowledge lives, not here. Dates and clock times are likewise out of scope for (both are format ambiguous: is a date in one locale and a fraction in another). They are documented as unhandled rather than half handled. Functions Returns: as cardinal words. Negative values are prefixed . Returns: as ordinal words ( → ). Returns: Digits spoken individually, for decimal fractions and spelled out sequences. Read a 4 digit year the way speech does. NOT applied automatically — see this module's \"deliberate non guesses\" note; callers that know a number is a year opt in explicitly. Unicode/typography normalization: NFKC, curly quotes and dashes to ASCII, whitespace collapsed (paragraph breaks preserved as ). Parameters: (string) — No description in source JSDoc. Returns: , boundary: number, structural: string null, breathLikely: boolean } }} Returns: Every spoken word across all phrases, for lexicon coverage checks and tests. Constants — Expanded before phrase splitting, so their trailing never reads as a sentence end. Keys are matched case insensitively without the period. — Standalone symbol → word. Applied per token, so between words works but is left to the lexicon. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"80c68d9cd6e42e9c20082f7bc34e39675776e5179af5f85daf23e038d2417cb2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/lab/ManualArticulator.md::0000","path":"agi/reference/particle_voice/lab/ManualArticulator.md","title":"particle_voice/lab/ManualArticulator.js","description":"","kind":"reference","source":"agi/particle_voice/lab/ManualArticulator.js","updated":"","headings":["particlevoice/lab/ManualArticulator.js","Classes","class ManualArticulator","Functions","normalizePose(pose = {})","interpolatePoses(a, b, t)","poseAreaProfile(pose, numSections)","createManualArticulator(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ManualArticulator.js — Phase 3 ParticleVoice lab. Turns direct articulator controls (the Voice Box demo's sliders) into the SAME physiology stream shape produces, so accepts it unchanged. Why this is a module and not inline demo code The plan requires the live demo to have \"manual articulator mode + neural mode; same \". If manual mode built its own control path — or worse, called directly — the two modes would diverge: different smoothing, different validation, a different visualization source. By emitting the identical stream shape, manual mode goes through exactly the same → → path, and the visualization comes from the same solver snapshots. That makes \"same VisualAirflowState\" structural rather than a promise, and it means this logic is testable headlessly instead of only by clicking. Controls Deliberately the physical knobs, not phonemes — the point of manual mode is to drive the tract directly: , — glottal source (0 = glottis, 1 = lips) and — one moving constriction, the single most expressive articulator , — the tube's two ends — velum — turbulence at the constriction — subglottal drive A held pose is rendered as a constant stream; produces a glide between two poses, which is how the demo can sweep a diphthong or a closure/release gesture without hand authoring every frame. Classes Method Signature Summary Build a physiology stream from a per frame pose function — the identical shape returns, so consumes it unchanged. A single held pose for — the \"move a slider and listen\" case. Glide through a list of poses over , spending equal time on each leg. Two poses give a simple transition; three or more let the demo trace a closure/release or a diphthong. Functions Validate and","contentHash":"921c3677b74700483f9874f35bd196668d7f589362c85dd2eba1c2edb72f8eeb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/lab/ManualArticulator.md::0001","path":"agi/reference/particle_voice/lab/ManualArticulator.md","title":"particle_voice/lab/ManualArticulator.js","description":"","kind":"reference","source":"agi/particle_voice/lab/ManualArticulator.js","updated":"","headings":["particlevoice/lab/ManualArticulator.js","Classes","class ManualArticulator","Functions","normalizePose(pose = {})","interpolatePoses(a, b, t)","poseAreaProfile(pose, numSections)","createManualArticulator(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"spending equal time on each leg. Two poses give a simple transition; three or more let the demo trace a closure/release or a diphthong. Functions Validate and clamp a partial pose into a complete one. Linear blend between two poses; switches at the midpoint since it is boolean. Area profile for one pose, using the same 3 control point shape uses for vowels. Constants — Slider metadata for the demo UI, kept beside the pose it describes so the two cannot drift apart. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"dea5cca8fd2845d7291b4f7b3ce4f737a56c4160fd5f7ea1dd0177f9f90e5521"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/lab/TractSagittalView.md::0000","path":"agi/reference/particle_voice/lab/TractSagittalView.md","title":"particle_voice/lab/TractSagittalView.js","description":"","kind":"reference","source":"agi/particle_voice/lab/TractSagittalView.js","updated":"","headings":["particlevoice/lab/TractSagittalView.js","Classes","class TractSagittalView","Functions","diameterForArea(areaCm2)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TractSagittalView.js — mid sagittal renderer for the vocal tract area function. Draws what the solver is actually doing, as an anatomical cross section: the pharynx rising from the glottis, the bend behind the tongue, the oral cavity, the teeth and the lips. The tract's array IS the picture — section is a slice of tube, and its cross sectional area is the gap between the tongue surface and the roof of the mouth at that point. Why a sagittal view rather than a plot of the numbers A line plot of 32 areas is readable but not diagnosable : it does not tell you whether a shape is a plausible mouth. Errors in this project have repeatedly been of exactly that kind — a tract twice the correct length, a \"stop\" whose closure never closed, a constriction so tight it would whistle. All of those are obvious at a glance in an anatomical view and invisible in a spectrum. Geometry The centreline follows an arc, matching how the real tract bends 90 degrees behind the tongue: the glottis end points up, the lip end points forward. Each section is drawn radially across that arc, with the OUTER boundary fixed (the rigid palate, teeth and rear pharyngeal wall) and the INNER boundary displaced by the section's diameter (the tongue and jaw, which are what move). Diameter, not area, sets the drawn width: a tube's diameter goes as the SQUARE ROOT of its area, so plotting area directly would exaggerate open sections and make near closures look tighter than they are. Classes Renders one frame of tract geometry. Stateless by design: it takes the geometry and draws it, so the same view can be driven by 's per frame stream, by 's live sliders, or by a single static profile from , with no notion of playback","contentHash":"74dec0e5e30dc2ac4b00cfd5cad91a5016add6d4d4e60c94052fc6a102a37f9f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/lab/TractSagittalView.md::0001","path":"agi/reference/particle_voice/lab/TractSagittalView.md","title":"particle_voice/lab/TractSagittalView.js","description":"","kind":"reference","source":"agi/particle_voice/lab/TractSagittalView.js","updated":"","headings":["particlevoice/lab/TractSagittalView.js","Classes","class TractSagittalView","Functions","diameterForArea(areaCm2)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"and draws it, so the same view can be driven by 's per frame stream, by 's live sliders, or by a single static profile from , with no notion of playback inside it. Method Signature Summary Centreline geometry for section of . Draw one frame. Functions Returns: Tube diameter in cm for a cross sectional area in cm^2. Constants — Anatomical landmarks as a fraction of tract length from the glottis, used only for labels and the teeth marker. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"f0642d376d2ebeb74f79ba11f02b7b35934e7fe5668ff0998203e29024720a2c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/ArticulationHead.md::0000","path":"agi/reference/particle_voice/model/ArticulationHead.md","title":"particle_voice/model/ArticulationHead.js","description":"","kind":"reference","source":"agi/particle_voice/model/ArticulationHead.js","updated":"","headings":["particlevoice/model/ArticulationHead.js","Classes","class ArticulationHead","Functions","physiologyStateAt(result, frame, { glottalReflection, lipReflection } = {})","createArticulationHead(config)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ArticulationHead.js — Phase 3 ParticleVoice model. Per frame streams → ( ): the four control heads plus uncertainty that actually consumes. This is where §2's articulatory feature vectors finally reach the vocal tract — place becomes a constriction position, manner becomes a constriction degree, height/backness/rounded become a vowel area profile. Rule based, mapping features to geometry Like , this is a deterministic feature→geometry mapping, not a trained head. §6 already flags its place position percentages as \"provisional estimates ... not measured against real vocal tract MRI data\", and the vowel profiles here are the same kind of estimate: a 3 control point whose constriction position comes from backness, constriction area from height, and lip area from rounding. They are ordered correctly (high vowels narrower than low, front constrictions further forward than back) and produce distinguishable formants — verified in Phase 2 to be what makes a vowel a vowel rather than a buzz — but they are not fitted to measured data. Two constraints that are NOT stylistic 1. must be strictly positive, even when unvoiced. It is tempting to set the glottal excitation to 0 on a voiceless frame. That breaks : its Newton solve for computes , so makes the derivative exactly 0 and the update evaluates to NaN , which then propagates through the whole waveguide. 's own validator independently requires . Voiceless frames therefore use a small positive — inaudible, but numerically safe. 2. Areas are SMOOTHED across frames, per manner. Snapping the area profile to a new target at a phoneme boundary is a step change in the waveguide's reflection coefficients, which radiates as a click — the precise","contentHash":"53c7039e9eece74facda6236f9d33d13ea8619bdec3d71e235eb9900b8e8519f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/ArticulationHead.md::0001","path":"agi/reference/particle_voice/model/ArticulationHead.md","title":"particle_voice/model/ArticulationHead.js","description":"","kind":"reference","source":"agi/particle_voice/model/ArticulationHead.js","updated":"","headings":["particlevoice/model/ArticulationHead.js","Classes","class ArticulationHead","Functions","physiologyStateAt(result, frame, { glottalReflection, lipReflection } = {})","createArticulationHead(config)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"the area profile to a new target at a phoneme boundary is a step change in the waveguide's reflection coefficients, which radiates as a click — the precise artifact Phase 2's exit gate spent effort eliminating. Each manner gets its own time constant because the right smoothing speed is phonetically real, not a tuning knob: a stop's closure and release ARE fast (smearing them destroys the plosive), while a vowel to vowel transition is genuinely slow. A single global constant would either smear plosives or click on vowels. Output shape returns COMPACT typed arrays (one row per frame), not an array of frozen objects: a few seconds of speech is hundreds of frames, and materializing hundreds of frozen nested objects per utterance would be wasteful when the consumer reads them once, in order. builds the real validated schema object on demand, so the schema is genuinely exercised (and validated) rather than bypassed. Classes Method Signature Summary Target area profile for one phoneme id, cached (profiles are pure functions of the phoneme). Profile for a phoneme at (0..1) through its own duration, which is what makes a diphthong glide. Functions Materialize one frame of a result as a validated . Built on demand rather than eagerly — see the header's \"output shape\" note — so the schema and its validators are genuinely exercised without allocating hundreds of frozen objects per utterance. Constants — Small but strictly positive glottal excitation for voiceless frames. See constraint 1 in the header: 0 would make 's Newton solve produce NaN. — Fallback constriction position (0 = glottis, 1 = lips) by vowel backness, and cross section by height. These are NO LONGER the primary path for the ten monophthongs — see . They were an articulatory adjective mapping (\"front vowels","contentHash":"1aa9615d06f7e596f4023515a8129ab032c76a4d62df6ac69991ae9169540539"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/ArticulationHead.md::0002","path":"agi/reference/particle_voice/model/ArticulationHead.md","title":"particle_voice/model/ArticulationHead.js","description":"","kind":"reference","source":"agi/particle_voice/model/ArticulationHead.js","updated":"","headings":["particlevoice/model/ArticulationHead.js","Classes","class ArticulationHead","Functions","physiologyStateAt(result, frame, { glottalReflection, lipReflection } = {})","createArticulationHead(config)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"and cross section by height. These are NO LONGER the primary path for the ten monophthongs — see . They were an articulatory adjective mapping (\"front vowels constrict further forward\", \"high vowels constrict more tightly\") that is directionally right but produces whatever formants it happens to produce. Since vowel identity is carried almost entirely by F1/F2, \"plausible geometry\" is not good enough: uncalibrated profiles pull every vowel toward a neutral timbre, which is heard as speech like noise with no decipherable vowels. Retained only as the fallback for any vowel with no entry in , so adding a phoneme to cannot crash synthesis before it has been calibrated. — Constriction LENGTH by manner, as a fraction of","contentHash":"2df13efd7b345d56c8fddd9076870d5060a9fec11891bcecf8e3b381defb27a6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/LengthRegulator.md::0000","path":"agi/reference/particle_voice/model/LengthRegulator.md","title":"particle_voice/model/LengthRegulator.js","description":"","kind":"reference","source":"agi/particle_voice/model/LengthRegulator.js","updated":"","headings":["particlevoice/model/LengthRegulator.js","Classes","class LengthRegulator","Functions","regulateLength({ durationFrames, f0Hz, voiced, features = null, featureDim = 0, maxFrames = 1 << 20 })","resampleFrames(regulated, fromRateHz, toRateHz, featureDim = 0)","createLengthRegulator(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: LengthRegulator.js — Phase 3 ParticleVoice model. Expands per PHONEME encoder features and prosody into per FRAME streams, and — because §5 explicitly assigns it here — handles resampling between the 100 Hz plan frame rate and whatever rate the consumer runs at (the Activity path is 8 ms/frame = 125 Hz, §1; the two \"are not required to be equal; any resampling between them is 's job, not assumed away here\"). F0 is interpolated, features are held These two streams are expanded differently, on purpose: F0 is linearly interpolated between phoneme centres. Holding one value per phoneme would produce a pitch STAIRCASE, and a discontinuous F0 is audible as a click or a warble at every phoneme boundary — the exact artifact the Phase 2 exit gate spent effort eliminating from the waveguide. Interpolating between centres (not edges) means each phoneme's nominal pitch is actually reached at its midpoint. Feature vectors are HELD across a phoneme's frames, not interpolated. They are a learned representation, and blending two phonemes' embeddings produces a vector that means neither. Holding is the standard FastSpeech style length regulation and is what the downstream expects. The voiced flag is held — it is boolean; interpolating it would invent half voiced frames that no source model can honour. Where it runs CPU side. The encoder's features are produced on GPU, so using them here costs a readback — but the consumer ( → ) needs per chunk control values in JS anyway ( , ), so the readback is not avoided by moving this to GPU, only relocated. A GPU gather kernel is a straightforward follow up IF profiling later shows the feature upload dominating; the condition that would justify it is stated","contentHash":"2f273dd6abfea39b3354fd62f5e01a29775a7655ef92d183dc4ff9e6cc9f430c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/LengthRegulator.md::0001","path":"agi/reference/particle_voice/model/LengthRegulator.md","title":"particle_voice/model/LengthRegulator.js","description":"","kind":"reference","source":"agi/particle_voice/model/LengthRegulator.js","updated":"","headings":["particlevoice/model/LengthRegulator.js","Classes","class LengthRegulator","Functions","regulateLength({ durationFrames, f0Hz, voiced, features = null, featureDim = 0, maxFrames = 1 << 20 })","resampleFrames(regulated, fromRateHz, toRateHz, featureDim = 0)","createLengthRegulator(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"A GPU gather kernel is a straightforward follow up IF profiling later shows the feature upload dominating; the condition that would justify it is stated so the decision is revisitable rather than forgotten. Classes Method Signature Summary Functions Expand per phoneme streams to per frame streams. durationFrames: ArrayLike<number , f0Hz: ArrayLike<number , voiced: ArrayLike<number , features?: ArrayLike<number , featureDim?: number, maxFrames?: number, }} input Returns: {{ Resample per frame streams from one frame rate to another — the job §5 assigns to this module for crossing between the 100 Hz plan rate and the 125 Hz Activity rate. F0 is linearly interpolated (it is continuous); voicing and the phoneme index use NEAREST neighbour, because both are categorical and interpolating them would invent values that do not exist (a half voiced frame, or a fractional phoneme id). Constants — LengthRegulator.js — Phase 3 ParticleVoice model. Expands per PHONEME encoder features and prosody into per FRAME streams, and — because §5 explicitly assigns it here — handles resampling between the 100 Hz plan frame rate and whatever rate the consumer runs at (the Activity path is 8 ms/frame = 125 Hz, §1; the two \"are not required to be equal; any resampling between them is 's job, not assumed away here\"). F0 is interpolated, features are held These two streams are expanded differently, on purpose: F0 is linearly interpolated between phoneme centres. Holding one value per phoneme would produce a pitch STAIRCASE, and a discontinuous F0 is audible as a click or a warble at every phoneme boundary — the exact artifact the Phase 2 exit gate spent effort eliminating from the waveguide. Interpolating between centres (not edges) means each phoneme's nominal pitch is actually reached at its","contentHash":"7ae2b7d027ce55d08ade585b3fd901dcdd3a06c30dfb150e48d8c035d334c1cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/LengthRegulator.md::0002","path":"agi/reference/particle_voice/model/LengthRegulator.md","title":"particle_voice/model/LengthRegulator.js","description":"","kind":"reference","source":"agi/particle_voice/model/LengthRegulator.js","updated":"","headings":["particlevoice/model/LengthRegulator.js","Classes","class LengthRegulator","Functions","regulateLength({ durationFrames, f0Hz, voiced, features = null, featureDim = 0, maxFrames = 1 << 20 })","resampleFrames(regulated, fromRateHz, toRateHz, featureDim = 0)","createLengthRegulator(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"exit gate spent effort eliminating from the waveguide. Interpolating between centres (not edges) means each phoneme's nominal pitch is actually reached at its midpoint. Feature vectors are HELD across a phoneme's frames, not interpolated. They are a learned representation, and blending two phonemes' embeddings produces a vector that means neither. Holding is the standard FastSpeech style length regulation and is what the downstream expects. The voiced flag is held — it is boolean; interpolating it would invent half voiced frames that no source model can honour. Where it runs CPU side. The encoder's features are produced on GPU, so using them here costs a readback — but the consumer ( → ) needs per chunk con","contentHash":"207c582384a6d77e934b78767d5f79a16566fb9f0a8119a09452a031ec4182ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/ParticleVoiceModel.md::0000","path":"agi/reference/particle_voice/model/ParticleVoiceModel.md","title":"particle_voice/model/ParticleVoiceModel.js","description":"","kind":"reference","source":"agi/particle_voice/model/ParticleVoiceModel.js","updated":"","headings":["particlevoice/model/ParticleVoiceModel.js","Classes","class ParticleVoiceModel","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleVoiceModel.js — Phase 3 ParticleVoice model. Wires the whole Phase 3 path into one call: text → PCM . TextNormalizer → G2P/lexicon → PhonemeSequence → PhonemeEncoder (GPU, optional) → ProsodyPlanner → LengthRegulator → ArticulationHead → NeuralPhysiologyState stream → ParticleTract (GPU acoustic solver) → SafetyLimiter → PCM Why there is no separate in Phase 3 The plan lists \" basic harmonic + noise + waveguide output\". In Phase 3 that IS : it already runs (harmonic source), two streams (aspiration at the glottis, frication at the constriction) and the Kelly Lochbaum waveguide, with lip radiation applied internally. Adding a wrapper that only forwarded to it would be a layer with no content. Phase 4's full source filter Fourier vocoder (bounded spectral residual, MPD/MRD refinement, IFFT + WOLA) is where that module earns its own file — and the seam for it is , which is already separate from the text frontend. Frame rate vs chunk rate: the decimation that matters emits physiology at the 100 Hz plan frame rate (10 ms), but accepts one control set per chunk — one area profile, one f0, one constriction index. At 32 kHz with 1024 sample chunks a chunk is 32 ms, so roughly 3 physiology frames fall inside each one. Something has to reduce them, and the choice is audible: Areas are AVERAGED across the frames in a chunk. Picking one frame (say the first) would throw away the smoothing deliberately applied and reintroduce exactly the reflection coefficient step it exists to prevent. F0 is averaged for the same reason: a chunk rate pitch staircase is audible as a warble. Constriction index is taken by MAJORITY , not averaged — it is a position index, and the mean of \"junction 20\"","contentHash":"42378ca3b1a1e002058502e46bd211691fc35b18fa4314147f7bf99122daffad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/ParticleVoiceModel.md::0001","path":"agi/reference/particle_voice/model/ParticleVoiceModel.md","title":"particle_voice/model/ParticleVoiceModel.js","description":"","kind":"reference","source":"agi/particle_voice/model/ParticleVoiceModel.js","updated":"","headings":["particlevoice/model/ParticleVoiceModel.js","Classes","class ParticleVoiceModel","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"rate pitch staircase is audible as a warble. Constriction index is taken by MAJORITY , not averaged — it is a position index, and the mean of \"junction 20\" and \"junction 6\" is junction 13, a place no phoneme asked for. Voicing/amplitudes are averaged , which naturally cross fades a voiced→voiceless transition across the chunk rather than switching hard. This decimation is the one place a Phase 3 discontinuity could still enter, so it is concentrated in and tested directly. Breath reservoir 's one pole lag is applied CPU side per chunk to turn 's target subglottal pressure into an actual pressure with inertia, and that pressure scales the glottal excitation. This uses the same formula the GPU kernel expects pre computed, so the two agree; running it here rather than on GPU avoids a readback for a single scalar per chunk. Documented as a deliberate simplification: a per SAMPLE reservoir would need the kernel. Classes Method Signature Summary Per sample frication envelope for one chunk, linearly interpolated from the 100 Hz frame stream at each sample's absolute time. Chunk independent by construction: the value at absolute sample depends only on . See the call site for why frication specifically needs this while the other controls do not. Reduce the physiology frames covering one chunk to a single control set. See the header: averaging vs majority is chosen per field because the wrong reduction is audible. Render a physiology stream (from ) to PCM. Separate from so a manual articulator caller — the Voice Box demo's manual mode — can drive the solver without going through text. Full text → physiology plan, without touching the GPU. Exposed so a caller can inspect or override the plan (and so tests can check the frontend/prosody path without a device). Text → PCM, the whole","contentHash":"ddab4e0899393e1c75a7ceb42913d3e90a107e1ac29617a9b90feec3cc5e5025"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/ParticleVoiceModel.md::0002","path":"agi/reference/particle_voice/model/ParticleVoiceModel.md","title":"particle_voice/model/ParticleVoiceModel.js","description":"","kind":"reference","source":"agi/particle_voice/model/ParticleVoiceModel.js","updated":"","headings":["particlevoice/model/ParticleVoiceModel.js","Classes","class ParticleVoiceModel","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"the GPU. Exposed so a caller can inspect or override the plan (and so tests can check the frontend/prosody path without a device). Text → PCM, the whole Phase 3 path. Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"63e8cceb8452407bf5960298f08fa5bdcf7af0e88b032bcbc01c89bd19c678c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/PhonemeEncoder.md::0000","path":"agi/reference/particle_voice/model/PhonemeEncoder.md","title":"particle_voice/model/PhonemeEncoder.js","description":"","kind":"reference","source":"agi/particle_voice/model/PhonemeEncoder.js","updated":"","headings":["particlevoice/model/PhonemeEncoder.js","Classes","class PhonemeEncoder","Functions","packInt8Weights(weights, outChannels, kTotal)","createDeterministicEncoderWeights(config = {}, seed = 1337)","createPhonemeEncoder(device, options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PhonemeEncoder.js — Phase 3 ParticleVoice model. Phoneme ids → contextual per token feature vectors, entirely on GPU: a row embedding table followed by two Conv1D blocks, each with SiLU, and a final RMSNorm. This is the first Phase 3 component that runs the Phase 1 ParticleNN kernels in composition. Pipeline (7 dispatches, ONE submit per ): ids [T] → embedding f16 → [T, D] sequence major → transpose 2d → [D, T] channel major (see \"layout\" below) → conv1d w8a16 → [H, T] → silu f16 → [H, T] → conv1d w8a16 → [O, T] → silu f16 → [O, T] → transpose 2d → [T, O] sequence major → rmsnorm f16 → [T, O] per token normalization Layout: why two transposes are load bearing The Phase 1 kernels disagree about which axis is major, and each is right for itself: gathers rows so it emits sequence major ; slides a kernel along time so it reads channel major ; normalizes rows, so per token normalization needs sequence major again. Composing them without the axis swaps would not error — it would silently convolve across the feature axis and produce scrambled activations. was added for exactly this, and the two transposes here are the minimum: SiLU is elementwise and therefore layout agnostic, so both convolutions run back to back in channel major before a single swap back for the norm. Weights are placeholders, and this file says so No Phase 3 training exists yet, so produces seeded pseudorandom INT8 weights . They make the pipeline runnable, shape correct and reproducible end to end; they do NOT make it meaningful. The encoder's output is a deterministic function of its input, which is what Phase 3's downstream components need in order to be built and tested — but nothing here has learned anything","contentHash":"f5cf57987f23829161eabcfebda7272750627fa661c394aff89d82e2fc393d04"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/PhonemeEncoder.md::0001","path":"agi/reference/particle_voice/model/PhonemeEncoder.md","title":"particle_voice/model/PhonemeEncoder.js","description":"","kind":"reference","source":"agi/particle_voice/model/PhonemeEncoder.js","updated":"","headings":["particlevoice/model/PhonemeEncoder.js","Classes","class PhonemeEncoder","Functions","packInt8Weights(weights, outChannels, kTotal)","createDeterministicEncoderWeights(config = {}, seed = 1337)","createPhonemeEncoder(device, options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"deterministic function of its input, which is what Phase 3's downstream components need in order to be built and tested — but nothing here has learned anything about phonetics. Real weights arrive with training; the argument is the seam. Quantization Conv weights are INT8 with a per output channel scale, matching 's packed layout exactly (4 int8 per , flattened index, a multiple of 4 — validated in the constructor rather than left to fail as garbage output). Classes Method Signature Summary The GPU buffer holding the last 's features, for a caller that wants to stay GPU resident. Encode + submit without reading back, leaving features in . Functions Pack int8 weights into s, 4 per word, matching 's documented flattening. Parameters: (Int8Array) — Build a complete, reproducible placeholder weight set. See the header: this is scaffolding so the pipeline can be exercised, not a trained model. Constants — Small by design: Phase 3 is a \"tiny deterministic single speaker model\", not a production encoder. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"17702c85d07ce75abe48dc300997a164a7415a05c9592a6514972694b8ad58d8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/ProsodyPlanner.md::0000","path":"agi/reference/particle_voice/model/ProsodyPlanner.md","title":"particle_voice/model/ProsodyPlanner.js","description":"","kind":"reference","source":"agi/particle_voice/model/ProsodyPlanner.js","updated":"","headings":["particlevoice/model/ProsodyPlanner.js","Classes","class ProsodyPlanner","Functions","createProsodyPlanner(config)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProsodyPlanner.js — Phase 3 ParticleVoice model. Predicts per phoneme duration , F0 and a voiced flag from a ( §4), at the plan frame rate of 100 Hz / 10 ms per frame that spec fixes. Rule based, and the plan says \"minimal\" This is a deterministic rule model, not a trained one: durations come from per manner base values scaled by stress and boundary position, and F0 from a declination line with stress excursions and a terminal contour selected by punctuation context. Phase 3's goal is \"a tiny deterministic single speaker model\", and a learned duration/F0 predictor needs aligned speech data this project does not have. The numbers below are therefore plausible phonetics, not measured values — they are ordered correctly relative to each other (stops shorter than fricatives, diphthongs longer than monophthongs, stressed longer than unstressed), which is what makes speech intelligible, but they are not fitted to any corpus. takes an optional bag so a caller can retune without editing this file, and the class boundary is where a learned predictor slots in. What it deliberately does not do No per phoneme F0 contour inside a phoneme. One target per phoneme; smoothing into a continuous per frame curve is 's job, because that is where frame counts exist. Emitting a flat value per phoneme here and interpolating there avoids the audible pitch STEP that a naive per phoneme hold would produce. No accent/emotion conditioning. §3's factorized conditioning channels exist, but wiring them is Phase 4+; pretending to condition on them now would be fake. Classes Method Signature Summary Functions Constants — §5: the plan frame rate is 100 Hz (10 ms/frame). — Base durations in MILLISECONDS by","contentHash":"4daeee644a03476e81f1dcb0ce5c899c446e9d55bc77d3062e3fad2ae697bbc6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/model/ProsodyPlanner.md::0001","path":"agi/reference/particle_voice/model/ProsodyPlanner.md","title":"particle_voice/model/ProsodyPlanner.js","description":"","kind":"reference","source":"agi/particle_voice/model/ProsodyPlanner.js","updated":"","headings":["particlevoice/model/ProsodyPlanner.js","Classes","class ProsodyPlanner","Functions","createProsodyPlanner(config)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"now would be fake. Classes Method Signature Summary Functions Constants — §5: the plan frame rate is 100 Hz (10 ms/frame). — Base durations in MILLISECONDS by articulatory manner. Relative ordering is the part that matters (see header); absolute values are plausible defaults. — Structural token durations, keyed by the punctuation context they sit at (spec §4's Effect column: comma level is a short pause, terminals are full silences, a paragraph is longer still). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7829ab05d5da47bc38987a80a2130e459fe964c1b48fc1f7f8ce55260be411d2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/autodiff/BackwardGraphCompiler.md::0000","path":"agi/reference/particle_voice/nn/autodiff/BackwardGraphCompiler.md","title":"particle_voice/nn/autodiff/BackwardGraphCompiler.js","description":"","kind":"reference","source":"agi/particle_voice/nn/autodiff/BackwardGraphCompiler.js","updated":"","headings":["particlevoice/nn/autodiff/BackwardGraphCompiler.js","Classes","class BackwardGraphCompiler","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BackwardGraphCompiler.js — Phase 1 ParticleNN autodiff STUB. Not wired into anything until Phase 11. Walks a 's recorded forward ops in reverse and builds a node per op that has a registered rule (ops without one are skipped, not silently faked with an identity/zero gradient). Refuses to compile anything if the registry is completely empty — the honest current state (no backward rules exist yet for any real kernel) rather than returning a plausible looking but meaningless empty graph. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"36d67e53a10321fea42baf060a11457a2483ccc75e927a9c159c35865d6d21ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/autodiff/BackwardRuleRegistry.md::0000","path":"agi/reference/particle_voice/nn/autodiff/BackwardRuleRegistry.md","title":"particle_voice/nn/autodiff/BackwardRuleRegistry.js","description":"","kind":"reference","source":"agi/particle_voice/nn/autodiff/BackwardRuleRegistry.js","updated":"","headings":["particlevoice/nn/autodiff/BackwardRuleRegistry.js","Classes","class BackwardRuleRegistry","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BackwardRuleRegistry.js — Phase 1 ParticleNN autodiff STUB. Not wired into anything until Phase 11. Maps a forward op name (from 's allowlist, e.g. ) to a backward rule: a function that, given the recorded forward op's inputs/outputs/params plus the gradient(s) flowing into its outputs, produces the gradient(s) with respect to its inputs. No rules are registered for any real kernel yet — that is genuinely Phase 11 work (differentiating through INT8 quantization and FP16 rounding correctly is a real design problem, not something to hand wave here) — this file only fixes the registry shape. Classes BackwardRuleRegistry.js — Phase 1 ParticleNN autodiff STUB. Not wired into anything until Phase 11. Maps a forward op name (from 's allowlist, e.g. ) to a backward rule: a function that, given the recorded forward op's inputs/outputs/params plus the gradient(s) flowing into its outputs, produces the gradient(s) with respect to its inputs. No rules are registered for any real kernel yet — that is genuinely Phase 11 work (differentiating through INT8 quantization and FP16 rounding correctly is a real design problem, not something to hand wave here) — this file only fixes the registry shape. Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"205734f1bf6d4f36c70595bed2e7bc2e4191f47d578b36d08cebfbdaa447ea58"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/autodiff/GradientGraph.md::0000","path":"agi/reference/particle_voice/nn/autodiff/GradientGraph.md","title":"particle_voice/nn/autodiff/GradientGraph.js","description":"","kind":"reference","source":"agi/particle_voice/nn/autodiff/GradientGraph.js","updated":"","headings":["particlevoice/nn/autodiff/GradientGraph.js","Classes","class GradientGraph extends ParticleGraph","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GradientGraph.js — Phase 1 ParticleNN autodiff STUB. Not wired into anything until Phase 11. The backward pass analogue of : nodes are backward rule applications rather than forward kernels, gradient tensor names rather than activation tensor names. Reuses 's DAG/topological sort machinery directly (a gradient graph's dependency structure is a plain DAG exactly like a forward graph's — no different algorithm is needed) rather than duplicating it, and adds for the one thing a gradient graph needs that a forward graph never does: multiple edges producing a gradient for the same tensor must sum, not overwrite (a tensor used as input to two or more forward ops receives a gradient contribution from each one). Classes Method Signature Summary Register that contributes a partial gradient to (in addition to whatever 's normal single producer bookkeeping tracks) — call this instead of 's plain list when a gradient tensor has multiple contributors, since itself rejects a tensor name appearing in more than one node's (correct for forward graphs, wrong for gradient accumulation). Overrides : the base class treats a tensor produced by more than one node as an error (correct for a forward graph, where that always indicates a naming bug) — but a gradient graph's accumulation targets are LEGITIMATELY produced by several nodes (one partial gradient contribution per forward consumer of the original tensor), so this tracks a set of producers per tensor and requires all of them to have run before a node that reads that tensor is visited. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered","contentHash":"c1340c18cc1e71a48b7506186f25de7160ba07f69783983a19a053948d9ccc6f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/autodiff/GradientGraph.md::0001","path":"agi/reference/particle_voice/nn/autodiff/GradientGraph.md","title":"particle_voice/nn/autodiff/GradientGraph.js","description":"","kind":"reference","source":"agi/particle_voice/nn/autodiff/GradientGraph.js","updated":"","headings":["particlevoice/nn/autodiff/GradientGraph.js","Classes","class GradientGraph extends ParticleGraph","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"0f0f9c702085ba273781506f961c2ea7ff12fd78726953fc6fb7003076fc2aab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/autodiff/ParticleTape.md::0000","path":"agi/reference/particle_voice/nn/autodiff/ParticleTape.md","title":"particle_voice/nn/autodiff/ParticleTape.js","description":"","kind":"reference","source":"agi/particle_voice/nn/autodiff/ParticleTape.js","updated":"","headings":["particlevoice/nn/autodiff/ParticleTape.js","Classes","class ParticleTape","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleTape.js — Phase 1 ParticleNN autodiff STUB. Not wired into anything until Phase 11 (browser training), per the plan's explicit phasing. This establishes the recording tape contract a future forward pass will write to and will read from — it is NOT exercised by any real training loop yet (R7's training spike used its own hand wired , deliberately separate from this production module). Records forward pass operations (op name, input tensor names, output tensor names, and any params the backward rule will need) in execution order, reverse mode style. Classes ParticleTape.js — Phase 1 ParticleNN autodiff STUB. Not wired into anything until Phase 11 (browser training), per the plan's explicit phasing. This establishes the recording tape contract a future forward pass will write to and will read from — it is NOT exercised by any real training loop yet (R7's training spike used its own hand wired , deliberately separate from this production module). Records forward pass operations (op name, input tensor names, output tensor names, and any params the backward rule will need) in execution order, reverse mode style. Method Signature Summary Record one forward operation. No op while paused (e.g. during a warm up/inference only pass that shouldn't build a tape). Recorded ops in reverse (execution) order — the order a backward pass must walk them in. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI","contentHash":"3ec136727adb5ac9207f3cfe0be5c50a628a1217c7984dd6ad64212b4b4c8e9f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/autodiff/ParticleTape.md::0001","path":"agi/reference/particle_voice/nn/autodiff/ParticleTape.md","title":"particle_voice/nn/autodiff/ParticleTape.js","description":"","kind":"reference","source":"agi/particle_voice/nn/autodiff/ParticleTape.js","updated":"","headings":["particlevoice/nn/autodiff/ParticleTape.js","Classes","class ParticleTape","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7d8a4a9c426cdf20205c508cd363ab9c4f488983ef43abf39f511147168acfac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/core/ParticleGraph.md::0000","path":"agi/reference/particle_voice/nn/core/ParticleGraph.md","title":"particle_voice/nn/core/ParticleGraph.js","description":"","kind":"reference","source":"agi/particle_voice/nn/core/ParticleGraph.js","updated":"","headings":["particlevoice/nn/core/ParticleGraph.js","Classes","class ParticleGraph","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleGraph.js — Phase 1 ParticleNN core. The uncompiled neural compute graph a model author builds: named nodes with an (must be in §3's operator allowlist) and named input/output tensor slots. (Phase 2+) lowers a into a §8 execution plan / ; this file only builds and validates the DAG itself (topological sort, cycle/dangling reference detection) — it does not compile or dispatch anything. Classes ParticleGraph.js — Phase 1 ParticleNN core. The uncompiled neural compute graph a model author builds: named nodes with an (must be in §3's operator allowlist) and named input/output tensor slots. (Phase 2+) lowers a into a §8 execution plan / ; this file only builds and validates the DAG itself (topological sort, cycle/dangling reference detection) — it does not compile or dispatch anything. Method Signature Summary Topologically sort nodes by producer/consumer dependency (a node depends on whichever other node produces one of its , if any — inputs with no producer are treated as external graph inputs). Throws on a cycle. Result is cached until the next . Every referenced by any node, for a caller to check against a (or §3's allowlist) before compiling. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1e3a6e2b9154193b690ab4584c98f313a5cd9b0cc74b622c21ffb441d9cc8e65"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/core/ParticleKernel.md::0000","path":"agi/reference/particle_voice/nn/core/ParticleKernel.md","title":"particle_voice/nn/core/ParticleKernel.js","description":"","kind":"reference","source":"agi/particle_voice/nn/core/ParticleKernel.js","updated":"","headings":["particlevoice/nn/core/ParticleKernel.js","Classes","class ParticleKernel","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleKernel.js — Phase 1 ParticleNN core. Kernel specialization: resolves a entry + concrete params ( , kernel specific options like ) into one ready to compile unit — WGSL source, entry point, workgroup size, and the explicit bind group layout entries / proved necessary for kernels ( §8). Classes ParticleKernel.js — Phase 1 ParticleNN core. Kernel specialization: resolves a entry + concrete params ( , kernel specific options like ) into one ready to compile unit — WGSL source, entry point, workgroup size, and the explicit bind group layout entries / proved necessary for kernels ( §8). Method Signature Summary Compile this kernel's pipeline via , using the explicit layout path (required for any kernel — see 's ). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"ce7508698822c2a87bd72ede3aef9b8c1412c641d10ac79211e5de2e404d260a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/core/ParticleModel.md::0000","path":"agi/reference/particle_voice/nn/core/ParticleModel.md","title":"particle_voice/nn/core/ParticleModel.js","description":"","kind":"reference","source":"agi/particle_voice/nn/core/ParticleModel.js","updated":"","headings":["particlevoice/nn/core/ParticleModel.js","Classes","class ParticleModel","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleModel.js — Phase 1 ParticleNN core. A loaded model container: a compiled plus its weight memory ( / / ) and header metadata, as one object. Deliberately thin scaffolding at Phase 1 — no real model exists yet ( / that would actually produce one of these from a file are Phase 2+ work); this fixes the shape that loader will hand to callers. Classes ParticleModel.js — Phase 1 ParticleNN core. A loaded model container: a compiled plus its weight memory ( / / ) and header metadata, as one object. Deliberately thin scaffolding at Phase 1 — no real model exists yet ( / that would actually produce one of these from a file are Phase 2+ work); this fixes the shape that loader will hand to callers. Method Signature Summary program: import('./ParticleProgram.js').ParticleProgram, weightPageStore: import('../memory/WeightPageStore.js').WeightPageStore, weightBindWindow: import('../memory/WeightBindWindow.js').WeightBindWindow, weightUploader: import('../memory/WeightPageUploader.js').WeightPageUploader, metadata?: object, }} config Compile every kernel's GPU pipeline ahead of first use. Idempotent. Upload the weight pages required by (defaults to every segment in the program) via , in the given priority order. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"6ae80ffed7ff1ab612c7cce870a02d5c551eeac3242afa7790fa8fc37de08de2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/core/ParticleProgram.md::0000","path":"agi/reference/particle_voice/nn/core/ParticleProgram.md","title":"particle_voice/nn/core/ParticleProgram.js","description":"","kind":"reference","source":"agi/particle_voice/nn/core/ParticleProgram.js","updated":"","headings":["particlevoice/nn/core/ParticleProgram.js","Classes","class ParticleProgram","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleProgram.js — Phase 1 ParticleNN core. A compiled dispatch sequence: 's topological order lowered into an ordered list of steps, one per graph node. builds every step's GPU pipeline via a shared up front (so first dispatch has no compile stall); actually running the steps each frame is 's job, not this file's. Classes Method Signature Summary Compile every step's pipeline via (parallel — pipeline creation for distinct kernels doesn't depend on order). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"2b15acd11ec339f17961cced5ec729e7fb1f266fbd5570725bd3dea934f3e528"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/core/ParticleTensor.md::0000","path":"agi/reference/particle_voice/nn/core/ParticleTensor.md","title":"particle_voice/nn/core/ParticleTensor.js","description":"","kind":"reference","source":"agi/particle_voice/nn/core/ParticleTensor.js","updated":"","headings":["particlevoice/nn/core/ParticleTensor.js","Classes","class ParticleTensor","Functions","contiguousStrides(shape)","tensorElementCount(shape)","wrapReadbackBuffer(dtype, arrayBuffer, size)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleTensor.js — Phase 1 ParticleNN core. GPU resident tensor with explicit shape/strides/dtype/quant metadata. Mirrors 's ownership/readback/dispose conventions (reference only, not imported at runtime — the plan requires ParticleNN to stay decoupled from the LLM runtime) but adds the metadata ParticleVoice actually needs: multiple dtypes ( / / / ) and optional per block INT8 quantization scale/zero data alongside the raw buffer. Classes , when present, describes INT8 block quantization for tensors: — one scale per block, dequantized as (zero point free, symmetric quantization; PRNN v0's kernel implements this exact scheme — see ). Method Signature Summary Read the tensor back to a host typed array matching (f16 comes back as raw u16 bit patterns, not decoded floats — decoding is the caller's job via ). Functions Row major contiguous strides for (element units, not bytes). Wrap a raw readback in the correct typed array view for . Shared by and so readback interpretation lives in exactly one place. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"6273c05b66441fea14248d4b09ff29c93aadc628564d6b5616fc80539c8ddf72"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/core/ParticleTensorView.md::0000","path":"agi/reference/particle_voice/nn/core/ParticleTensorView.md","title":"particle_voice/nn/core/ParticleTensorView.js","description":"","kind":"reference","source":"agi/particle_voice/nn/core/ParticleTensorView.js","updated":"","headings":["particlevoice/nn/core/ParticleTensorView.js","Classes","class ParticleTensorView","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleTensorView.js — Phase 1 ParticleNN core. A zero copy view over a parent 's GPU buffer: a different logical shape/strides/byte offset into the SAME underlying buffer, with no copy and no new buffer allocation. Used for things like binding a single weight page's sub range, or reading one layer's slice out of a stacked activation tensor, without a pass. Classes Method Signature Summary The GPUBuffer this view reads/writes — identical object as the parent's, never copied. suitable for a with dynamic offset support. Read just this view's bytes back to a host typed array (still a real copy — GPU readback always is — but no intermediate buffer duplication on the GPU side). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"e7e024739a6d59444105630e009aa0313277c620a6e5b32f3b8cfac9430f7668"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/KernelRegistry.md::0000","path":"agi/reference/particle_voice/nn/kernels/KernelRegistry.md","title":"particle_voice/nn/kernels/KernelRegistry.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/KernelRegistry.js","updated":"","headings":["particlevoice/nn/kernels/KernelRegistry.js","Classes","class KernelRegistry","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: KernelRegistry.js — Phase 1 ParticleNN kernel infrastructure. Maps kernel name generator, mirroring 's design (reference only, not imported — same LLM runtime decoupling rule as ). Each generator here also declares (how many read only storage bindings it expects before the single read write output binding) so 's caller can build the matching explicit bind group layout required for kernels (see §8 / 's ) without re deriving each kernel's binding count by hand. Classes Method Signature Summary Generate WGSL source for , forwarding (e.g. ) to its generator. The a kernel needs: uniform@0 (unless the kernel declared , e.g. / , which need no per dispatch scalar data), then read only storage bindings, then one read write storage output binding last — matches every Phase 1/2 kernel's binding convention exactly (verified by construction in ). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1d30036ed83b297f18d623a00ea1e28d1824751a7594c8b9b74489c6aff87d40"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/ShaderComposer.md::0000","path":"agi/reference/particle_voice/nn/kernels/ShaderComposer.md","title":"particle_voice/nn/kernels/ShaderComposer.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/ShaderComposer.js","updated":"","headings":["particlevoice/nn/kernels/ShaderComposer.js","Classes","class ShaderComposer","Functions","async createDefaultShaderComposer()","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ShaderComposer.js — Phase 1 ParticleNN kernel infrastructure. WGSL chunk composition with dependency resolution: register named chunks (each optionally depending on other chunks), then compose an ordered, deduplicated concatenation for a kernel body — so e.g. 's is emitted exactly once even if two requested chunks both depend on it, and always appears before any chunk/body that calls it. Classes ShaderComposer.js — Phase 1 ParticleNN kernel infrastructure. WGSL chunk composition with dependency resolution: register named chunks (each optionally depending on other chunks), then compose an ordered, deduplicated concatenation for a kernel body — so e.g. 's is emitted exactly once even if two requested chunks both depend on it, and always appears before any chunk/body that calls it. Method Signature Summary Topologically order (and their transitive deps) then concatenate with appended last. Functions Pre registers the Phase 1 WGSL chunk set ( , , ) so a kernel generator can immediately without registering each chunk itself. has no WGSL fragment (it is a host side only JS< f16 bit conversion utility, per its own module doc) so it is not registered here. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"346809871e5b9cd773b80c483d904547ed0b71baa46f30fe7b551c697bfdc8e8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/ShaderDiagnosticFormatter.md::0000","path":"agi/reference/particle_voice/nn/kernels/ShaderDiagnosticFormatter.md","title":"particle_voice/nn/kernels/ShaderDiagnosticFormatter.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/ShaderDiagnosticFormatter.js","updated":"","headings":["particlevoice/nn/kernels/ShaderDiagnosticFormatter.js","Functions","formatCompilationMessages(messages, { sourceMap = null } = {})","formatDiagnosticReport(kernelName, messages, options = {})","formatErrorsOnly(kernelName, messages, options = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ShaderDiagnosticFormatter.js — Phase 1 ParticleNN kernel infrastructure. Formats (from ) into human readable diagnostics, optionally resolving each message's line number through a to name which chunk it came from — a strict superset of 's error text (which only reports line:col + message, no chunk attribution). Functions Parameters: (GPUCompilationMessage[]) — @param {{ sourceMap?: import('./WGSLSourceMap.js').WGSLSourceMap }} options Returns: a multi line report, or a one line \"no diagnostics\" note if is empty. Only the messages, formatted — the subset that should fail a build/test, distinct from warnings/info the caller may want to log but not fail on. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a41ab0eafcae7ca8a9472b97db21dc3b70bd57fcbd15edc684b542a47135be77"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/WGSLSourceMap.md::0000","path":"agi/reference/particle_voice/nn/kernels/WGSLSourceMap.md","title":"particle_voice/nn/kernels/WGSLSourceMap.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/WGSLSourceMap.js","updated":"","headings":["particlevoice/nn/kernels/WGSLSourceMap.js","Classes","class WGSLSourceMap","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WGSLSourceMap.js — Phase 1 ParticleNN kernel infrastructure. Generated WGSL line originating chunk mapping. Kernels compose WGSL from named chunks ( ) plus their own body; when the GPU compiler reports an error at line N, this turns that bare line number back into \"which named chunk (or the kernel's own body) that line came from\" — the JS source itself isn't line mapped (these are template literals, not a separate compilation step), but chunk attribution is usually enough to know where to look. Classes WGSLSourceMap.js — Phase 1 ParticleNN kernel infrastructure. Generated WGSL line originating chunk mapping. Kernels compose WGSL from named chunks ( ) plus their own body; when the GPU compiler reports an error at line N, this turns that bare line number back into \"which named chunk (or the kernel's own body) that line came from\" — the JS source itself isn't line mapped (these are template literals, not a separate compilation step), but chunk attribution is usually enough to know where to look. Method Signature Summary Append as a named segment, returning it unchanged — call this in place of directly concatenating chunk sources while assembling a kernel's WGSL, so segment boundaries are tracked as a side effect. Combine every added segment's source into the final WGSL string, in the order they were added. Which segment (if any) contains (1 indexed, as reported by ). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training","contentHash":"03ada9387622c3c61cc5b1899ca9d76e7c2b9bb0c7d696ca522ce045d152b3b3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/WGSLSourceMap.md::0001","path":"agi/reference/particle_voice/nn/kernels/WGSLSourceMap.md","title":"particle_voice/nn/kernels/WGSLSourceMap.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/WGSLSourceMap.js","updated":"","headings":["particlevoice/nn/kernels/WGSLSourceMap.js","Classes","class WGSLSourceMap","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"65c983ac4e1ba9698c5ac93deeb2f32a7f2726a481bbf6528bb916ef924cd092"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/WgslPreprocessor.md::0000","path":"agi/reference/particle_voice/nn/kernels/WgslPreprocessor.md","title":"particle_voice/nn/kernels/WgslPreprocessor.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/WgslPreprocessor.js","updated":"","headings":["particlevoice/nn/kernels/WgslPreprocessor.js","Functions","preprocessWgsl(source)","wgsl(strings, ...values)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WgslPreprocessor.js — Phase 1 ParticleNN kernel infrastructure. Tagged template ...\\ supporting / / and / directives, evaluated at kernel generation time (trusted JS call sites only — this is code generation for the kernel author, not a user input template engine, so a plain eval for expressions is an acceptable, deliberate choice here). Directive syntax (each directive must be alone on its own line): if <jsExpression // evaluated with no closure — pre interpolate else // values via before the directive endif // line if the condition depends on a variable for <name in <start ..<end // half open range, start/end integers endfor // body may reference (a // literal placeholder distinct from // , since is already // resolved by template literal // substitution before this runs) Functions Process / / and / directives in a flat WGSL source string, line by line. Tagged template: joins / per normal template literal semantics, then runs over the result. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4be8c34300cc3956a24381a9bd633f6b4cb77e19c63d96e3d105f5ef32dc72eb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/activation/silu_f16.md::0000","path":"agi/reference/particle_voice/nn/kernels/activation/silu_f16.md","title":"particle_voice/nn/kernels/activation/silu_f16.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/activation/silu_f16.js","updated":"","headings":["particlevoice/nn/kernels/activation/siluf16.js","Functions","siluF16Shader({ useShaderF16 = false } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: activation/silu f16.js — Phase 1 ParticleNN kernel. Elementwise SiLU ( ), composed from 's rather than re deriving the sigmoid inline. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"f0c85f9aa69f285e65ea887563c568f585bac2a17baa85ef766cf84e26778a7b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/breath_reservoir.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/breath_reservoir.md","title":"particle_voice/nn/kernels/articulatory/breath_reservoir.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/breath_reservoir.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/breathreservoir.js","Functions","breathReservoirShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: breath reservoir.js — Phase 2 ParticleNN articulatory kernel. First order lag filter: , matching (R6A)'s proven recurrence exactly ( is computed by the caller and passed in, not recomputed here). A first order IIR recurrence is inherently sequential in time, but each of up to N simultaneous voice/capsule instances is fully independent — selects the instance, and a single thread per workgroup walks that instance's whole chunk sequentially (cheap: a chunk is a few hundred samples, and GPU dispatch overhead dominates at that size anyway, so there is nothing to gain from parallelizing within one instance's strictly sequential recurrence). Functions Constants — breath reservoir.js — Phase 2 ParticleNN articulatory kernel. First order lag filter: , matching (R6A)'s proven recurrence exactly ( is computed by the caller and passed in, not recomputed here). A first order IIR recurrence is inherently sequential in time, but each of up to N simultaneous voice/capsule instances is fully independent — selects the instance, and a single thread per workgroup walks that instance's whole chunk sequentially (cheap: a chunk is a few hundred samples, and GPU dispatch overhead dominates at that size anyway, so there is nothing to gain from parallelizing within one instance's strictly sequential recurrence). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"2e9951aefcbf1a25097ef0f9cb631b5b919e5a802b6cd91459de1599e54781ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/constriction_noise.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/constriction_noise.md","title":"particle_voice/nn/kernels/articulatory/constriction_noise.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/constriction_noise.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/constrictionnoise.js","Functions","constrictionNoiseShader({ spectralShape = 'direct', lowpassHold = 32 } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: constriction noise.js — Phase 2 ParticleNN articulatory kernel. Turbulence/frication noise generator for a chosen internal tract junction (fricatives, plosive bursts) — deliberately a SEPARATE kernel from rather than reusing it directly, because the two have genuinely different shapes: generates one flat, constant amplitude signal for the whole dispatch (aspiration noise mixed at the glottis, (R6)'s ), while frication noise needs a per sample, per instance TIME VARYING amplitude envelope (driven by how tightly a constriction is formed, which changes continuously as an articulator moves) and per instance start index/seed so N simultaneous voices/characters never share correlated turbulence. Sharing the same underlying hash rather than inventing a second one is still correct reuse: below is the identical two round Murmur style avalanche hash as / 's (same technique as ), just applied per instance with an amplitude that varies per output sample instead of being a single dispatch wide uniform scalar. does not (yet) consume this kernel's output at a internally (its own docstring flags that as deferred, matching R6's 's own / option) — this kernel only produces the turbulence signal; injecting it into a specific internal tract junction is a orchestration concern for a later phase, once the model that decides the constriction's time varying amplitude envelope exists. Three spectral shapes are supported: (flat/white ish), the default reference; block interpolated for glottal aspiration, giving the noise a predominantly low frequency, breathy character rather than a hissy fricative one; first differenced (blue, +6 dB/octave) for oral frication and plosive bursts, where the high frequency","contentHash":"d2f26e3aa3c21ab620abc93d977e391f7855718f84af19333db883611d0f8ff1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/constriction_noise.md::0001","path":"agi/reference/particle_voice/nn/kernels/articulatory/constriction_noise.md","title":"particle_voice/nn/kernels/articulatory/constriction_noise.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/constriction_noise.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/constrictionnoise.js","Functions","constrictionNoiseShader({ spectralShape = 'direct', lowpassHold = 32 } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"breathy character rather than a hissy fricative one; first differenced (blue, +6 dB/octave) for oral frication and plosive bursts, where the high frequency emphasis makes consonants like /s/ and /t/ pop without changing the vowel source. Functions Constants — constriction noise.js — Phase 2 ParticleNN articulatory kernel. Turbulence/frication noise generator for a chosen internal tract junction (fricatives, plosive bursts) — deliberately a SEPARATE kernel from rather than reusing it directly, because the two have genuinely different shapes: generates one flat, constant amplitude signal for the whole dispatch (aspiration noise mixed at the glottis, (R6)'s ), while frication noise needs a per sample, per instance TIME VARYING amplitude envelope (driven by how tightly a constriction is formed, which changes continuously as an articulator moves) and per instance start index/seed so N simultaneous voices/characters never share correlated turbulence. Sharing the same underlying hash rather than inventing a second one is still correct reuse: below is the identical two round Murmur style avalanche hash as / 's (same technique as ), just applied per instance with an amplitude that varies per output sample instead of being a single dispatch wide uniform scalar. does not (yet) consume this kernel's output at a internally (its own docstring flags that as deferred, matching R6's 's own / option) — this kernel only produces the turbulence signal; injecting it into a specific internal tract junction is a orchestration concern for a later phase, once the model that decides the constriction's time varying amplitude envelope exists. Three spectral shapes are supported: (flat/white ish), the default reference; block interpolated for glottal aspiration, giving the noise a predominantly low","contentHash":"eabae1aea543028ed151f5f7c10fa3303707787f430fca71e4dab90765dec1bc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/constriction_noise.md::0002","path":"agi/reference/particle_voice/nn/kernels/articulatory/constriction_noise.md","title":"particle_voice/nn/kernels/articulatory/constriction_noise.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/constriction_noise.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/constrictionnoise.js","Functions","constrictionNoiseShader({ spectralShape = 'direct', lowpassHold = 32 } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"Three spectral shapes are supported: (flat/white ish), the default reference; block interpolated for glottal aspiration, giving the noise a predominantly low frequency, breathy character rather than a hissy fricative one; first differenced (blue, +6 dB/octave) for oral frication and plosive bursts, where the high frequency emphasis makes consonants like /s/ and /t/ pop without changing the vowel source. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also:","contentHash":"c6983b4bba081c69ea5c48d47dea8ce189f0956056044d51a919baa2efec7ea8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/glottal_lf.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/glottal_lf.md","title":"particle_voice/nn/kernels/articulatory/glottal_lf.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/glottal_lf.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/glottallf.js","Functions","solveLfShapeParameters({ t0, te, tp, ta, ee })","evaluateLfSample(cyclePos, { t0, te, ta, ee, wg, eps, alpha, e0 })","glottalLfShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: glottal lf.js — Phase 2 ParticleNN articulatory kernel. The full Liljencrants Fant (LF) glottal flow DERIVATIVE model, replacing 's raised cosine \"LF lite\" stand in ( (R6)'s own docstring calls that shape a deliberate simplification and names as the real implementation it stands in for). Per period, given control instants Te (glottal closure / main excitation, 0 < Te < T0), Tp (peak flow instant, 0 < Tp < Te), Ta (return phase time constant), and Ee (excitation strength), the classic two segment LF waveform is: E(t) = E0 exp(alpha t) sin(wg t) 0<=t<Te E(t) = (Ee/(eps Ta)) (exp( eps (t Te)) exp( eps (T0 Te))) Te<=t<T0 with . , , and are NOT free parameters — they are pinned by three physical constraints this file's author derived and verified algebraically (rather than recalling a textbook formula from memory, to avoid presenting an unverified transcendental equation as fact): 1. Boundary match at Te: E(Te ) = Ee, giving . 2. solves (the standard LF return phase time constant equation) via Newton Raphson with the exact analytic derivative , , started at . 3. solves the area balance constraint (glottal flow is periodic, so its derivative integrates to zero over one full period): substituting constraint 1 into the closed form (standard antiderivative) and the closed form return phase integral (simplified using constraint 2) gives where and ; this is solved for via Newton Raphson using the exact analytic derivative of (quotient rule from , ), started at (a safe, singularity free starting point: ). Both Newton solves run for a fixed, generous iteration count (8 each) — cheap scalar math, and every thread in this kernel redoes the same per instance solve redundantly rather than solving","contentHash":"922f2aab802d94a93d3f76a41e84207b207d6889df2bb18665c98e4c554bdada"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/glottal_lf.md::0001","path":"agi/reference/particle_voice/nn/kernels/articulatory/glottal_lf.md","title":"particle_voice/nn/kernels/articulatory/glottal_lf.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/glottal_lf.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/glottallf.js","Functions","solveLfShapeParameters({ t0, te, tp, ta, ee })","evaluateLfSample(cyclePos, { t0, te, ta, ee, wg, eps, alpha, e0 })","glottalLfShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"generous iteration count (8 each) — cheap scalar math, and every thread in this kernel redoes the same per instance solve redundantly rather than solving once and broadcasting through workgroup memory: unlike 's per sample recurrence, LF generation has NO cross sample dependency at all (like / ), so the simplest correct design is one thread per (instance, sample) output element, matching those kernels' flat parallel convention exactly. If per period solve cost ever matters at scale, hoisting it into its own once per instance kernel (mirroring 's role for ) is a straightforward follow up, not a design change. Every control instant is expressed in SAMPLES (not seconds), matching 's / / convention and this kernel's own absolute sample counter continuity requirement across chunk boundaries. Functions CPU side reference implementation of the exact same closed form/Newton Raphson math the WGSL kernel below runs — used by the parity test and documented here as the canonical derivation any future GPU side per instance solve kernel (see docstring) must also match bit for bit in structure (same iteration count, same starting values). CPU side reference for a single sample's LF value, given already solved shape parameters — matches the WGSL kernel's per sample branch exactly. Constants — glottal lf.js — Phase 2 ParticleNN articulatory kernel. The full Liljencrants Fant (LF) glottal flow DERIVATIVE model, replacing 's raised cosine \"LF lite\" stand in ( (R6)'s own docstring calls that shape a deliberate simplification and names as the real implementation it stands in for). Per period, given control instants Te (glottal closure / main excitation, 0 < Te < T0), Tp (peak flow instant, 0 < Tp < Te), Ta (return phase time constant), and Ee (excitation strength), the classic two segment","contentHash":"42a99c2866d55e4398eb051c3d4d7b37c2c408a2e1cb85f464bd5e8c18ca6f3a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/glottal_lf.md::0002","path":"agi/reference/particle_voice/nn/kernels/articulatory/glottal_lf.md","title":"particle_voice/nn/kernels/articulatory/glottal_lf.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/glottal_lf.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/glottallf.js","Functions","solveLfShapeParameters({ t0, te, tp, ta, ee })","evaluateLfSample(cyclePos, { t0, te, ta, ee, wg, eps, alpha, e0 })","glottalLfShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"/ main excitation, 0 < Te < T0), Tp (peak flow instant, 0 < Tp < Te), Ta (return phase time constant), and Ee (excitation strength), the classic two segment LF waveform is: E(t) = E0 exp(alpha t) sin(wg t) 0<=t<Te E(t) = (Ee/(eps Ta)) (exp( eps (t Te)) exp( eps (T0 Te))) Te<=t<T0 with . , , and are NOT free parameters — they are pinned by three physical constraints this file's author derived and verified algebraically (rather than recalling a textbook formula from memory, to avoid presenting an unverified transcendental equation as fact): 1. Boundary match at Te: E(Te ) = Ee, giving . 2. solves (the standard LF return phase time constant equation) via Newton Raphson with the exact analytic derivative ,","contentHash":"9fefb5ffa09ebb881fcda16e2e0195b373d6a639b976a38db811a44742300a57"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/lip_radiation.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/lip_radiation.md","title":"particle_voice/nn/kernels/articulatory/lip_radiation.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/lip_radiation.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/lipradiation.js","Functions","lipRadiationShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: lip radiation.js — Phase 2 ParticleNN articulatory kernel. Idealized lip radiation filter: a first difference, , matching (R6)'s exactly ( ) — the differentiating characteristic of radiation from an open end. Despite being defined via a one sample recurrence, this is embarrassingly parallel: for is just the previous element of the same input buffer (already fully computed, no accumulation), and only needs externally supplied state ( , the previous chunk's final raw sample) — so every output sample can be computed independently with no sequential loop at all. Functions Constants — lip radiation.js — Phase 2 ParticleNN articulatory kernel. Idealized lip radiation filter: a first difference, , matching (R6)'s exactly ( ) — the differentiating characteristic of radiation from an open end. Despite being defined via a one sample recurrence, this is embarrassingly parallel: for is just the previous element of the same input buffer (already fully computed, no accumulation), and only needs externally supplied state ( , the previous chunk's final raw sample) — so every output sample can be computed independently with no sequential loop at all. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"141bfaadda8f5f7dca2bd3fb5bb08828fe6aa043f1ccd0cb24d3a2562f26f86e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/nasal_junction.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/nasal_junction.md","title":"particle_voice/nn/kernels/articulatory/nasal_junction.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/nasal_junction.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/nasaljunction.js","Functions","nasalJunctionOutputLayout(numSections, numSamples, numInstances)","nasalJunctionShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: nasal junction.js — Phase 2 ParticleNN articulatory kernel. Production nasal branch: a second, independent Kelly Lochbaum tube chain generalizing risk/KellyLochbaumWaveguide.js (R6)'s proven createNasalBranch().step() to run a whole sample chunk times N instances on GPU, using the exact same one thread per section / double buffered workgroup memory / sequential workgroupBarrier per sample structure as tract waveguide.js (see that file's docstring for the full parallelization rationale, not repeated here). Differences from tract waveguide.js's oral tract, matching R6's createNasalBranch() exactly: The near end has no reflection term at all: nextRight[0] = inputFlow (R6's oral tract instead does sourceFlow + glottalReflection left[0]) — the nasal branch is driven directly by a coupled fraction of an oral tract tap signal, not its own glottal source. The far end uses a single nostrilReflection coefficient (R6's lipReflection equivalent). selects whether the first difference radiation filter is applied: 1.0 for R6's flow domain parity path, 0.0 for ParticleTract's LF derivative domain production path. This kernel does not itself compute the oral tract tap signal fed into inputFlow — that is tract waveguide.js's nasal tap output block, and inputFlow is an ordinary per instance per sample input buffer here, matching every other Phase 2 kernel's convention of not silently reaching into another kernel's state. input gain is the velum/nasal COUPLING fraction. R6's createNasalBranch() has no such parameter because its caller pre multiplied the tap signal (nasalCoupling nasalTapSignal) before calling step(). On GPU that would force either a whole extra scaling kernel or a CPU round trip in","contentHash":"4167ed74e37757869187f62e6473081b6eb6ff8399950f094c2131a6ea8a9a60"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/nasal_junction.md::0001","path":"agi/reference/particle_voice/nn/kernels/articulatory/nasal_junction.md","title":"particle_voice/nn/kernels/articulatory/nasal_junction.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/nasal_junction.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/nasaljunction.js","Functions","nasalJunctionOutputLayout(numSections, numSamples, numInstances)","nasalJunctionShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"the tap signal (nasalCoupling nasalTapSignal) before calling step(). On GPU that would force either a whole extra scaling kernel or a CPU round trip in the middle of an otherwise GPU resident chunk, so the scalar lives here instead — exactly where this file's own docstring already says the branch is \"driven by a coupled fraction of an oral tract tap signal\". input gain = 1.0 reproduces R6's step() bit for bit, which is what the parity test in phase2 dsp.html pins. Functions Shared flat output buffer layout — mirrors tractWaveguideOutputLayout() exactly (same three persisted state pieces plus the radiated signal), kept as its own function per kernel so a future layout change to one tract type can never silently affect the other. Constants — nasal junction.js — Phase 2 ParticleNN articulatory kernel. Production nasal branch: a second, independent Kelly Lochbaum tube chain generalizing risk/KellyLochbaumWaveguide.js (R6)'s proven createNasalBranch().step() to run a whole sample chunk times N instances on GPU, using the exact same one thread per section / double buffered workgroup memory / sequential workgroupBarrier per sample structure as tract waveguide.js (see that file's docstring for the full parallelization rationale, not repeated here). Differences from tract waveguide.js's oral tract, matching R6's createNasalBranch() exactly: The near end has no reflection term at all: nextRight[0] = inputFlow (R6's oral tract instead does sourceFlow + glottalReflection left[0]) — the nasal branch is driven directly by a coupled fraction of an oral tract tap signal, not its own glottal source. The far end uses a single nostrilReflection coefficient (R6's lipReflection equivalent). selects whether the first difference radiation filter is applied: 1.0 for R6's flow domain parity","contentHash":"07d5bd1fff68dbc081c54f51d87e0b12b977188f22f6da6bb84b844891ccfb84"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/nasal_junction.md::0002","path":"agi/reference/particle_voice/nn/kernels/articulatory/nasal_junction.md","title":"particle_voice/nn/kernels/articulatory/nasal_junction.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/nasal_junction.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/nasaljunction.js","Functions","nasalJunctionOutputLayout(numSections, numSamples, numInstances)","nasalJunctionShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"coefficient (R6's lipReflection equivalent). selects whether the first difference radiation filter is applied: 1.0 for R6's flow domain parity path, 0.0 for ParticleTract's LF derivative domain production path. This kernel does not itself compute the oral tract tap signal fed into inputFlow — that is tract waveguide.js's nasal tap output block, and inputFlow is an ordinary per instance per sample input buffer here, matching every other Phase 2 kernel's convention of not silently reaching into another kernel's state. input gain is the velum/nasal COUPLING fraction. R6's createNasalBranch() has no such parameter because its caller pre multiplied the tap signal (nasalCoupling nasalTapSignal)","contentHash":"a9a4efca4c200c6f9528b27ecde4ef36da243199e33a23b4d3688f5f493e3f9b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.md","title":"particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/physiologyfeedbackreduce.js","Functions","physiologyFeedbackReduceOutputLayout(numFrames, numInstances)","physiologyFeedbackReduceShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: physiology feedback reduce.js — Phase 2 ParticleNN articulatory kernel. Reduces a high rate (32 kHz per §3) per sample waveguide/tract signal (e.g. 's radiated output, or a raw right/left traveling wave channel) down to one (mean, RMS) pair per fixed size frame — the §4 names as \"a reduced/decimated feedback signal from the acoustic solve back toward the model\", so the model's control rate loop (100 Hz per §3) can see a compact summary of what the acoustic solver actually produced last frame without reading back and processing the full high rate PCM itself. is expected to be one of the plan's fixed legal chunk buckets (first 12/16/24 frames, steady 32/48/64 frames at the activity frame size, or a caller chosen block size for this specific feedback path) — this kernel does not itself enforce bucket membership, it just requires exactly (no partial trailing frame), matching every other Phase 2 kernel's expectation that framing/bucketing is decided by the caller ( / take the same stance). One thread per (instance, frame) pair does its own small sequential reduction over samples — deliberately not a parallel reduction tree, since typical frame sizes here (tens to a few hundred samples) are small enough that per thread sequential summation is simpler and cheaper than the synchronization a tree reduction would need, the same reasoning 's per instance single thread recurrence gives for its own necessarily sequential loop (this kernel's reduction isn't sequential for correctness, just small enough that a loop is the pragmatic choice). Functions Packed output layout: [mean block (num instances num frames)] then [rms block (num instances num frames)] — kept as its own function so the WGSL","contentHash":"820cb471b96f9077f67d5fd91be94baa4ded1ae1f3d5482017536d8b873bf80d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.md::0001","path":"agi/reference/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.md","title":"particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/physiologyfeedbackreduce.js","Functions","physiologyFeedbackReduceOutputLayout(numFrames, numInstances)","physiologyFeedbackReduceShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"Functions Packed output layout: [mean block (num instances num frames)] then [rms block (num instances num frames)] — kept as its own function so the WGSL offsets and any JS side reader stay in lockstep, matching 's precedent. Constants — physiology feedback reduce.js — Phase 2 ParticleNN articulatory kernel. Reduces a high rate (32 kHz per §3) per sample waveguide/tract signal (e.g. 's radiated output, or a raw right/left traveling wave channel) down to one (mean, RMS) pair per fixed size frame — the §4 names as \"a reduced/decimated feedback signal from the acoustic solve back toward the model\", so the model's control rate loop (100 Hz per §3) can see a compact summary of what the acoustic solver actually produced last frame without reading back and processing the full high rate PCM itself. is expected to be one of the plan's fixed legal chunk buckets (first 12/16/24 frames, steady 32/48/64 frames at the activity frame size, or a caller chosen block size for this specific feedback path) — this kernel does not itself enforce bucket membership, it just requires exactly (no partial trailing frame), matching every other Phase 2 kernel's expectation that framing/bucketing is decided by the caller ( / take the same stance). One thread per (instance, frame) pair does its own small sequential reduction over samples — deliberately not a parallel reduction tree, since typical frame sizes here (tens to a few hundred samples) are small enough that per thread sequential summation is simpler and cheaper than the synchronization a tree reduction would need, the same reasoning 's per instance single thread recurrence gives for its own necessarily sequential loop (this kernel's reduction isn't sequential for correctness, just small enough that a loop is the pragmatic choice). <! HUMAN","contentHash":"7dd325a41f70b2371b995c88aa84108a752d18136642beb317222da575ae39eb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.md::0002","path":"agi/reference/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.md","title":"particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/physiology_feedback_reduce.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/physiologyfeedbackreduce.js","Functions","physiologyFeedbackReduceOutputLayout(numFrames, numInstances)","physiologyFeedbackReduceShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"its own necessarily sequential loop (this kernel's reduction isn't sequential for correctness, just small enough that a loop is the pragmatic choice). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"503348ac891482d39394a4a16e6e63c0865d35d415239677572fefd739338521"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/signal_add.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/signal_add.md","title":"particle_voice/nn/kernels/articulatory/signal_add.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/signal_add.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/signaladd.js","Functions","signalAddShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: signal add.js — Phase 2 ParticleNN articulatory kernel. Elementwise sum of two equal shaped signals: . needs exactly this twice, at the two points its signal graph merges: 1. Glottal source mix — ( ) + ( with a slowly varying envelope) into the that injects at the glottis. 2. Output mix — the oral tract's signal plus the nasal branch's signal ( , already scaled by its own coupling), producing the final PCM. Note that FRICATION is deliberately NOT a third term here. Turbulence belongs at the constriction, not the glottis, so it is fed to 's input and injected at — only the cavity in front of the constriction then filters it, which is what makes a fricative sound like a fricative rather than a whisper. That is why this kernel takes two inputs and not three. This kernel exists because nothing in the registry could do it. There was no elementwise add op, and — the only existing two signal combiner — is NOT a mixer: it sweeps its ratio across the buffer ( ), making it a one shot transition. Using it here would ramp the voicing/aspiration balance from 0 to 1 across every chunk. There are no gain inputs, deliberately: every amplitude this could scale is already a first class parameter of the kernel that PRODUCES the term — 's per instance , 's per sample , and 's . Duplicating that control here would invite the two copies to disagree. Flat parallel with no cross sample dependency (one thread per output element), matching / . Instance layout is implicit: the caller passes and both inputs share the same row major shape, so no per instance indexing is needed at all. Functions Constants — signal add.js — Phase 2 ParticleNN articulatory kernel. Elementwise sum of two equal shaped signals: .","contentHash":"68f0a168d316f52baa91dd7163fa969abaf093e3c3970d647fe2b9376f16efe1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/signal_add.md::0001","path":"agi/reference/particle_voice/nn/kernels/articulatory/signal_add.md","title":"particle_voice/nn/kernels/articulatory/signal_add.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/signal_add.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/signaladd.js","Functions","signalAddShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"indexing is needed at all. Functions Constants — signal add.js — Phase 2 ParticleNN articulatory kernel. Elementwise sum of two equal shaped signals: . needs exactly this twice, at the two points its signal graph merges: 1. Glottal source mix — ( ) + ( with a slowly varying envelope) into the that injects at the glottis. 2. Output mix — the oral tract's signal plus the nasal branch's signal ( , already scaled by its own coupling), producing the final PCM. Note that FRICATION is deliberately NOT a third term here. Turbulence belongs at the constriction, not the glottis, so it is fed to 's input and injected at — only the cavity in front of the constriction then filters it, which is what makes a fricative sound like a fricative rather than a whisper. That is why this kernel takes two inputs and not three. This kernel exists because nothing in the registry could do it. There was no elementwise add op, and — the only existing two signal combiner — is NOT a mixer: it sweeps its ratio across the buffer ( ), making it a one shot transition. Using it here would ramp the voicing/aspiration balance from 0 to 1 across every chunk. There are no gain inputs, deliberately: every amplitude this could scale is already a first class parameter of the kernel that PRODUCES the term — 's per instance , 's per sample , and 's . Duplicating that control here would invite the two copies to disagree. Flat parallel with no cross sample dependency (one thread per output element), matching / . Instance layout is implicit: the caller passes and both inputs share the same row major shape, so no per instance indexing is needed at all. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from","contentHash":"c256d85acf6a5f4f0b1e06d5a46be1daa6c3777a2659e0d20bd3558f45ec1a7a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/signal_add.md::0002","path":"agi/reference/particle_voice/nn/kernels/articulatory/signal_add.md","title":"particle_voice/nn/kernels/articulatory/signal_add.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/signal_add.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/signaladd.js","Functions","signalAddShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"5c57eb5a91f479381ba95e911d683f831840a2bd1b3811b101d2828de91cbefa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/tract_transfer.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/tract_transfer.md","title":"particle_voice/nn/kernels/articulatory/tract_transfer.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/tract_transfer.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/tracttransfer.js","Functions","tractTransferShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: tract transfer.js — Phase 2 ParticleNN articulatory kernel. Converts a per instance tube cross sectional area profile into Kelly Lochbaum junction reflection coefficients — the exact formula (R6)'s proven uses: . 's own docstring notes junction coefficients are \"computed CPU side by the caller... not recomputed here\", matching 's precedent for a fixed shape precomputation — that is still correct for a STATIC area profile. This kernel exists for the case the plan's implies: an area profile predicted fresh every control frame (100 Hz per §3), which would otherwise force a GPU to CPU to GPU round trip every frame just to run one elementwise division — exactly the per frame readback stall the plan's Production Contract and style staged readback convention are meant to avoid. Keeping the whole path on GPU is what \"single owned execution path\" requires once area profiles become per frame instead of per utterance. Purely elementwise across pairs — no inter junction dependency at all (unlike 's per sample recurrence), so this is one thread per output element with no workgroup memory or barriers needed. Functions Constants — tract transfer.js — Phase 2 ParticleNN articulatory kernel. Converts a per instance tube cross sectional area profile into Kelly Lochbaum junction reflection coefficients — the exact formula (R6)'s proven uses: . 's own docstring notes junction coefficients are \"computed CPU side by the caller... not recomputed here\", matching 's precedent for a fixed shape precomputation — that is still correct for a STATIC area profile. This kernel exists for the case the plan's implies: an area profile predicted fresh every control frame (100 Hz per §3), which would otherwise force","contentHash":"be896a7831daf54933ec0bcb1568152cf94694871bce665fa06c3278d9615fc9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/tract_transfer.md::0001","path":"agi/reference/particle_voice/nn/kernels/articulatory/tract_transfer.md","title":"particle_voice/nn/kernels/articulatory/tract_transfer.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/tract_transfer.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/tracttransfer.js","Functions","tractTransferShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"profile. This kernel exists for the case the plan's implies: an area profile predicted fresh every control frame (100 Hz per §3), which would otherwise force a GPU to CPU to GPU round trip every frame just to run one elementwise division — exactly the per frame readback stall the plan's Production Contract and style staged readback convention are meant to avoid. Keeping the whole path on GPU is what \"single owned execution path\" requires once area profiles become per frame instead of per utterance. Purely elementwise across pairs — no inter junction dependency at all (unlike 's per sample recurrence), so this is one thread per output element with no workgroup memory or barriers needed. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"ef6a6e8e7193fc5905e81e3b8b56486c727ec64a5e11886e90cfc13f7eefb089"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/tract_waveguide.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/tract_waveguide.md","title":"particle_voice/nn/kernels/articulatory/tract_waveguide.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/tract_waveguide.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/tractwaveguide.js","Functions","tractWaveguideOutputLayout(numSections, numSamples, numInstances)","tractWaveguideShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: tract waveguide.js — Phase 2 ParticleNN articulatory kernel. Production Kelly Lochbaum single delay per section digital waveguide vocal tract, generalizing (R6)'s proven recurrence to run entirely on GPU across a whole chunk of samples and N simultaneous voice/capsule instances. Junction reflection coefficients ( ) are computed CPU side by the caller via 's (a fixed shape, typically small computation — same rationale gives for precomputing its filter matrix CPU side rather than reproducing it in WGSL) and passed in as , not recomputed here. Constriction noise injection ( + ) and the nasal TAP signal ( ) ARE implemented, as faithful ports of R6's proven options — they were deferred when this kernel was first written, but cannot produce real fricatives or real nasal coupling without them: adds that sample's value to the RIGHT going wave entering junction , exactly as R6's . Injecting at the junction (rather than mixing noise into at the glottis) is what makes a fricative a fricative: only the cavity IN FRONT of the constriction filters the turbulence. writes for that section into the packed output's block every sample, giving an anatomically meaningful to be driven by. Matching R6 exactly, the tap is a READ ONLY observation: the oral tract is not itself perturbed by it. That remains a simplification versus a rigorous 3 port scattering junction (R6's own docstring says the same); it is enough for controllable, stable nasal coupling, and the honest limitation is recorded here rather than overstated. Both are opt in: a negative index disables that feature entirely, so callers that want neither pass and get bit identical behavior to this kernel before they existed. must match what the","contentHash":"4414b714fcbd041322a3490049ff1470a6927e6a1c0bedf1721966dab11913e4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/tract_waveguide.md::0001","path":"agi/reference/particle_voice/nn/kernels/articulatory/tract_waveguide.md","title":"particle_voice/nn/kernels/articulatory/tract_waveguide.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/tract_waveguide.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/tractwaveguide.js","Functions","tractWaveguideOutputLayout(numSections, numSamples, numInstances)","tractWaveguideShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"index disables that feature entirely, so callers that want neither pass and get bit identical behavior to this kernel before they existed. must match what the SOURCE already is Lip radiation is approximately a differentiator, so R6's ends with . That is correct when the excitation is glottal FLOW, which is what R6's raised cosine pulse produced. It is WRONG when the excitation is already the flow derivative. is explicitly the LF glottal flow DERIVATIVE model, so feeding it in and then differencing again yields the SECOND derivative: +6 dB/octave of spurious tilt (audibly reedy/buzzy) and a far spikier waveform, whose large crest factor then drives any downstream limiter into distorting every single pitch pulse. Injecting a derivative source and skipping the difference is what gives the correct radiated pressure, and is why formant synthesizers use the LF derivative directly. therefore has to agree with the caller's source: 1.0 for a flow source (R6 parity), 0.0 for . There is no safe default that suits both, so it is an explicit parameter rather than a built in assumption. : the tube was perfectly lossless, and that is audible Scattering at a Kelly Lochbaum junction conserves energy exactly, so with only the glottis and lips absorbing anything, the formants of this tube had very high Q. Real vocal tracts lose energy continuously to yielding walls plus viscous and thermal effects, which is what gives formants their bandwidth (roughly 50 100 Hz for F1, more higher up). A resonator with too little damping rings after every excitation, and a whole tube of them reads as a metallic, synthetic buzz laid over the speech no matter how accurate the formant FREQUENCIES are — accurate centres with no bandwidth still does not sound human. multiplies each traveling wave once per","contentHash":"79651b524ce0dcbc476af8d0a035a2f200023b91e0520c70c89adc15f2232ce5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/tract_waveguide.md::0002","path":"agi/reference/particle_voice/nn/kernels/articulatory/tract_waveguide.md","title":"particle_voice/nn/kernels/articulatory/tract_waveguide.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/tract_waveguide.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/tractwaveguide.js","Functions","tractWaveguideOutputLayout(numSections, numSamples, numInstances)","tractWaveguideShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"no matter how accurate the formant FREQUENCIES are — accurate centres with no bandwidth still does not sound human. multiplies each traveling wave once per section per sample, so a wave crossing the whole tract is attenuated . Because it is applied per section rather than once at a boundary, the loss accumulates with distance travelled, which is the correct behaviour for a distributed effect. It is a frequency INDEPENDENT approximation of a loss that really does grow with frequency; the honest limitation is recorded here rather than overstated, and a one pole filter per junction would be the refinement. 1.0 restores the lossless tube exactly, which is what the R6 parity test uses. One digital waveguide step is","contentHash":"92763b38630cfec4916aec8cf1deb4fffd70d434fc36233a78e8029665a2b8e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/visual_state_decimate.md::0000","path":"agi/reference/particle_voice/nn/kernels/articulatory/visual_state_decimate.md","title":"particle_voice/nn/kernels/articulatory/visual_state_decimate.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/visual_state_decimate.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/visualstatedecimate.js","Functions","visualStateDecimateShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: visual state decimate.js — Phase 2 ParticleNN articulatory kernel. Decimates a high rate, multi CHANNEL tract field (e.g. a per section pressure like signal, one channel per tube section) down to one box averaged value per channel per fixed size frame — the §4 names as \"a decimated field for ribbon/particle/heatmap visualization\". Deliberately NOT a reuse of despite the similar per thread \"small sequential average over a window\" shape: that kernel reduces a single FLAT per instance signal to (mean, RMS) pairs for model feedback (a statistics reduction); this kernel decimates a multi CHANNEL per instance FIELD (extra channel/section axis) down to mean only per channel per frame, because a rendered airflow ribbon/ heatmap needs a representative value per tube section over time, not an energy statistic, and box averaging over the decimation window (rather than picking every Nth raw sample) avoids visual aliasing/flicker in the downsampled field — ordinary decimation filter practice, and consistent with how / already treat windowing as the caller's/kernel's job rather than raw strided subsampling. §4 also requires that visualization \"must be bit identically disable able without changing rendered PCM\" — this kernel reads its input field only (never writes back into it), so skipping this kernel's dispatch entirely when visualization is off cannot affect the / PCM path in any way; that invariant is structural (this kernel has no read write access to anything the acoustic path also reads), not merely a runtime convention. Functions Constants — visual state decimate.js — Phase 2 ParticleNN articulatory kernel. Decimates a high rate, multi CHANNEL tract field (e.g. a per section pressure","contentHash":"0b2b83d06a297beaa7deec847b2ee1f4e5f57db4b77b26ead9465c3e30560c2b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/visual_state_decimate.md::0001","path":"agi/reference/particle_voice/nn/kernels/articulatory/visual_state_decimate.md","title":"particle_voice/nn/kernels/articulatory/visual_state_decimate.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/visual_state_decimate.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/visualstatedecimate.js","Functions","visualStateDecimateShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"Constants — visual state decimate.js — Phase 2 ParticleNN articulatory kernel. Decimates a high rate, multi CHANNEL tract field (e.g. a per section pressure like signal, one channel per tube section) down to one box averaged value per channel per fixed size frame — the §4 names as \"a decimated field for ribbon/particle/heatmap visualization\". Deliberately NOT a reuse of despite the similar per thread \"small sequential average over a window\" shape: that kernel reduces a single FLAT per instance signal to (mean, RMS) pairs for model feedback (a statistics reduction); this kernel decimates a multi CHANNEL per instance FIELD (extra channel/section axis) down to mean only per channel per frame, because a rendered airflow ribbon/ heatmap needs a representative value per tube section over time, not an energy statistic, and box averaging over the decimation window (rather than picking every Nth raw sample) avoids visual aliasing/flicker in the downsampled field — ordinary decimation filter practice, and consistent with how / already treat windowing as the caller's/kernel's job rather than raw strided subsampling. §4 also requires that visualization \"must be bit identically disable able without changing rendered PCM\" — this kernel reads its input field only (never writes back into it), so skipping this kernel's dispatch entirely when visualization is off cannot affect the / PCM path in any way; that invariant is structural (this kernel has no read write access to anything the acoustic path also reads), not merely a runtime convention. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape","contentHash":"141bcb6fefa567149bcd6ade5bc026f74f7fa4252ad6a75b9921f7aa9ebf3182"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/articulatory/visual_state_decimate.md::0002","path":"agi/reference/particle_voice/nn/kernels/articulatory/visual_state_decimate.md","title":"particle_voice/nn/kernels/articulatory/visual_state_decimate.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/articulatory/visual_state_decimate.js","updated":"","headings":["particlevoice/nn/kernels/articulatory/visualstatedecimate.js","Functions","visualStateDecimateShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"→ brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"32d2bd286c5b1e1e0a8b4679565b6ca0e5cecf75eaeb682d4131b74cd9929d23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/chunks/complex_math.md::0000","path":"agi/reference/particle_voice/nn/kernels/chunks/complex_math.md","title":"particle_voice/nn/kernels/chunks/complex_math.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/chunks/complex_math.js","updated":"","headings":["particlevoice/nn/kernels/chunks/complexmath.js","Functions","complexMathChunk()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: chunks/complex math.js — Phase 1 ParticleNN kernel chunk. Generic complex arithmetic WGSL fragment (mul/add/sub/twiddle), split out as reusable infrastructure ahead of Phase 2's / kernels — R3's inlined its own twiddle multiply directly in the butterfly loop (fine for a disposable risk spike); Phase 2's production FFT kernel should compose this chunk instead of re deriving the same four multiplies/two adds. Complex numbers are represented as ( = real, = imag) throughout, not a named struct, to keep it directly usable as a return type/local without an extra struct declaration at every call site. Functions Constants — chunks/complex math.js — Phase 1 ParticleNN kernel chunk. Generic complex arithmetic WGSL fragment (mul/add/sub/twiddle), split out as reusable infrastructure ahead of Phase 2's / kernels — R3's inlined its own twiddle multiply directly in the butterfly loop (fine for a disposable risk spike); Phase 2's production FFT kernel should compose this chunk instead of re deriving the same four multiplies/two adds. Complex numbers are represented as ( = real, = imag) throughout, not a named struct, to keep it directly usable as a return type/local without an extra struct declaration at every call site. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"eb8dc338531a38752adaf1ffa1b1d6855f3ede56db0cc8e797e405c1e7dc4109"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/chunks/f16_utils.md::0000","path":"agi/reference/particle_voice/nn/kernels/chunks/f16_utils.md","title":"particle_voice/nn/kernels/chunks/f16_utils.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/chunks/f16_utils.js","updated":"","headings":["particlevoice/nn/kernels/chunks/f16utils.js","Functions","decodeF16(bits)","encodeF16(value)","decodeF16Array(bitsArray)","encodeF16Array(values)","Re-exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: chunks/f16 utils.js — Phase 1 ParticleNN kernel chunk. On the WGSL side, kernels use WGSL's native type directly ( + / etc.) when is available — no bit manipulation WGSL fragment is needed there, unlike 's manual unpack (WGSL has no native storage type, but it DOES have a native type). This file's job is the host side JS< f16 bit conversion needed to build/verify f16 test vectors and read 's raw f16 readback ( 's deliberately leaves tensors as raw bit patterns — this is where they get decoded). Functions IEEE 754 binary16 JS float64. JS float64 IEEE 754 binary16 bit pattern (round to nearest even is not implemented precisely — round half away from zero on the mantissa, adequate for test vector construction, not for production quality quantization aware training). Decode a raw f16 bits (e.g. from ) into a . Encode a / /plain array into an f16 bits , suitable for with . Re exports , <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d268e918f3262231da76a22d4fe59c853e477647c5fb4851acb81537610bd5db"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/chunks/int8_pack.md::0000","path":"agi/reference/particle_voice/nn/kernels/chunks/int8_pack.md","title":"particle_voice/nn/kernels/chunks/int8_pack.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/chunks/int8_pack.js","updated":"","headings":["particlevoice/nn/kernels/chunks/int8pack.js","Functions","int8PackChunk()","quantizeInt8Blockwise(values, blockSize)","dequantizeInt8Blockwise(quantized, scales, blockSize)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: chunks/int8 pack.js — Phase 1 ParticleNN kernel chunk. WGSL side: the fragment, extracted from R2's (proven correct there — R2's parity test passed with max abs/rel error 3.4e 7 against a JS scalar reference) into a shared chunk so / / all use the exact same unpack logic rather than each re deriving it. JS side: the host side symmetric block quantizer that produces the / pair this WGSL fragment expects, matching 's documented scheme: (zero point free, one scale per sized block). Functions Symmetric per block INT8 quantization: for each contiguous sized block of , scale = max(abs(block)) / 127, quantized = round(value / scale). Returns . must be a multiple of 4 (four int8 values pack into one u32, matching R2's little end is lowest index layout). Dequantize 's output back to a , for host side parity checking against a kernel's GPU output. Constants — chunks/int8 pack.js — Phase 1 ParticleNN kernel chunk. WGSL side: the fragment, extracted from R2's (proven correct there — R2's parity test passed with max abs/rel error 3.4e 7 against a JS scalar reference) into a shared chunk so / / all use the exact same unpack logic rather than each re deriving it. JS side: the host side symmetric block quantizer that produces the / pair this WGSL fragment expects, matching 's documented scheme: (zero point free, one scale per sized block). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7b2dcca17b0523ad1e049f70b8f921d07fe704e34b0326933032dd019bf9a04a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/chunks/math_common.md::0000","path":"agi/reference/particle_voice/nn/kernels/chunks/math_common.md","title":"particle_voice/nn/kernels/chunks/math_common.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/chunks/math_common.js","updated":"","headings":["particlevoice/nn/kernels/chunks/mathcommon.js","Functions","mathCommonChunk()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: chunks/math common.js — Phase 1 ParticleNN kernel chunk. Small reusable WGSL scalar math fragments shared by multiple kernel generators, so e.g. and any future fused activation kernel define / exactly once rather than each inlining its own copy (the kind of duplication the R2 spike's inline was an acceptable one off for, but Phase 1 kernels should not repeat). Functions Constants — chunks/math common.js — Phase 1 ParticleNN kernel chunk. Small reusable WGSL scalar math fragments shared by multiple kernel generators, so e.g. and any future fused activation kernel define / exactly once rather than each inlining its own copy (the kind of duplication the R2 spike's inline was an acceptable one off for, but Phase 1 kernels should not repeat). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"db4657a7caf46abf1ae02f0e6383eeb36ed3eb18b4d6e3f3163240bc17d39b95"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/convolution/conv1d_w8a16.md::0000","path":"agi/reference/particle_voice/nn/kernels/convolution/conv1d_w8a16.md","title":"particle_voice/nn/kernels/convolution/conv1d_w8a16.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/convolution/conv1d_w8a16.js","updated":"","headings":["particlevoice/nn/kernels/convolution/conv1dw8a16.js","Functions","conv1dW8a16Shader({ useShaderF16 = false } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: convolution/conv1d w8a16.js — Phase 1 ParticleNN kernel. 1D convolution, INT8 weights (same 4 packed per u32 layout and as ) x FP16/FP32 activations, FP32 accumulation. per output channel, padding (input implicitly zero padded so output length equals input length) — stride 1 only; dilation/stride are Phase 2+ follow ups if a consumer needs them (R7's toy Conv1D model used stride 1 only, and no Phase 1/0 document commits to anything else yet). Weight layout: , a u32 whose 4 bytes are int8 weights for the flattened index , where and . is the per output channel scale. must be a multiple of 4. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7b167b2e2f8e7a7887013bddc1df83ed15bd6673583d7b285b8b1d5251dda9a8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/core/transpose_2d.md::0000","path":"agi/reference/particle_voice/nn/kernels/core/transpose_2d.md","title":"particle_voice/nn/kernels/core/transpose_2d.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/core/transpose_2d.js","updated":"","headings":["particlevoice/nn/kernels/core/transpose2d.js","Functions","transpose2dShader({ useShaderF16 = false } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: core/transpose 2d.js — Phase 3 ParticleNN kernel. 2D transpose: , i.e. → , both row major. Why this exists The Phase 1 kernels disagree about which axis is major, and building is the first time anything composes them: writes — sequence major (one row per token), the natural shape for a gather. reads — channel major , the natural shape for sliding a kernel along time. normalizes each ROW independently, so per token normalization over the feature axis needs sequence major again. Neither layout is wrong for its own kernel, but the encoder has to cross between them, and nothing in the registry could. Rather than duplicating a transposed variant of the convolution (or silently re interpreting a buffer and producing scrambled activations), the axis swap is its own explicit, testable op. Deliberately naive: one thread per element, no tiling and no shared memory staging. The encoder's tensors are small (tens of channels x hundreds of frames), so the uncoalesced write is not worth the complexity — and a tiled version can replace this later without changing a single caller, since the contract is just \"swap the axes\". Functions Constants — core/transpose 2d.js — Phase 3 ParticleNN kernel. 2D transpose: , i.e. → , both row major. Why this exists The Phase 1 kernels disagree about which axis is major, and building is the first time anything composes them: writes — sequence major (one row per token), the natural shape for a gather. reads — channel major , the natural shape for sliding a kernel along time. normalizes each ROW independently, so per token normalization over the feature axis needs sequence major again. Neither layout is wrong for its own kernel, but the encoder has to cross","contentHash":"f7ef61c378aaedaf246c4d6e01ad6145afdaf01307c2aa9c64d4594fc5d9e346"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/core/transpose_2d.md::0001","path":"agi/reference/particle_voice/nn/kernels/core/transpose_2d.md","title":"particle_voice/nn/kernels/core/transpose_2d.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/core/transpose_2d.js","updated":"","headings":["particlevoice/nn/kernels/core/transpose2d.js","Functions","transpose2dShader({ useShaderF16 = false } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"so per token normalization over the feature axis needs sequence major again. Neither layout is wrong for its own kernel, but the encoder has to cross between them, and nothing in the registry could. Rather than duplicating a transposed variant of the convolution (or silently re interpreting a buffer and producing scrambled activations), the axis swap is its own explicit, testable op. Deliberately naive: one thread per element, no tiling and no shared memory staging. The encoder's tensors are small (tens of channels x hundreds of frames), so the uncoalesced write is not worth the complexity — and a tiled version can replace this later without changing a single caller, since the contract is just \"swap the axes\". <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"003a2239e216872188fe9a43646c04166ac392bbba7ab375658a9cd7374e7a3d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/fft/complex_mul.md::0000","path":"agi/reference/particle_voice/nn/kernels/fft/complex_mul.md","title":"particle_voice/nn/kernels/fft/complex_mul.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/fft/complex_mul.js","updated":"","headings":["particlevoice/nn/kernels/fft/complexmul.js","Functions","complexMulShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: complex mul.js — Phase 2 ParticleNN DSP kernel. Elementwise complex multiplication: , over interleaved buffers, matching 's interleaved complex layout so FFT output can feed this directly (e.g. frequency domain filtering: then ). Functions Constants — complex mul.js — Phase 2 ParticleNN DSP kernel. Elementwise complex multiplication: , over interleaved buffers, matching 's interleaved complex layout so FFT output can feed this directly (e.g. frequency domain filtering: then ). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"cd09cbb800c8691b463b3db52d45865f5d606edb52da069d1728f9421d711cd2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/fft/fft1024_f32.md::0000","path":"agi/reference/particle_voice/nn/kernels/fft/fft1024_f32.md","title":"particle_voice/nn/kernels/fft/fft1024_f32.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/fft/fft1024_f32.js","updated":"","headings":["particlevoice/nn/kernels/fft/fft1024f32.js","Functions","buildFft1024Shader(direction)","fft1024F32Shader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: fft1024 f32.js — Phase 2 ParticleNN DSP kernel. Single workgroup, in workgroup memory, iterative radix 2 Cooley Tukey forward FFT — generalizes (R3)'s proven butterfly network to run with 256 threads/workgroup (each thread handles 2 butterfly operations per stage / 4 elements for load scatter) instead of R3's 512, so it needs no elevated request — every conformant WebGPU adapter guarantees 256 by default. This resolves the exact gap §4 flagged as an unresolved \"Phase 1/2 follow up\": rather than requesting a higher limit with a fallback path for adapters that refuse it, this kernel simply never needs the higher limit. One workgroup computes exactly one 1024 point complex FFT; selects which frame of a batch to process ( ), matching R3's batching design. Complex numbers are interleaved in a single flat per frame ( ) — one input buffer, one output buffer, matching every other Phase 1/2 kernel's single input/single output convention (unlike R3's separate real/imag arrays). No uniform buffer is needed (frame selection comes entirely from ), so this kernel registers with in . Functions Shared by and — (+1 forward, 1 inverse) is baked in at generation time, not read from a uniform, since each op is a distinct, fixed behavior kernel. Constants — fft1024 f32.js — Phase 2 ParticleNN DSP kernel. Single workgroup, in workgroup memory, iterative radix 2 Cooley Tukey forward FFT — generalizes (R3)'s proven butterfly network to run with 256 threads/workgroup (each thread handles 2 butterfly operations per stage / 4 elements for load scatter) instead of R3's 512, so it needs no elevated request — every conformant WebGPU adapter guarantees 256 by default. This resolves the exact gap §4 flagged as","contentHash":"0d27ec1eb401dd98479f0d63513a2813cb1e98efb0efa68fc3c3d6526be8ea51"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/fft/fft1024_f32.md::0001","path":"agi/reference/particle_voice/nn/kernels/fft/fft1024_f32.md","title":"particle_voice/nn/kernels/fft/fft1024_f32.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/fft/fft1024_f32.js","updated":"","headings":["particlevoice/nn/kernels/fft/fft1024f32.js","Functions","buildFft1024Shader(direction)","fft1024F32Shader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"instead of R3's 512, so it needs no elevated request — every conformant WebGPU adapter guarantees 256 by default. This resolves the exact gap §4 flagged as an unresolved \"Phase 1/2 follow up\": rather than requesting a higher limit with a fallback path for adapters that refuse it, this kernel simply never needs the higher limit. One workgroup computes exactly one 1024 point complex FFT; selects which frame of a batch to process ( ), matching R3's batching design. Complex numbers are interleaved in a single flat per frame ( ) — one input buffer, one output buffer, matching every other Phase 1/2 kernel's single input/single output convention (unlike R3's separate real/imag arrays). No uniform buffer is needed (frame selection comes entirely from ), so this kernel registers with in . <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"89422b671beaaf8372938687f78c2657d36e3b206db2a76481885fb58a77747b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/fft/ifft1024_f32.md::0000","path":"agi/reference/particle_voice/nn/kernels/fft/ifft1024_f32.md","title":"particle_voice/nn/kernels/fft/ifft1024_f32.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/fft/ifft1024_f32.js","updated":"","headings":["particlevoice/nn/kernels/fft/ifft1024f32.js","Functions","ifft1024F32Shader()","Re-exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ifft1024 f32.js — Phase 2 ParticleNN DSP kernel. Inverse of : same butterfly network (see that file's docstring for the full algorithm/limit generalization rationale), with baked in — conjugate the input, run the same forward butterfly network, conjugate + scale by ( ), matching R3's proven identity. Functions Re exports , , , <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"ecadb6a79a6d9f9d835f47d0c0ad48f14e1908282f2dc778e9c60c85a158d9ef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/matmul/matmul_w8a16.md::0000","path":"agi/reference/particle_voice/nn/kernels/matmul/matmul_w8a16.md","title":"particle_voice/nn/kernels/matmul/matmul_w8a16.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/matmul/matmul_w8a16.js","updated":"","headings":["particlevoice/nn/kernels/matmul/matmulw8a16.js","Functions","matmulW8a16Shader({ useShaderF16 = false } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: matmul/matmul w8a16.js — Phase 1 ParticleNN kernel. INT8 weights (4 packed per u32, per output channel scale, 's ) x FP16 activations, FP32 accumulation, FP16 output — the real target this plan names, superseding R2's FP32 activation stand in ( ) now that R1 has proven is available on at least one reference device. Falls back to FP32 activations/output when is false (DeviceContract v0's tier) — same kernel body, different element type, not two separately maintained kernels. Weight layout (unchanged from R2, already proven): logical weights are [K, N]; is a u32 whose 4 bytes are the int8 weights for k = k4 4 + 0..3 (little end = lowest k); is the per output channel dequantization scale. K must be a multiple of 4. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c7212a01565d3720e43c0fc8fecf8ab1ab130d7a0fa72f1b356eb7e60024a239"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/normalization/rmsnorm_f16.md::0000","path":"agi/reference/particle_voice/nn/kernels/normalization/rmsnorm_f16.md","title":"particle_voice/nn/kernels/normalization/rmsnorm_f16.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/normalization/rmsnorm_f16.js","updated":"","headings":["particlevoice/nn/kernels/normalization/rmsnormf16.js","Functions","rmsnormF16Shader({ useShaderF16 = false, eps = 1e-6 } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: normalization/rmsnorm f16.js — Phase 1 ParticleNN kernel. Row wise RMSNorm: . One workgroup per row; workgroup shared reduction for the sum of squares (standard tree reduction, must be a power of two). Accumulates in f32 regardless of , matching 's \"FP32 accumulation\" convention — only the input/output storage element type changes with the feature flag. Functions Constants — normalization/rmsnorm f16.js — Phase 1 ParticleNN kernel. Row wise RMSNorm: . One workgroup per row; workgroup shared reduction for the sum of squares (standard tree reduction, must be a power of two). Accumulates in f32 regardless of , matching 's \"FP32 accumulation\" convention — only the input/output storage element type changes with the feature flag. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d6ac57f80d96f8c08d3508e12f29a2c416049b539c4cf7dc55eb5638176a02f1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/quantization/dequant_int8.md::0000","path":"agi/reference/particle_voice/nn/kernels/quantization/dequant_int8.md","title":"particle_voice/nn/kernels/quantization/dequant_int8.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/quantization/dequant_int8.js","updated":"","headings":["particlevoice/nn/kernels/quantization/dequantint8.js","Functions","dequantInt8Shader({ useShaderF16 = false } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: quantization/dequant int8.js — Phase 1 ParticleNN kernel. Standalone unpack+dequantize kernel: / fuse unpack+dequant+multiply accumulate inline for performance, but /tooling sometimes need a plain materialized dequantized tensor (e.g. for a CPU side parity check, or a debug visualization) without running a full matmul — this is that kernel. Uses the same and per block scale scheme as 's documented metadata. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"e8aace7cf69f7be3c07e8a551b0c61f7d21d0f4aa458f267be2930aebc7644c7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/quantization/pack_unpack.md::0000","path":"agi/reference/particle_voice/nn/kernels/quantization/pack_unpack.md","title":"particle_voice/nn/kernels/quantization/pack_unpack.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/quantization/pack_unpack.js","updated":"","headings":["particlevoice/nn/kernels/quantization/packunpack.js","Functions","packInt8Shader()","packInt8Reference(quantizedInt8Array)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: quantization/pack unpack.js — Phase 1 ParticleNN kernel. The pack direction complementing 's unpack direction: a GPU kernel that bit packs already quantized int8 values (as inputs already rounded/clamped to [ 127, 127] — computing the scale is a separate reduction pass, not this kernel's job) into 4 packed u32 words, matching 's host side 's packed word layout exactly (so a GPU side requantization pipeline and the JS host side one are interchangeable). Functions Packs (one already quantized value per element, [ 127,127]) into (4 values per word). must be a multiple of 4. JS side reference pack, for parity testing against a CPU implementation. Mirrors 's packing loop exactly. Constants — quantization/pack unpack.js — Phase 1 ParticleNN kernel. The pack direction complementing 's unpack direction: a GPU kernel that bit packs already quantized int8 values (as inputs already rounded/clamped to [ 127, 127] — computing the scale is a separate reduction pass, not this kernel's job) into 4 packed u32 words, matching 's host side 's packed word layout exactly (so a GPU side requantization pipeline and the JS host side one are interchangeable). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"3ceb791eca37a32326e29d8054cfc8944ab41abf13e8a66d6a4d217851db45a6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/crossfade.md::0000","path":"agi/reference/particle_voice/nn/kernels/speech/crossfade.md","title":"particle_voice/nn/kernels/speech/crossfade.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/crossfade.js","updated":"","headings":["particlevoice/nn/kernels/speech/crossfade.js","Functions","crossfadeShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: crossfade.js — Phase 2 ParticleNN DSP kernel. Equal power crossfade between two equal length signals over their full length: , — equal power (not linear) so the perceived loudness stays constant through the fade instead of dipping at the midpoint (linear crossfade's well known flaw), matching the constant power crossfade convention 's reaction system voice transitions call for. Functions Constants — crossfade.js — Phase 2 ParticleNN DSP kernel. Equal power crossfade between two equal length signals over their full length: , — equal power (not linear) so the perceived loudness stays constant through the fade instead of dipping at the midpoint (linear crossfade's well known flaw), matching the constant power crossfade convention 's reaction system voice transitions call for. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"12032d54f0f12d5062be1d9a6a8883eade7249fe8784390c377d900e17cba952"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/embedding_f16.md::0000","path":"agi/reference/particle_voice/nn/kernels/speech/embedding_f16.md","title":"particle_voice/nn/kernels/speech/embedding_f16.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/embedding_f16.js","updated":"","headings":["particlevoice/nn/kernels/speech/embeddingf16.js","Functions","embeddingF16Shader({ useShaderF16 = false } = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: speech/embedding f16.js — Phase 1 ParticleNN kernel. Row gather embedding lookup: . Named under (not ) because its first production consumer is 's phoneme ID embedding (Phase 3), looking up rows out of 's fixed 42 entry table — but the kernel itself is generic over table/embedding dim size. (That count read \"51\" until Phase 3: the spec's own summary line miscounted its vowel tables. is the executable source of truth and exports , which is what a caller should size from rather than any hard coded literal.) Output layout is — SEQUENCE major, one row per token. Note that expects CHANNEL major , so composing the two requires in between; does exactly that. Functions Constants — speech/embedding f16.js — Phase 1 ParticleNN kernel. Row gather embedding lookup: . Named under (not ) because its first production consumer is 's phoneme ID embedding (Phase 3), looking up rows out of 's fixed 42 entry table — but the kernel itself is generic over table/embedding dim size. (That count read \"51\" until Phase 3: the spec's own summary line miscounted its vowel tables. is the executable source of truth and exports , which is what a caller should size from rather than any hard coded literal.) Output layout is — SEQUENCE major, one row per token. Note that expects CHANNEL major , so composing the two requires in between; does exactly that. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"f0905c54824e4e71d92c71a93b92709a5e6f2e9c1eb599629e58e55e35e2b76f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/harmonic_source.md::0000","path":"agi/reference/particle_voice/nn/kernels/speech/harmonic_source.md","title":"particle_voice/nn/kernels/speech/harmonic_source.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/harmonic_source.js","updated":"","headings":["particlevoice/nn/kernels/speech/harmonicsource.js","Functions","harmonicSourceShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: harmonic source.js — Phase 2 ParticleNN DSP kernel. Voiced glottal pulse train — the \"LF lite\" raised cosine shape proven in (R6): flow(n) = 0.5 (1 cos(2 pi cyclePos(n)/openSamples)) for cyclePos(n) < openSamples flow(n) = 0 otherwise Unlike R6's per sample sequential CPU generator (which tracks as running state, updated one sample at a time), this kernel computes every sample in closed form and fully in parallel : , using an absolute sample counter ( ) the caller persists and advances across chunk boundaries — exactly the \"LF glottal source with absolute counter\" the plan's checklist calls for, and mathematically identical to R6's per sample recurrence for as long as / hold constant across the dispatched chunk (the same constant until the next period boundary assumption R6's own generator already makes). Aspiration noise is NOT mixed in here (unlike R6's spike, which combined both for simplicity) — that is 's job, mixed downstream, since the operator allowlist treats voiced and unvoiced excitation as independent ops that a later stage combines. Functions Constants — harmonic source.js — Phase 2 ParticleNN DSP kernel. Voiced glottal pulse train — the \"LF lite\" raised cosine shape proven in (R6): flow(n) = 0.5 (1 cos(2 pi cyclePos(n)/openSamples)) for cyclePos(n) < openSamples flow(n) = 0 otherwise Unlike R6's per sample sequential CPU generator (which tracks as running state, updated one sample at a time), this kernel computes every sample in closed form and fully in parallel : , using an absolute sample counter ( ) the caller persists and advances across chunk boundaries — exactly the \"LF glottal source with absolute counter\" the plan's checklist calls for, and mathematically","contentHash":"61166948d626000a976524beb5343c0dc0f513d46180132c630378f1ae075fbd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/harmonic_source.md::0001","path":"agi/reference/particle_voice/nn/kernels/speech/harmonic_source.md","title":"particle_voice/nn/kernels/speech/harmonic_source.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/harmonic_source.js","updated":"","headings":["particlevoice/nn/kernels/speech/harmonicsource.js","Functions","harmonicSourceShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"caller persists and advances across chunk boundaries — exactly the \"LF glottal source with absolute counter\" the plan's checklist calls for, and mathematically identical to R6's per sample recurrence for as long as / hold constant across the dispatched chunk (the same constant until the next period boundary assumption R6's own generator already makes). Aspiration noise is NOT mixed in here (unlike R6's spike, which combined both for simplicity) — that is 's job, mixed downstream, since the operator allowlist treats voiced and unvoiced excitation as independent ops that a later stage combines. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d5f9f3a2fcb5188ce2fd661ee03fb9391f358171a3b1370490843c586adc17f3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/mel_filterbank.md::0000","path":"agi/reference/particle_voice/nn/kernels/speech/mel_filterbank.md","title":"particle_voice/nn/kernels/speech/mel_filterbank.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/mel_filterbank.js","updated":"","headings":["particlevoice/nn/kernels/speech/melfilterbank.js","Functions","melFilterbankShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: mel filterbank.js — Phase 2 ParticleNN DSP kernel. Applies a precomputed triangular mel filterbank matrix to a power/ magnitude spectrogram: — a small matmul shaped reduction, not a general matmul (the filterbank is fixed shape and typically far smaller than 's tile sizes, so a dedicated one thread per output element kernel is simpler and avoids forcing an INT8 quantized weight path onto filter coefficients that are naturally small dense f32 matrices, not learned weights). The filterbank matrix itself (triangular mel scale filters for a given sample rate/ / / ) is computed once on the CPU at model load time — this kernel only applies it. Functions Constants — mel filterbank.js — Phase 2 ParticleNN DSP kernel. Applies a precomputed triangular mel filterbank matrix to a power/ magnitude spectrogram: — a small matmul shaped reduction, not a general matmul (the filterbank is fixed shape and typically far smaller than 's tile sizes, so a dedicated one thread per output element kernel is simpler and avoids forcing an INT8 quantized weight path onto filter coefficients that are naturally small dense f32 matrices, not learned weights). The filterbank matrix itself (triangular mel scale filters for a given sample rate/ / / ) is computed once on the CPU at model load time — this kernel only applies it. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"fa29d858fbbf4e6a93a72d341c8ee4e32f2a7c9461295f6662b5a4a06d88829f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/noise_source.md::0000","path":"agi/reference/particle_voice/nn/kernels/speech/noise_source.md","title":"particle_voice/nn/kernels/speech/noise_source.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/noise_source.js","updated":"","headings":["particlevoice/nn/kernels/speech/noisesource.js","Functions","noiseSourceShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: noise source.js — Phase 2 ParticleNN DSP kernel. Deterministic, chunk boundary independent aspiration/turbulence noise — the exact integer hash proven in (R6)'s (itself the same technique as 's counter based noise): a two round Murmur style avalanche hash of , mapped to . Counter based (not a stateful PRNG stream) so any two chunks covering the same absolute sample index always produce the same noise value, regardless of dispatch order or chunk boundaries — required for glitch free streaming synthesis. Functions Constants — noise source.js — Phase 2 ParticleNN DSP kernel. Deterministic, chunk boundary independent aspiration/turbulence noise — the exact integer hash proven in (R6)'s (itself the same technique as 's counter based noise): a two round Murmur style avalanche hash of , mapped to . Counter based (not a stateful PRNG stream) so any two chunks covering the same absolute sample index always produce the same noise value, regardless of dispatch order or chunk boundaries — required for glitch free streaming synthesis. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1a6b99282050e08f25d94f97cfbe7908cb76f5c579c60eb7e7526991466b417d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/overlap_add.md::0000","path":"agi/reference/particle_voice/nn/kernels/speech/overlap_add.md","title":"particle_voice/nn/kernels/speech/overlap_add.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/overlap_add.js","updated":"","headings":["particlevoice/nn/kernels/speech/overlapadd.js","Functions","overlapAddShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: overlap add.js — Phase 2 ParticleNN DSP kernel. Synthesis overlap add: reconstructs a continuous signal from overlapping length windowed frames at stride, matching 's proven reference. Implemented as a gather , not a scatter: each output thread owns exactly one output sample and sums every frame that overlaps it ( ) — WGSL's core spec has no add, so a scatter ( from many threads across overlapping frames) would race; gathering avoids that entirely with no atomics and no serialized per frame dispatches needed. is the number of consecutive components per logical sample in , so this kernel can consume both layouts the pipeline actually produces: — flat real frames. — INTERLEAVED COMPLEX frames, which is exactly what emits. Only the REAL component is summed (the imaginary residue of an inverse transformed real signal is numerical noise), making this the ISTFT synthesis stage directly, with no separate deinterleave kernel needed in between. Without this stride, reads the interleaved complex buffer as if it were flat real — silently mixing real and imaginary components of the wrong samples together. That gap was found by the integration test. Functions Constants — overlap add.js — Phase 2 ParticleNN DSP kernel. Synthesis overlap add: reconstructs a continuous signal from overlapping length windowed frames at stride, matching 's proven reference. Implemented as a gather , not a scatter: each output thread owns exactly one output sample and sums every frame that overlaps it ( ) — WGSL's core spec has no add, so a scatter ( from many threads across overlapping frames) would race; gathering avoids that entirely with no atomics and no serialized per frame dispatches needed. is the number of","contentHash":"5abed68994f4cd3e0ee876eb5ca1d4eee061bf30e67f52c35dd63ae43e24296c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/overlap_add.md::0001","path":"agi/reference/particle_voice/nn/kernels/speech/overlap_add.md","title":"particle_voice/nn/kernels/speech/overlap_add.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/overlap_add.js","updated":"","headings":["particlevoice/nn/kernels/speech/overlapadd.js","Functions","overlapAddShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"threads across overlapping frames) would race; gathering avoids that entirely with no atomics and no serialized per frame dispatches needed. is the number of consecutive components per logical sample in , so this kernel can consume both layouts the pipeline actually produces: — flat real frames. — INTERLEAVED COMPLEX frames, which is exactly what emits. Only the REAL component is summed (the imaginary residue of an inverse transformed real signal is numerical noise), making this the ISTFT synthesis stage directly, with no separate deinterleave kernel needed in between. Without this stride, reads the interleaved complex buffer as if it were flat real — silently mixing real and imaginary components of the wrong samples together. That gap was found by the integration test. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"914f7c4b3995093dad4dc8cb3cfa52ce83000b68b7f9fdedd4865aaa042c7429"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/stft.md::0000","path":"agi/reference/particle_voice/nn/kernels/speech/stft.md","title":"particle_voice/nn/kernels/speech/stft.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/stft.js","updated":"","headings":["particlevoice/nn/kernels/speech/stft.js","Functions","stftShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: stft.js — Phase 2 ParticleNN DSP kernel. The framing half of STFT: slices overlapping length windows from a flat mono signal at stride (zero padded past the signal's end), matching 's proven reference exactly. Writes each frame's samples into the real channel of an interleaved complex output ( 's layout) with the imaginary channel zeroed, so the output can be windowed ( ) then fed directly to — the actual FFT transform is a separate op (already in the operator allowlist), not duplicated here. Functions Constants — stft.js — Phase 2 ParticleNN DSP kernel. The framing half of STFT: slices overlapping length windows from a flat mono signal at stride (zero padded past the signal's end), matching 's proven reference exactly. Writes each frame's samples into the real channel of an interleaved complex output ( 's layout) with the imaginary channel zeroed, so the output can be windowed ( ) then fed directly to — the actual FFT transform is a separate op (already in the operator allowlist), not duplicated here. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"65ec31aa05eb9eefc37a407d55f950f6ccf41cd967649570d9a734377af10259"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/window.md::0000","path":"agi/reference/particle_voice/nn/kernels/speech/window.md","title":"particle_voice/nn/kernels/speech/window.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/window.js","updated":"","headings":["particlevoice/nn/kernels/speech/window.js","Functions","windowShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: window.js — Phase 2 ParticleNN DSP kernel. Applies a Hann window in place across framed audio: , matching 's proven / CPU reference exactly (same coefficient formula) so R3's WOLA identity tests remain the ground truth this kernel is checked against. The coefficient is computed in shader from the frame relative index rather than read from a precomputed buffer — one fewer buffer to manage, and Hann's formula is cheap per element. is the number of consecutive components per logical sample, so the same kernel windows both layouts this pipeline actually produces: — flat real frames ( ). — INTERLEAVED COMPLEX frames ( ), which is exactly what emits and what consumes. Both the real and imaginary component of a sample get the SAME coefficient (the correct definition of windowing a complex signal), because is derived from the logical sample index , not the raw component index. Without this stride, silently mis assigns coefficients when handed interleaved complex data (component index and sample index diverge by a factor of 2), so 's documented \"output can be windowed (window.js) then fed directly to fft1024 f32.js\" composition would produce a wrong window. That gap was found by the integration test — each kernel passed its own parity test in isolation, but the composed WOLA round trip did not reconstruct. Functions Constants — window.js — Phase 2 ParticleNN DSP kernel. Applies a Hann window in place across framed audio: , matching 's proven / CPU reference exactly (same coefficient formula) so R3's WOLA identity tests remain the ground truth this kernel is checked against. The coefficient is computed in shader from the frame relative index rather than read from a precomputed buffer — one","contentHash":"e74f88cad0ae97ede5bcca03b6ba73860fed2c0c6eb07d0ef1cd03370de2737b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/kernels/speech/window.md::0001","path":"agi/reference/particle_voice/nn/kernels/speech/window.md","title":"particle_voice/nn/kernels/speech/window.js","description":"","kind":"reference","source":"agi/particle_voice/nn/kernels/speech/window.js","updated":"","headings":["particlevoice/nn/kernels/speech/window.js","Functions","windowShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"truth this kernel is checked against. The coefficient is computed in shader from the frame relative index rather than read from a precomputed buffer — one fewer buffer to manage, and Hann's formula is cheap per element. is the number of consecutive components per logical sample, so the same kernel windows both layouts this pipeline actually produces: — flat real frames ( ). — INTERLEAVED COMPLEX frames ( ), which is exactly what emits and what consumes. Both the real and imaginary component of a sample get the SAME coefficient (the correct definition of windowing a complex signal), because is derived from the logical sample index , not the raw component index. Without this stride, silently mis assigns coefficients when handed interleaved complex data (component index and sample index diverge by a factor of 2), so 's documented \"output can be windowed (window.js) then fed directly to fft1024 f32.js\" composition would produce a wrong window. That gap was found by the integration test — each kernel passed its own parity test in isolation, but the composed WOLA round trip did not reconstruct. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7cc4758cc248e5303727baa1e3162e330c87cc7def6547f41c037177e85dd171"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/memory/ActivationArena.md::0000","path":"agi/reference/particle_voice/nn/memory/ActivationArena.md","title":"particle_voice/nn/memory/ActivationArena.js","description":"","kind":"reference","source":"agi/particle_voice/nn/memory/ActivationArena.js","updated":"","headings":["particlevoice/nn/memory/ActivationArena.js","Classes","class ActivationArena","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ActivationArena.js — Phase 1 ParticleNN memory. Transient GPU buffer pool for activation tensors, keyed by byte size: reuses a same size buffer already released by an earlier tensor instead of allocating a new one, and (driven by ) returns a buffer to the pool the moment its last consumer has run. Classes Method Signature Summary Get (allocating or reusing a pooled buffer of the exact same size) the GPU buffer for . Return 's buffer to the free pool (does not destroy it — it is expected to be reused by a same size tensor soon). Total buffers currently pooled (free) + active, for memory pressure diagnostics. Destroy every buffer (active and pooled) — end of program run / full teardown. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"f65da79a802668e6cd0895214c5197c566ca730435c60ed57dae2f878d85c54d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/memory/GradientArena.md::0000","path":"agi/reference/particle_voice/nn/memory/GradientArena.md","title":"particle_voice/nn/memory/GradientArena.js","description":"","kind":"reference","source":"agi/particle_voice/nn/memory/GradientArena.js","updated":"","headings":["particlevoice/nn/memory/GradientArena.js","Classes","class GradientArena extends ActivationArena","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GradientArena.js — Phase 1 ParticleNN memory. Transient GPU buffer pool for gradient tensors during backward passes — identical pooling mechanism to (same size bucketed acquire/release), given its own class identity/file per the plan's checklist rather than duplicated logic, since forward pass activation buffers and backward pass gradient buffers have separate lifetimes and should never be pooled together (an activation still needed for a backward computation must not be silently reused as a gradient buffer). Not wired into any executor until Phase 11 (autodiff), per the plan. Classes <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"8389c77216162f360e645a7db9127bc3f8980842f6ccbaff985a5d21fb99f36d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/memory/TensorLifetimePlanner.md::0000","path":"agi/reference/particle_voice/nn/memory/TensorLifetimePlanner.md","title":"particle_voice/nn/memory/TensorLifetimePlanner.js","description":"","kind":"reference","source":"agi/particle_voice/nn/memory/TensorLifetimePlanner.js","updated":"","headings":["particlevoice/nn/memory/TensorLifetimePlanner.js","Classes","class TensorLifetimePlanner","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TensorLifetimePlanner.js — Phase 1 ParticleNN memory. First/last use analysis over a 's step order: for every tensor name, which step produces it (or if it's an external input to the program) and which step is the last to read it. / use to know exactly when a buffer becomes free to hand to the next tensor that needs one, enabling buffer aliasing instead of one allocation per tensor per run. Classes TensorLifetimePlanner.js — Phase 1 ParticleNN memory. First/last use analysis over a 's step order: for every tensor name, which step produces it (or if it's an external input to the program) and which step is the last to read it. / use to know exactly when a buffer becomes free to hand to the next tensor that needs one, enabling buffer aliasing instead of one allocation per tensor per run. Method Signature Summary Tensor names whose last use is exactly — safe to release/return to an arena immediately after that step runs. Tensor names an external caller must supply before step runs (produced nowhere in this program, first read at exactly this step). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"726c351332f0b712a99a3d5279a5c06f794484d3a1885dc99a037eb1bdd369de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/memory/WeightBindWindow.md::0000","path":"agi/reference/particle_voice/nn/memory/WeightBindWindow.md","title":"particle_voice/nn/memory/WeightBindWindow.js","description":"","kind":"reference","source":"agi/particle_voice/nn/memory/WeightBindWindow.js","updated":"","headings":["particlevoice/nn/memory/WeightBindWindow.js","Classes","class WeightBindWindow","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WeightBindWindow.js — Phase 1 ParticleNN memory. Storage buffer bind group for a program segment's resident weight pages (up to 16 pages, per the plan's \"never allocate one monolithic buffer over 128 MiB\" rule) — one GPU buffer per page (not one big buffer for the whole window), matching 's per page granularity. Classes Method Signature Summary Get (or upload) the GPU buffer for a resident page. Throws if the page byte length would violate the single buffer size ceiling — should never happen for correctly sized 16–32 MiB pages, but this is the hard guard the plan's rule requires. Build a bind group for (≤16) against , one entry per page at bindings , followed by any (e.g. activation buffers, uniforms) at subsequent bindings — the caller is responsible for making match this exact binding order. Release one page's GPU buffer (e.g. after ). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"08341a53a76336203be3e261bde3d95a24aedb11f864c755e9d32e96a188f5b7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/memory/WeightPageStore.md::0000","path":"agi/reference/particle_voice/nn/memory/WeightPageStore.md","title":"particle_voice/nn/memory/WeightPageStore.js","description":"","kind":"reference","source":"agi/particle_voice/nn/memory/WeightPageStore.js","updated":"","headings":["particlevoice/nn/memory/WeightPageStore.js","Classes","class WeightPageStore","Functions","async buildPageDirectory(pages)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WeightPageStore.js — Phase 1 ParticleNN memory. Logical 16–32 MiB weight page manifest: a page = a contiguous tensor set with its own SHA 256 hash, matching §6's directory shape exactly ( ) — the EXACT format R8 ( ) already proved works for interrupted downloads (retry, not silent data loss) and corruption detection (hash mismatch actually caught, not tautological). Network fetch is injected ( ) rather than hardcoded to , so this store is testable with a deterministic fake fetcher (as R8 was) and still usable with a real HTTP fetch in production without a second implementation. Classes Method Signature Summary Download page (retrying once on a failed attempt, same as R8's proven interrupted download recovery), verify its hash against the directory, and cache the verified bytes. Throws on persistent hash mismatch (corruption) rather than silently caching bad data. Download every page not already resident, in directory order (priority ordering is 's job, layered on top of this). Drop a page's cached bytes (e.g. under memory pressure) — it will be re fetched on next . Functions Build a §6 shaped directory from page byte data, computing each page's real hash and cumulative byte offset. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7c93c4e8130d884933127faf26034abb7787b97f8a75887e8ea4afb016bca04a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/memory/WeightPageUploader.md::0000","path":"agi/reference/particle_voice/nn/memory/WeightPageUploader.md","title":"particle_voice/nn/memory/WeightPageUploader.js","description":"","kind":"reference","source":"agi/particle_voice/nn/memory/WeightPageUploader.js","updated":"","headings":["particlevoice/nn/memory/WeightPageUploader.js","Classes","class WeightPageUploader","Functions","attachDeviceLossRecovery(device, uploader, recreateDevice, { maxBackoffMs = 8000 } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WeightPageUploader.js — Phase 1 ParticleNN memory. Orchestrates (download+hash verify) and (GPU upload) together: priority ordered upload, resumability (skip already uploaded pages), and device loss re upload — the exact three properties R8 ( ) proved for a single/multi page toy case, generalized here to an arbitrary page count and caller chosen priority order. Classes Method Signature Summary Upload (an array of page indices, caller chosen — e.g. from , ordered by nearest upcoming segment first) to the GPU, downloading+verifying via first if not already resident. Already uploaded pages are skipped — safe to call again after an interrupted call (the \"resume\" property). Evict a page from both the GPU ( ) and the uploaded set bookkeeping — 's own cached bytes are untouched (call separately if the host copy should also be dropped). Device loss recovery: build a fresh against and re upload every previously uploaded page. Re downloads from only for pages that are no longer host resident (e.g. evicted under memory pressure before the loss) — otherwise reuses the already verified cached bytes, matching R8's re run on a new device pattern. Functions Wire the recovery contract from §5: skip recovery if (intentional disposal, not a crash); otherwise recreate the device with exponential backoff and call . Parameters: (GPUDevice) — No description in source JSDoc. (WeightPageUploader) — No description in source JSDoc. (() = Promise<GPUDevice ) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig","contentHash":"cee6eb0d0ef83f603d04fad39e4327c42bd9780107300f5225a9f90cd1616a2a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/memory/WeightPageUploader.md::0001","path":"agi/reference/particle_voice/nn/memory/WeightPageUploader.md","title":"particle_voice/nn/memory/WeightPageUploader.js","description":"","kind":"reference","source":"agi/particle_voice/nn/memory/WeightPageUploader.js","updated":"","headings":["particlevoice/nn/memory/WeightPageUploader.js","Classes","class WeightPageUploader","Functions","attachDeviceLossRecovery(device, uploader, recreateDevice, { maxBackoffMs = 8000 } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a70aaf4c9f4f092a22ec804e2fd1c0bca873d342b12bb2e508bda7b0d15555da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/memory/WeightResidencyPlan.md::0000","path":"agi/reference/particle_voice/nn/memory/WeightResidencyPlan.md","title":"particle_voice/nn/memory/WeightResidencyPlan.js","description":"","kind":"reference","source":"agi/particle_voice/nn/memory/WeightResidencyPlan.js","updated":"","headings":["particlevoice/nn/memory/WeightResidencyPlan.js","Classes","class WeightResidencyPlan","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WeightResidencyPlan.js — Phase 1 ParticleNN memory. For each program segment (from a §7 bind window directory: ), which pages must be resident — plus the diff between two segments' page sets, so a scheduler can decide exactly which pages to load/evict when moving from one segment to the next instead of reloading everything. Classes WeightResidencyPlan.js — Phase 1 ParticleNN memory. For each program segment (from a §7 bind window directory: ), which pages must be resident — plus the diff between two segments' page sets, so a scheduler can decide exactly which pages to load/evict when moving from one segment to the next instead of reloading everything. Method Signature Summary Union of pages required across several segments (e.g. a lookahead window of upcoming segments). Moving from (currently resident, may be empty) to (about to run): which pages can be evicted (no longer needed) and which must be loaded (not yet resident). Total distinct pages referenced anywhere in the plan — an upper bound on VRAM if everything were resident simultaneously (it never should be, per the plan's residency window design). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1fc604471eadb6e69cb8398355e55f672e1163444a94809ab14e6fc5fb44675a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/runtime/DeviceProfile.md::0000","path":"agi/reference/particle_voice/nn/runtime/DeviceProfile.md","title":"particle_voice/nn/runtime/DeviceProfile.js","description":"","kind":"reference","source":"agi/particle_voice/nn/runtime/DeviceProfile.js","updated":"","headings":["particlevoice/nn/runtime/DeviceProfile.js","Functions","async detectDeviceProfile()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DeviceProfile.js — Phase 1 ParticleNN runtime. Capability/tier detection, implementing exactly the tier rules frozen in §1–§2 (hard requirements + / / tiers) — not a new policy invented here. Reuses the engine's own WebGPU acquisition ( ) rather than reimplementing adapter/device request logic, same as R1's . Functions Acquire a throwaway GPUDevice, classify its tier per DeviceContract v0 §1–§2, then destroy it — mirrors R1's read only probe discipline. The caller is expected to acquire its OWN long lived device separately (this function is a classification probe, not a device provider). Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"fa3cd1b0d4e338963872ee1fd3285434c576721c92d2d90ca3a80d6d66a74b79"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/runtime/KernelValidation.md::0000","path":"agi/reference/particle_voice/nn/runtime/KernelValidation.md","title":"particle_voice/nn/runtime/KernelValidation.js","description":"","kind":"reference","source":"agi/particle_voice/nn/runtime/KernelValidation.js","updated":"","headings":["particlevoice/nn/runtime/KernelValidation.js","Functions","async dispatchAndReadback(device, wgslSource, { uniform, storageInputs = [], outputByteLength, entryPoint = 'main', label = 'KernelValidation' }, workgroups)","checkParity(actual, expected, tolerance)","randomVector(length, seed = 1)","zerosVector(length)","extremeF16Vector(length)","quantizedEdgeVector(length)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: KernelValidation.js — Phase 1 ParticleNN testing. Reusable dispatch and readback plumbing plus the plan's required edge case test vector generators (\"odd dims, min dims, zeros, extreme FP16, quantized values\") — kept generic over binding shape rather than one runner per kernel, since Phase 1's six kernels all differ in bind group layout but share the same \"encode uniform + storage buffers, dispatch, read one output buffer back, compare to a JS reference\" shape. Functions Run one compute dispatch against a set of storage/uniform buffers built from plain typed arrays, then read one designated output buffer back. Compiles itself (rather than accepting a pre built pipeline) so it can pair the shader module with the matching explicit bind group layout described above. Parameters: (GPUDevice) — No description in source JSDoc. (string) — No description in source JSDoc. ([number, number, number]) — No description in source JSDoc. Returns: raw output bytes Compare an actual numeric array to an expected one and return a parity check result object matching R2's shape. Random values in [ 1, 1], deterministic given . Values right at/near the extremes a well behaved f16 encoder/kernel must not silently clip or NaN on. Values already rounded to representable int8 codes, for quantization path parity tests. Constants — Standard edge case dimension set: odd, minimal (1), and a \"normal\" power of two size, for sweeping a kernel's dimension parameter. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the","contentHash":"2c71ad06a9e562046259d1f7c84e773325462569a785dd1a5e2268aaed54e2b3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/runtime/KernelValidation.md::0001","path":"agi/reference/particle_voice/nn/runtime/KernelValidation.md","title":"particle_voice/nn/runtime/KernelValidation.js","description":"","kind":"reference","source":"agi/particle_voice/nn/runtime/KernelValidation.js","updated":"","headings":["particlevoice/nn/runtime/KernelValidation.js","Functions","async dispatchAndReadback(device, wgslSource, { uniform, storageInputs = [], outputByteLength, entryPoint = 'main', label = 'KernelValidation' }, workgroups)","checkParity(actual, expected, tolerance)","randomVector(length, seed = 1)","zerosVector(length)","extremeF16Vector(length)","quantizedEdgeVector(length)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"→ brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"32d2bd286c5b1e1e0a8b4679565b6ca0e5cecf75eaeb682d4131b74cd9929d23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/runtime/NeuralExecutor.md::0000","path":"agi/reference/particle_voice/nn/runtime/NeuralExecutor.md","title":"particle_voice/nn/runtime/NeuralExecutor.js","description":"","kind":"reference","source":"agi/particle_voice/nn/runtime/NeuralExecutor.js","updated":"","headings":["particlevoice/nn/runtime/NeuralExecutor.js","Classes","class NeuralExecutor","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NeuralExecutor.js — Phase 1 ParticleNN runtime. Dispatches a compiled 's steps as one command encoder (one compute pass per step, in program order), then submits through the engine's own when one is supplied — sharing the render queue's frame budget rather than a second, uncoordinated submission path. Falls back to a direct when no broker is given (e.g. an offline/background compile and run context with no render loop to share a budget with). Classes NeuralExecutor.js — Phase 1 ParticleNN runtime. Dispatches a compiled 's steps as one command encoder (one compute pass per step, in program order), then submits through the engine's own when one is supplied — sharing the render queue's frame budget rather than a second, uncoordinated submission path. Falls back to a direct when no broker is given (e.g. an offline/background compile and run context with no render loop to share a budget with). Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"bc0bd72455c15c68de68699c8a126e89577e713a29e97a84546c4ac1dc9daac2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/runtime/NeuralScheduler.md::0000","path":"agi/reference/particle_voice/nn/runtime/NeuralScheduler.md","title":"particle_voice/nn/runtime/NeuralScheduler.js","description":"","kind":"reference","source":"agi/particle_voice/nn/runtime/NeuralScheduler.js","updated":"","headings":["particlevoice/nn/runtime/NeuralScheduler.js","Classes","class NeuralScheduler","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NeuralScheduler.js — Phase 1 ParticleNN runtime. Priority ordered queue of requests — for when several runs are pending at once (e.g. multiple NPCs queued to speak in the same frame window). Mirrors 's high/normal/low priority bucket design (reference, not imported — ParticleNN stays decoupled from the render side scheduler's internals) layered on top of , which already defers to a shared for actual frame budget admission — this file's job is only ordering which run gets submitted next, not re deriving budget admission itself. Classes Method Signature Summary Enqueue a run request. Returns a promise that resolves once this specific request has actually been dispatched (not merely queued). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1740fe3fcba29847e4b8881bce792526c2502a45cd4e4340db8c192f807db43a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/runtime/NumericalTolerance.md::0000","path":"agi/reference/particle_voice/nn/runtime/NumericalTolerance.md","title":"particle_voice/nn/runtime/NumericalTolerance.js","description":"","kind":"reference","source":"agi/particle_voice/nn/runtime/NumericalTolerance.js","updated":"","headings":["particlevoice/nn/runtime/NumericalTolerance.js","Functions","maxErrors(actual, expected)","withinTolerance(actual, expected, { absTolerance, relTolerance })","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NumericalTolerance.js — Phase 1 ParticleNN testing. Canonical tolerance constants (single source — re exports these rather than defining its own copy) and the shared abs/rel error comparison used by and every kernel parity test, matching the exact convention R2's already proved out ( / against a JS scalar reference). Functions Elementwise max abs/rel error between two same length numeric arrays. True if is within (either bound satisfied per element is sufficient — matches R2's tolerance semantics). Constants — NumericalTolerance.js — Phase 1 ParticleNN testing. Canonical tolerance constants (single source — re exports these rather than defining its own copy) and the shared abs/rel error comparison used by and every kernel parity test, matching the exact convention R2's already proved out ( / against a JS scalar reference). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"173aae90cc177e4eb8585c73765717571619abd3dbff4817e0afbe26428caaca"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/runtime/PipelineCache.md::0000","path":"agi/reference/particle_voice/nn/runtime/PipelineCache.md","title":"particle_voice/nn/runtime/PipelineCache.js","description":"","kind":"reference","source":"agi/particle_voice/nn/runtime/PipelineCache.js","updated":"","headings":["particlevoice/nn/runtime/PipelineCache.js","Classes","class PipelineCache","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PipelineCache.js — Phase 1 ParticleNN runtime. Hash keyed compute pipeline cache: avoids recompiling the same WGSL source + entry point on every dispatch. Keyed by a cheap string hash of the generated WGSL source (kernels are JS generated, so byte identical source for the same params is expected — see ), not by kernel name + params (two different param sets can legitimately generate identical WGSL, and caching by source avoids a redundant compile in that case too). Classes Method Signature Summary Get (or compile+cache) a compute pipeline for / . If (a ) is provided, uses the explicit layout synchronous path (§8 of — REQUIRED for any kernel). If omitted, falls back to + async ( ) — only safe for kernels that do not use f16. Drop every cached pipeline/module reference (does not call any GPU dispose API — pipelines/modules are GC'd, WebGPU has no explicit destroy for them). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"831de9d0d0b35e827c35b328afcdfdbc7a81d1be3a7da85879660ebcc07a930c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/nn/runtime/PipelineUtils.md::0000","path":"agi/reference/particle_voice/nn/runtime/PipelineUtils.md","title":"particle_voice/nn/runtime/PipelineUtils.js","description":"","kind":"reference","source":"agi/particle_voice/nn/runtime/PipelineUtils.js","updated":"","headings":["particlevoice/nn/runtime/PipelineUtils.js","Functions","async createComputePipelineChecked(device, module, { label, name = label, entryPoint = 'main' } = {})","async assertShaderCompiled(module, name = 'shader')","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PipelineUtils.js — Phase 1 ParticleNN runtime. Deliberate byte for byte mirror of (design reference, not imported) per the plan's explicit instruction to keep ParticleNN decoupled from the LLM runtime. Already proven correct — every Phase 1 risk spike (R2, R3, R9, etc.) has been using the LLM runtime's copy of this exact logic directly; this is the same logic under ParticleVoice's own module tree. Functions PipelineUtils.js — Phase 1 ParticleNN runtime. Deliberate byte for byte mirror of (design reference, not imported) per the plan's explicit instruction to keep ParticleNN decoupled from the LLM runtime. Already proven correct — every Phase 1 risk spike (R2, R3, R9, etc.) has been using the LLM runtime's copy of this exact logic directly; this is the same logic under ParticleVoice's own module tree. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1509b84a8dfcef1ee2bf5f95611b6105eae6cf7f6351ff936432e6612553d4be"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/ActivityIntegrationProbe.md::0000","path":"agi/reference/particle_voice/risk/ActivityIntegrationProbe.md","title":"particle_voice/risk/ActivityIntegrationProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/ActivityIntegrationProbe.js","updated":"","headings":["particlevoice/risk/ActivityIntegrationProbe.js","Functions","async runActivityIntegrationProbe()","async buildActivityIntegrationReceipt(result)","prepareActivityIntegrationReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ActivityIntegrationProbe.js — R15 Phase 1 risk spike orchestrator. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"90aba00e7b3b6e3e7b5ce1b908c3adc7a0aa4f3f865cf318050f1aeb616cbd7b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/BreathReservoir.md::0000","path":"agi/reference/particle_voice/risk/BreathReservoir.md","title":"particle_voice/risk/BreathReservoir.js","description":"","kind":"reference","source":"agi/particle_voice/risk/BreathReservoir.js","updated":"","headings":["particlevoice/risk/BreathReservoir.js","Functions","createBreathReservoir({ sampleRate, compliance = 0.15 })","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BreathReservoir.js — R6A Phase 1 risk spike. \"BreathReservoirState (lung pressure, compliance, target subglottal pressure) ParticleTract\" — particle voice 26357c.md, Phase 2. Minimal first order lag model: lung pressure exponentially approaches whatever target subglottal pressure RespiratoryDriveHead commands, rate set by (higher compliance = slower to respond, matching the physical intuition of a more elastic reservoir). This is the mechanism that lets a physiology intervention on breath effort actually change the glottal source's amplitude sample by sample rather than jumping instantly. Functions BreathReservoir.js — R6A Phase 1 risk spike. \"BreathReservoirState (lung pressure, compliance, target subglottal pressure) ParticleTract\" — particle voice 26357c.md, Phase 2. Minimal first order lag model: lung pressure exponentially approaches whatever target subglottal pressure RespiratoryDriveHead commands, rate set by (higher compliance = slower to respond, matching the physical intuition of a more elastic reservoir). This is the mechanism that lets a physiology intervention on breath effort actually change the glottal source's amplitude sample by sample rather than jumping instantly. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b31c2a43eb108df86978725339c436c8e614b0ed9d56b709f58181f3670078c5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/CaptureGate.md::0000","path":"agi/reference/particle_voice/risk/CaptureGate.md","title":"particle_voice/risk/CaptureGate.js","description":"","kind":"reference","source":"agi/particle_voice/risk/CaptureGate.js","updated":"","headings":["particlevoice/risk/CaptureGate.js","Functions","checkInsufficientSpeech(frames)","checkLowSnr(frames)","checkClipping(frames)","checkEcho(echoResidualRatio)","checkMusic(frames)","checkAnotherSpeaker(frames)","checkGainDrift(frames)","checkDeviceChanges(deviceChangeEventCount)","checkDroppedSamples(droppedSampleCount)","checkTooMuchSilence(frames)","checkPoorCoverage(phraseCoverageRatio)","evaluateCaptureQuality(session)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CaptureGate.js — R14 Phase 1 risk spike. \"Custom voice capture rejects insufficient speech, low SNR, clipping, echo, music, another speaker, gain drift, device changes, dropped samples, silence, or poor coverage.\" — Phase 1. Each check is a cheap, independently testable heuristic proxy (not a trained classifier) over a session of R10 frame analyses plus out of band capture metadata (device change/dropped sample counts, target phrase coverage) that a real / layer — not the energy meter — would track. Functions Echo contamination: strong correlation between the recording and a known TTS reference. Music proxy: natural speech's frame to frame RMS is far less stable than sustained tonal/musical content. Another speaker proxy: an abrupt, sustained shift in low/high band energy balance partway through. Gain drift: mean level of the last third vs first third of the speech should stay close. = { frames, echoResidualRatio, deviceChangeEventCount, droppedSampleCount, phraseCoverageRatio }. Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"748b841b241f17700704ca3008a63668f8ed7878f7425752abc904e0580bd702"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/CaptureGateProbe.md::0000","path":"agi/reference/particle_voice/risk/CaptureGateProbe.md","title":"particle_voice/risk/CaptureGateProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/CaptureGateProbe.js","updated":"","headings":["particlevoice/risk/CaptureGateProbe.js","Functions","async runCaptureGateProbe()","async buildCaptureGateReceipt(result)","prepareCaptureGateReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CaptureGateProbe.js — R14 Phase 1 risk spike orchestrator. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"2429102e91e6ebe926c79f70639ef6dfcf5c8cad7e66b525161d4cec79385d1a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/DeviceMatrixProbe.md::0000","path":"agi/reference/particle_voice/risk/DeviceMatrixProbe.md","title":"particle_voice/risk/DeviceMatrixProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/DeviceMatrixProbe.js","updated":"","headings":["particlevoice/risk/DeviceMatrixProbe.js","Functions","async probeWebGpu()","async probeAudioContext()","probeCrossOriginIsolation()","probeSharedArrayBuffer()","probeVramQuota()","async runDeviceMatrixProbe()","async buildDeviceMatrixReceipt(result)","prepareDeviceMatrixReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DeviceMatrixProbe.js — R1 Phase 1 risk spike. \"device matrix.html — record shader f16, workgroup/storage/binding/invocation limits, AudioContext properties, crossOriginIsolated, AudioWorklet/ SharedArrayBuffer, OS VRAM quota.\" — particle voice 26357c.md, Phase 1. Reuses the engine's own capability probing primitives instead of reimplementing WebGPU adapter/device acquisition: engine/core/gpu/GpuDevice.js (GpuDevice.create, detectGpuPlatform) engine/core/gpu/GpuInit.js (isWebGpuSupported) webgpu os/kernel/VRAMTracker.js (default app/global quota) Read only: the WebGPU device created here is destroyed immediately after limits/features are read, and the AudioContext is closed immediately after its properties are read. Functions Acquire a throwaway GPUDevice via the engine's own GpuDevice, read limits/features, destroy it. Construct a throwaway AudioContext, read its properties, close it. Confirm SharedArrayBuffer is not just present but actually constructible. Read the OS default VRAM quota (webgpu os/kernel/VRAMTracker.js), no kernel required. Run every device matrix probe and roll up an overall status. is a distinct outcome from , matching the plan's own Production Contract language (\"Unsupported hardware is reported explicitly as unsupported... the project does not degrade to an external runtime\"): unsupported: WebGPU itself is unavailable on this device/browser. fail: WebGPU is available, but a hard architectural requirement (crossOriginIsolated, SharedArrayBuffer, AudioWorklet) is missing — almost always a serving problem (missing COOP/COEP headers), not a hardware ceiling. Re check via start server.py before treating as real. pass: WebGPU + AudioContext + cross origin","contentHash":"e297cc94f2f85b1b53056c9a53c61252da4d468900063fd0bee145f288685bbb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/DeviceMatrixProbe.md::0001","path":"agi/reference/particle_voice/risk/DeviceMatrixProbe.md","title":"particle_voice/risk/DeviceMatrixProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/DeviceMatrixProbe.js","updated":"","headings":["particlevoice/risk/DeviceMatrixProbe.js","Functions","async probeWebGpu()","async probeAudioContext()","probeCrossOriginIsolation()","probeSharedArrayBuffer()","probeVramQuota()","async runDeviceMatrixProbe()","async buildDeviceMatrixReceipt(result)","prepareDeviceMatrixReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"problem (missing COOP/COEP headers), not a hardware ceiling. Re check via start server.py before treating as real. pass: WebGPU + AudioContext + cross origin isolation + SharedArrayBuffer + AudioWorklet are all present. Wrap a raw probe result into the immutable JSON receipt described by the R1 exit gate: \"Per device limits + capability table.\" Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a98b27bcd2d1bcd9ce0b0ca0f977a2cb8cf394a64d31ad53d3b65ac0ec19f73f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/EchoBargeIn.md::0000","path":"agi/reference/particle_voice/risk/EchoBargeIn.md","title":"particle_voice/risk/EchoBargeIn.js","description":"","kind":"reference","source":"agi/particle_voice/risk/EchoBargeIn.js","updated":"","headings":["particlevoice/risk/EchoBargeIn.js","Functions","createEchoReferenceRing(capacitySamples)","estimateDelay(reference, microphone, maxDelaySamples)","estimateGain(referenceAligned, microphone)","cancelEcho(microphone, reference, delay, gain)","detectDoubleTalk(residual, referenceLevel, thresholdRatio = 0.3)","createBargeInController({ minSustainedFrames = 3 } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EchoBargeIn.js — R12 Phase 1 risk spike. \"echo reference ring, delay estimation, acoustic echo suppression, double talk detection, no self interruption.\" — Phase 1. Simplified fixed delay echo cancellation (cross correlation delay estimate + least squares gain fit + direct subtraction), not an adaptive filter (NLMS/Kalman) — enough to prove the architecture correctly distinguishes pure echo from genuine double talk. (Phase 2+) would use a real adaptive filter for real acoustic paths that drift over time; this fixed delay model is a feasibility check. Functions Cross correlation delay estimate: which shift of best predicts . Least squares gain fit: minimizes microphone gain referenceAligned ^2. Commit bargeInConfirmed only when double talk is detected AND sustained for . <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"51b573d6e75846e83c647585e2b80c03e6ff2f5cd3c279ca70221fa53c8c20c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/EchoBargeInProbe.md::0000","path":"agi/reference/particle_voice/risk/EchoBargeInProbe.md","title":"particle_voice/risk/EchoBargeInProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/EchoBargeInProbe.js","updated":"","headings":["particlevoice/risk/EchoBargeInProbe.js","Functions","async runEchoBargeInProbe()","async buildEchoBargeInReceipt(result)","prepareEchoBargeInReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EchoBargeInProbe.js — R12 Phase 1 risk spike orchestrator. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"42ce7b662a2f1e4e1af212af6ed97f3bf9e2bfc96a341a8c9c5584157aa70af0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/EndpointController.md::0000","path":"agi/reference/particle_voice/risk/EndpointController.md","title":"particle_voice/risk/EndpointController.js","description":"","kind":"reference","source":"agi/particle_voice/risk/EndpointController.js","updated":"","headings":["particlevoice/risk/EndpointController.js","Functions","createEndpointController({ frameMs, minSpeechMs = 200, minSilenceMs = 300, maxSegmentMs = 8000 })","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EndpointController.js — R13 Phase 1 risk spike. \"min speech/silence durations, max segment cap, causal commit bits (no lookahead).\" — Phase 1. A plain frame counting debounce state machine on top of a boolean VAD decision (e.g. R11's ) — every call only consumes the CURRENT frame's VAD decision plus its own prior internal state, never anything from the future, by construction (no buffering of upcoming frames anywhere in this module). Functions EndpointController.js — R13 Phase 1 risk spike. \"min speech/silence durations, max segment cap, causal commit bits (no lookahead).\" — Phase 1. A plain frame counting debounce state machine on top of a boolean VAD decision (e.g. R11's ) — every call only consumes the CURRENT frame's VAD decision plus its own prior internal state, never anything from the future, by construction (no buffering of upcoming frames anywhere in this module). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"64ecea6d8e3a506bb1f2dba0388e0d44a1422e0e4912d95d63f6274b5f4de69f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/EndpointLatencyProbe.md::0000","path":"agi/reference/particle_voice/risk/EndpointLatencyProbe.md","title":"particle_voice/risk/EndpointLatencyProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/EndpointLatencyProbe.js","updated":"","headings":["particlevoice/risk/EndpointLatencyProbe.js","Functions","async runEndpointLatencyProbe()","async buildEndpointLatencyReceipt(result)","prepareEndpointLatencyReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EndpointLatencyProbe.js — R13 Phase 1 risk spike orchestrator. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7e8db5b99b1755939ab90c00b760625f2923f43aa57cf496741b0cd846a06a46"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/EnergyDomains.md::0000","path":"agi/reference/particle_voice/risk/EnergyDomains.md","title":"particle_voice/risk/EnergyDomains.js","description":"","kind":"reference","source":"agi/particle_voice/risk/EnergyDomains.js","updated":"","headings":["particlevoice/risk/EnergyDomains.js","Classes","class ObservedInputEnergy","class GeneratedPhysiologyEnergy","class RenderedOutputEnergy","Functions","assertDomain(energyObject, expectedDomain, context)","driveVoiceBox(energyObject)","computeBargeInEvidence(energyObject)","computeLoudnessDisplay(energyObject)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EnergyDomains.js — R15 Phase 1 risk spike. \"ObservedInputEnergy, GeneratedPhysiologyEnergy, and RenderedOutputEnergy are correctly separated; mic energy is labelled an uncertain acoustic equivalent proxy, not lung pressure.\" — Phase 1. Three distinct, runtime tagged value types plus an guard that THROWS on cross domain misuse — the concrete mechanism proving the architecture cannot silently conflate \"what the mic heard\" with \"what the physiology model generated\" or \"what the renderer produced\". Classes Energy derived from the real microphone signal. This is explicitly an uncertain ACOUSTIC EQUIVALENT proxy — it correlates with vocal effort but is NOT a measurement of lung pressure, glottal state, or any other physiological quantity (room acoustics, mic gain/placement, and background noise all corrupt the mapping). Method Signature Summary Energy/state produced by the neural physiology model (R6A NeuralPhysiologyState/BreathReservoir) driving the Voice Box. Method Signature Summary Energy of the final rendered PCM output (post Voice Box waveguide render). Method Signature Summary Functions Throws unless — the runtime separation guard. Stand in consumer: drives the Voice Box — must only ever accept generated physiology energy. Stand in consumer: barge in/VAD evidence — must only ever accept observed input energy. Stand in consumer: UI loudness meter for what actually came out of the speakers — must only ever accept rendered output energy. Constants — EnergyDomains.js — R15 Phase 1 risk spike. \"ObservedInputEnergy, GeneratedPhysiologyEnergy, and RenderedOutputEnergy are correctly separated; mic energy is labelled an uncertain acoustic equivalent proxy, not lung pressure.\" — Phase 1.","contentHash":"662c84e352b99c762b5a478effa6c5d74bfc131ca1f5a46afb8d6b256c8ca116"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/EnergyDomains.md::0001","path":"agi/reference/particle_voice/risk/EnergyDomains.md","title":"particle_voice/risk/EnergyDomains.js","description":"","kind":"reference","source":"agi/particle_voice/risk/EnergyDomains.js","updated":"","headings":["particlevoice/risk/EnergyDomains.js","Classes","class ObservedInputEnergy","class GeneratedPhysiologyEnergy","class RenderedOutputEnergy","Functions","assertDomain(energyObject, expectedDomain, context)","driveVoiceBox(energyObject)","computeBargeInEvidence(energyObject)","computeLoudnessDisplay(energyObject)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"and RenderedOutputEnergy are correctly separated; mic energy is labelled an uncertain acoustic equivalent proxy, not lung pressure.\" — Phase 1. Three distinct, runtime tagged value types plus an guard that THROWS on cross domain misuse — the concrete mechanism proving the architecture cannot silently conflate \"what the mic heard\" with \"what the physiology model generated\" or \"what the renderer produced\". <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"840190907072a01e4f71e8120791d8e81b771638b55db4e8bb5a4e237bcddd04"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/EnergyMeterProbe.md::0000","path":"agi/reference/particle_voice/risk/EnergyMeterProbe.md","title":"particle_voice/risk/EnergyMeterProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/EnergyMeterProbe.js","updated":"","headings":["particlevoice/risk/EnergyMeterProbe.js","Functions","async runEnergyMeterProbe()","async buildEnergyMeterReceipt(result)","prepareEnergyMeterReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EnergyMeterProbe.js — R10 Phase 1 risk spike orchestrator. No dedicated filename exists for R10 in the plan's risk/ page list either (named \"mic energy meter.html\" in the risk page description text, used here directly). Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b6cf1ceecd5efebf109506bc370bc546dfe9d9b92d9873a4e46ca390b4187926"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/Fft1024Kernel.md::0000","path":"agi/reference/particle_voice/risk/Fft1024Kernel.md","title":"particle_voice/risk/Fft1024Kernel.js","description":"","kind":"reference","source":"agi/particle_voice/risk/Fft1024Kernel.js","updated":"","headings":["particlevoice/risk/Fft1024Kernel.js","Functions","fft1024Shader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Fft1024Kernel.js — R3 Phase 1 risk spike WGSL generator. No raw files (Engine Alignment invariant 1): exports a function, matching the eventual / production kernels. Single workgroup, in workgroup memory, iterative radix 2 Cooley Tukey FFT. One workgroup (512 threads) computes exactly one 1024 point complex FFT; selects which frame of a batch to process, so N frames can be transformed in a single dispatch of N workgroups (needed to batch many overlapping STFT frames for the WOLA test). Direction is a per dispatch uniform, not two separate shaders: forward uses the standard e^{ i2 pi k/N} twiddle; inverse conjugates the input, runs the same forward butterfly network, then conjugates + scales the output by 1/N (IFFT(X) = (1/N) conj(FFT(conj(X)))). Buffer layout (flat, frame major): inputReal/inputImag/outputReal/outputImag are each f32 values; frame f occupies f 1024, f 1024+1024). Functions Constants — Fft1024Kernel.js — R3 Phase 1 risk spike WGSL generator. No raw files (Engine Alignment invariant 1): exports a function, matching the eventual / production kernels. Single workgroup, in workgroup memory, iterative radix 2 Cooley Tukey FFT. One workgroup (512 threads) computes exactly one 1024 point complex FFT; selects which frame of a batch to process, so N frames can be transformed in a single dispatch of N workgroups (needed to batch many overlapping STFT frames for the WOLA test). Direction is a per dispatch uniform, not two separate shaders: forward uses the standard e^{ i2 pi k/N} twiddle; inverse conjugates the input, runs the same forward butterfly network, then conjugates + scales the output by 1/N (IFFT(X) = (1/N) conj(FFT(conj(X)))). Buffer layout (flat, frame major):","contentHash":"4b66378a1361c73650d9faec7282bfb8f9f6905a54ada6c64d8f2eb2d74adec8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/Fft1024Kernel.md::0001","path":"agi/reference/particle_voice/risk/Fft1024Kernel.md","title":"particle_voice/risk/Fft1024Kernel.js","description":"","kind":"reference","source":"agi/particle_voice/risk/Fft1024Kernel.js","updated":"","headings":["particlevoice/risk/Fft1024Kernel.js","Functions","fft1024Shader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"runs the same forward butterfly network, then conjugates + scales the output by 1/N (IFFT(X) = (1/N) conj(FFT(conj(X)))). Buffer layout (flat, frame major): inputReal/inputImag/outputReal/outputImag are each f32 values; frame f occupies [f 1024, f 1024+1024). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: [AGI Training Guide · AGI Architecture","contentHash":"4d0211b78cb35010a29350da414490609adab8a435a0d665e24755ed3123dc58"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/GlottalSource.md::0000","path":"agi/reference/particle_voice/risk/GlottalSource.md","title":"particle_voice/risk/GlottalSource.js","description":"","kind":"reference","source":"agi/particle_voice/risk/GlottalSource.js","updated":"","headings":["particlevoice/risk/GlottalSource.js","Functions","createGlottalSource({ sampleRate, f0AtSample, openQuotient = 0.6, aspirationLevel = 0.0, noiseSeed = 777 })","Re-exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GlottalSource.js — R6 Phase 1 risk spike. A simplified (\"LF lite\") glottal flow source, not the full Liljencrants Fant model (which requires an iterative numerical solve of its alpha/wg/ ta/b parameters from open/speed quotient — out of scope for a feasibility spike). Each glottal pulse is a raised cosine bump over the open phase of the cycle: flow(n) = 0.5 (1 cos(2 pi n/Topen)) for 0 <= n < Topen flow(n) = 0 for Topen <= n < T This is deliberately C1 continuous and zero at both pulse boundaries — clicks are a discontinuity in the waveform or its derivative, and this shape has neither, by construction, regardless of how F0 (period T) changes from one pulse to the next. (Phase 2) is the real LF implementation this stands in for. Aspiration noise is mixed in proportional to instantaneous flow (breathy voicing), driven by a counter based hash so it is chunk boundary independent (same technique as StreamingContinuitySource.js). Functions Create a glottal source generator. lets callers drive a pitch sweep (F0 varies per absolute sample index); is the fraction of each pitch period the folds are open (typical modal voice 0.5 0.7). Re exports <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"9aa9d08a3aedb5162fc513b5128be94d7bff12c935b7b78cc4e557b88ab1ca7b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/GpuReadbackRing.md::0000","path":"agi/reference/particle_voice/risk/GpuReadbackRing.md","title":"particle_voice/risk/GpuReadbackRing.js","description":"","kind":"reference","source":"agi/particle_voice/risk/GpuReadbackRing.js","updated":"","headings":["particlevoice/risk/GpuReadbackRing.js","Functions","createGpuReadbackRing(device, slotByteSize, slotCount = 8)","async runPipelinedReadbackBenchmark(device, ring, sourceBuffer, byteSize, iterations, maxInFlight, makeFrame, updateBufferFn)","percentile(sortedValues, p)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GpuReadbackRing.js — R4 Phase 1 risk spike. \"readback audio.html — 6 8 MAP READ slots, per buffer mapAsync(), no global queue.onSubmittedWorkDone() for normal readback.\" — Phase 1. A minimal round robin ring of MAP READ COPY DST staging buffers. Each slot is copied into and mapped independently; the only synchronization primitive used is that slot's own promise — there is no call anywhere in this module. Backpressure (more than requests in flight) is the caller's responsibility: throws if no slot is free, so a caller must await/release before requesting more than ahead. This is a disposable Phase 1 probe, not the production — same technique, smaller surface. Functions GpuReadbackRing.js — R4 Phase 1 risk spike. \"readback audio.html — 6 8 MAP READ slots, per buffer mapAsync(), no global queue.onSubmittedWorkDone() for normal readback.\" — Phase 1. A minimal round robin ring of MAP READ COPY DST staging buffers. Each slot is copied into and mapped independently; the only synchronization primitive used is that slot's own promise — there is no call anywhere in this module. Backpressure (more than requests in flight) is the caller's responsibility: throws if no slot is free, so a caller must await/release before requesting more than ahead. This is a disposable Phase 1 probe, not the production — same technique, smaller surface. Run a pipelined readback benchmark: keeps up to mapAsync() requests outstanding at once (never more, never a global wait), writing a fresh frame into before each new request. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps","contentHash":"bcd8dedb65f398524db27fea6257d75f46b971fc2d3588374f40f514b5816ee8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/GpuReadbackRing.md::0001","path":"agi/reference/particle_voice/risk/GpuReadbackRing.md","title":"particle_voice/risk/GpuReadbackRing.js","description":"","kind":"reference","source":"agi/particle_voice/risk/GpuReadbackRing.js","updated":"","headings":["particlevoice/risk/GpuReadbackRing.js","Functions","createGpuReadbackRing(device, slotByteSize, slotCount = 8)","async runPipelinedReadbackBenchmark(device, ring, sourceBuffer, byteSize, iterations, maxInFlight, makeFrame, updateBufferFn)","percentile(sortedValues, p)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b9496821c473ff1a326302befd339dda445649e5c93adab1a9df2a738f9cd938"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/HeavySceneKernel.md::0000","path":"agi/reference/particle_voice/risk/HeavySceneKernel.md","title":"particle_voice/risk/HeavySceneKernel.js","description":"","kind":"reference","source":"agi/particle_voice/risk/HeavySceneKernel.js","updated":"","headings":["particlevoice/risk/HeavySceneKernel.js","Functions","heavySceneShader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: HeavySceneKernel.js — R9 Phase 1 risk spike. \"renderer voice stress.html — voice compute beside a representative heavy ParticleRealms scene.\" — Phase 1. A fully procedural instanced triangle render (positions/colors derived from @builtin(instance index) in the vertex shader, no vertex/instance buffers needed) standing in for \"a representative heavy scene\" — many draw time vertices without needing real mesh/scene data for a disposable risk spike. Functions Constants — HeavySceneKernel.js — R9 Phase 1 risk spike. \"renderer voice stress.html — voice compute beside a representative heavy ParticleRealms scene.\" — Phase 1. A fully procedural instanced triangle render (positions/colors derived from @builtin(instance index) in the vertex shader, no vertex/instance buffers needed) standing in for \"a representative heavy scene\" — many draw time vertices without needing real mesh/scene data for a disposable risk spike. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1afc2af7d970b6562ba6b384329eeb3ca62018e7420f56f132411a0698155653"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/IntegrationManifest.md::0000","path":"agi/reference/particle_voice/risk/IntegrationManifest.md","title":"particle_voice/risk/IntegrationManifest.js","description":"","kind":"reference","source":"agi/particle_voice/risk/IntegrationManifest.js","updated":"","headings":["particlevoice/risk/IntegrationManifest.js","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: IntegrationManifest.js — R0 Phase 1 risk spike data. Every named ParticleRealms module referenced by the ParticleVoice plan's \"Codebase Integration Points\" tables (particle voice 26357c.md), with the named exports each entry is expected to provide. dynamically imports each and checks every name in is present on the resulting module namespace, producing a pass/fail/missing receipt. Paths are root relative so they resolve the same regardless of which page imports this manifest (served from the repo root by start server.py). Exports were verified directly against source (grep for ), not assumed from the plan's prose \"What it provides\" column. Where the plan's description implied an export that does not actually exist at module scope, a field records the discrepancy so the audit page can surface it even on entries that technically \"pass\" (file imports fine, but a different name provides the capability than the plan implied). Constants — IntegrationManifest.js — R0 Phase 1 risk spike data. Every named ParticleRealms module referenced by the ParticleVoice plan's \"Codebase Integration Points\" tables (particle voice 26357c.md), with the named exports each entry is expected to provide. dynamically imports each and checks every name in is present on the resulting module namespace, producing a pass/fail/missing receipt. Paths are root relative so they resolve the same regardless of which page imports this manifest (served from the repo root by start server.py). Exports were verified directly against source (grep for ), not assumed from the plan's prose \"What it provides\" column. Where the plan's description implied an export that does not actually exist at module scope, a field records the","contentHash":"b06c1251e09dec5754e2fa763560f2fbf5c27a6348f1f2d603d52ad66ef145fb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/IntegrationManifest.md::0001","path":"agi/reference/particle_voice/risk/IntegrationManifest.md","title":"particle_voice/risk/IntegrationManifest.js","description":"","kind":"reference","source":"agi/particle_voice/risk/IntegrationManifest.js","updated":"","headings":["particlevoice/risk/IntegrationManifest.js","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"the plan's prose \"What it provides\" column. Where the plan's description implied an export that does not actually exist at module scope, a field records the discrepancy so the audit page can surface it even on entries that technically \"pass\" (file imports fine, but a different name provides the capability than the plan implied). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a7b3645c7a8f125e0853eeeec267aa934c31351c33234b24ca2f3e6e2cd3011e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/IntegrationPathAudit.md::0000","path":"agi/reference/particle_voice/risk/IntegrationPathAudit.md","title":"particle_voice/risk/IntegrationPathAudit.js","description":"","kind":"reference","source":"agi/particle_voice/risk/IntegrationPathAudit.js","updated":"","headings":["particlevoice/risk/IntegrationPathAudit.js","Functions","async runIntegrationPathAudit({ manifest = INTEGRATIONMANIFEST, importer = (path)","async buildIntegrationAuditReceipt(result)","prepareIntegrationAuditReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: IntegrationPathAudit.js — R0 Phase 1 risk spike runner. \"Dynamic import/export checks for every named ParticleRealms module\" — particle voice 26357c.md, Phase 1 / R0 Integration exit receipt. For every entry in IntegrationManifest.js this dynamically imports the module and checks that each expected named export is present on the resulting namespace object. No network/file mutation; read only probing. Functions Run the audit against a manifest. Parameters: (object) — No description in source JSDoc. (Array) — — defaults to the full IntegrationManifest. ((path: string) = Promise<any ) — — override for tests; Returns: audit result with per entry pass/fail/missing detail. Wrap a raw audit result into the immutable JSON receipt described by the R0 exit gate: \"JSON file listing every named import, expected export, actual export, result pass/fail/missing.\" Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"2c0a7e39fba24935272026f2701645e52fbce239fd0cd023c983fbb58e2d85df"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/KellyLochbaumWaveguide.md::0000","path":"agi/reference/particle_voice/risk/KellyLochbaumWaveguide.md","title":"particle_voice/risk/KellyLochbaumWaveguide.js","description":"","kind":"reference","source":"agi/particle_voice/risk/KellyLochbaumWaveguide.js","updated":"","headings":["particlevoice/risk/KellyLochbaumWaveguide.js","Functions","reflectionCoefficients(areas)","uniformAreaProfile(numSections, area)","shapedAreaProfile(numSections, controlPoints)","createVocalTract({ numSections, areas, glottalReflection = 0.85, lipReflection = -0.9 })","createNasalBranch({ numSections, areas, nostrilReflection = -0.9 })","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: KellyLochbaumWaveguide.js — R6 Phase 1 risk spike. Single delay per section digital waveguide vocal tract model (Kelly & Lochbaum 1962 scattering junctions, as described in e.g. Julius O. Smith's \"Physical Audio Signal Processing\"). N cylindrical tube sections with cross sectional areas A[0..N 1] give N 1 internal junction reflection coefficients k i = (A i A {i+1}) / (A i + A {i+1}). Boundary conditions: Glottal end: source flow is injected with a partial reflection ( ) of the wave returning from the tract. Lip end: an idealized open end reflection ( , negative) plus a first difference \"radiation\" filter approximating the differentiating characteristic of lip radiation. All boundary/junction coefficients are kept strictly inside ( 1, 1), so the closed loop lattice is passive/BIBO stable by construction (no combination of area profile changes can cause unbounded energy growth). Nasal coupling and constriction noise are deliberate simplifications, not a rigorous multi port (3 way) junction scattering derivation — see createNasalBranch() and step()'s constrictionIndex handling. Phase 2's / need the rigorous version; this is enough to prove the overall architecture is stable and produces plausible, controllable behavior. Functions KellyLochbaumWaveguide.js — R6 Phase 1 risk spike. Single delay per section digital waveguide vocal tract model (Kelly & Lochbaum 1962 scattering junctions, as described in e.g. Julius O. Smith's \"Physical Audio Signal Processing\"). N cylindrical tube sections with cross sectional areas A[0..N 1] give N 1 internal junction reflection coefficients k i = (A i A {i+1}) / (A i + A {i+1}). Boundary conditions: Glottal end: source flow is injected with a partial","contentHash":"abc385b7e6e19bc715ac2a2d8f13075e054eb373743c986fbcb23102e11712d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/KellyLochbaumWaveguide.md::0001","path":"agi/reference/particle_voice/risk/KellyLochbaumWaveguide.md","title":"particle_voice/risk/KellyLochbaumWaveguide.js","description":"","kind":"reference","source":"agi/particle_voice/risk/KellyLochbaumWaveguide.js","updated":"","headings":["particlevoice/risk/KellyLochbaumWaveguide.js","Functions","reflectionCoefficients(areas)","uniformAreaProfile(numSections, area)","shapedAreaProfile(numSections, controlPoints)","createVocalTract({ numSections, areas, glottalReflection = 0.85, lipReflection = -0.9 })","createNasalBranch({ numSections, areas, nostrilReflection = -0.9 })","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"N 1 internal junction reflection coefficients k i = (A i A {i+1}) / (A i + A {i+1}). Boundary conditions: Glottal end: source flow is injected with a partial reflection ( ) of the wave returning from the tract. Lip end: an idealized open end reflection ( , negative) plus a first difference \"radiation\" filter approximating the differentiating characteristic of lip radiation. All boundary/junction coefficients are kept strictly inside ( 1, 1), so the closed loop lattice is passive/BIBO stable by construction (no combination of area profile changes can cause unbounded energy growth). Nasal coupling and constriction noise are deliberate simplifications, not a rigorous multi port (3 way) junction scattering derivation — see createNasalBranch() and step()'s constrictionIndex handling. Phase 2's / need the rigorous version; this is enough to prove the overall architecture is stable and produces plausible, controllable behavior. Linearly interpolated area profile through named (position, area) control points, position in [0, 1]. Simplified nasal branch: its own short KL chain, driven by a coupled fraction of an oral tract tap signal. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"2ac6d36858b52e5dbc387eb40e81b6225db3a3f414b5515e217685694f49e5f5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/MatmulBenchProbe.md::0000","path":"agi/reference/particle_voice/risk/MatmulBenchProbe.md","title":"particle_voice/risk/MatmulBenchProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/MatmulBenchProbe.js","updated":"","headings":["particlevoice/risk/MatmulBenchProbe.js","Functions","async runMatmulBenchProbe()","async buildMatmulBenchReceipt(result)","prepareMatmulBenchReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MatmulBenchProbe.js — R2 Phase 1 risk spike. \"matmul bench.html — W8A16 packed INT8 x FP16 matmul, FP32 accumulation, FP16 output; representative TTS shapes; full model cost projection with =30% headroom.\" — particle voice 26357c.md, Phase 1. Shapes are PROVISIONAL: Phase 0 (spec freeze) has not happened yet, so the plan does not fix concrete model dimensions. These are derived from C:\\Coding\\PS2\\configs\\r0.yaml's own \"architecture smoke test\" convention (d model=256, d ff=4x d model, n layers=6) — the same repo's precedent for sizing a first small model before a full spec exists — combined with this plan's own VoiceChunker steady state chunk bucket (64 frames) and stated mel bin candidate (128). Revisit once spec/DeviceContract v0.md exists. Reuses engine primitives instead of reimplementing device/buffer/pipeline plumbing: GpuDevice (engine/core/gpu/GpuDevice.js), GpuBuffer helpers (engine/core/gpu/GpuBuffer.js), and createComputePipelineChecked (agi/llm/kernels/PipelineUtils.js). Functions Wrap a raw probe result into the R2 exit receipt. Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"6229714f6994b028297e48ec1b90579eb5db36b4706ae34836d1720d001f6b35"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/MatmulReferenceCpu.md::0000","path":"agi/reference/particle_voice/risk/MatmulReferenceCpu.md","title":"particle_voice/risk/MatmulReferenceCpu.js","description":"","kind":"reference","source":"agi/particle_voice/risk/MatmulReferenceCpu.js","updated":"","headings":["particlevoice/risk/MatmulReferenceCpu.js","Functions","randomInt8Weights(K, N, seed = 1)","randomActivations(M, K, seed = 2)","randomScales(N, seed = 3)","packWeightsInt8x4(weightsInt8, K, N)","referenceMatmul(activations, weightsInt8, scales, M, K, N)","compareResults(gpuResult, referenceResult)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MatmulReferenceCpu.js — deterministic test vector generation and a plain JS scalar reference matmul for R2 (matmul bench.html) parity checking. Mirrors the dequantization + accumulation order of MatmulW8A16Kernel.js's exactly (same k4 outer / b inner loop) so the only expected divergence between CPU (double) and GPU (f32) is floating point rounding, not algorithmic difference. Functions Int8Array of length K N, logical layout weights[n K + k], values in [ 127, 127]. Float32Array of length M K, layout activations[m K + k], values in [ 1, 1]. Float32Array of length N — typical per channel INT8 quantization scales. Pack logical [K,N] int8 weights into the u32 layout MatmulW8A16Kernel.js expects. Plain JS reference matmul, same math/order as the WGSL kernel. Returns Float64Array[M N]. Max abs and max relative error between a GPU result and the CPU reference. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"bec915760fdf2543c4c8083ff4ccf156b8850bc9bb02760fd8c4290d51b0ef32"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/MatmulW8A16Kernel.md::0000","path":"agi/reference/particle_voice/risk/MatmulW8A16Kernel.md","title":"particle_voice/risk/MatmulW8A16Kernel.js","description":"","kind":"reference","source":"agi/particle_voice/risk/MatmulW8A16Kernel.js","updated":"","headings":["particlevoice/risk/MatmulW8A16Kernel.js","Functions","matmulW8a16Shader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MatmulW8A16Kernel.js — R2 Phase 1 risk spike WGSL generator. No raw files (Engine Alignment invariant 1): this module exports a function that returns a WGSL string, same convention as and the eventual . MVP scope for this spike: INT8 weights (4 packed per u32, per output channel scale) x FP32 activations, FP32 accumulation, FP32 output. This is a deliberately smaller slice of the plan's stated \"W8A16 packed INT8 x FP16 matmul, FP32 accumulation, FP16 output\" — FP16 activation/output packing needs its own bit packing design (2xf16 per u32, gated on from R1) and is left as an explicit follow up rather than an unverified claim. Weight layout expected by this kernel: Logical weights are [K, N] (K = input/hidden dim, N = output dim). Packed as , a u32 whose 4 bytes are the int8 weights for k = k4 4 + 0..3 (little end = lowest k). is the per output channel dequantization scale. K must be a multiple of 4. Functions Constants — MatmulW8A16Kernel.js — R2 Phase 1 risk spike WGSL generator. No raw files (Engine Alignment invariant 1): this module exports a function that returns a WGSL string, same convention as and the eventual . MVP scope for this spike: INT8 weights (4 packed per u32, per output channel scale) x FP32 activations, FP32 accumulation, FP32 output. This is a deliberately smaller slice of the plan's stated \"W8A16 packed INT8 x FP16 matmul, FP32 accumulation, FP16 output\" — FP16 activation/output packing needs its own bit packing design (2xf16 per u32, gated on from R1) and is left as an explicit follow up rather than an unverified claim. Weight layout expected by this kernel: Logical weights are [K, N] (K = input/hidden dim, N = output dim). Packed as , a u32 whose 4 bytes are","contentHash":"2fa19a1a567c36a7c8901b424ef7d4df72ae64a564756231627d8c07f3fe9447"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/MatmulW8A16Kernel.md::0001","path":"agi/reference/particle_voice/risk/MatmulW8A16Kernel.md","title":"particle_voice/risk/MatmulW8A16Kernel.js","description":"","kind":"reference","source":"agi/particle_voice/risk/MatmulW8A16Kernel.js","updated":"","headings":["particlevoice/risk/MatmulW8A16Kernel.js","Functions","matmulW8a16Shader()","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"unverified claim. Weight layout expected by this kernel: Logical weights are [K, N] (K = input/hidden dim, N = output dim). Packed as , a u32 whose 4 bytes are the int8 weights for k = k4 4 + 0..3 (little end = lowest k). is the per output channel dequantization scale. K must be a multiple of 4. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"f3ad0d1803c6f3f60a216bff8a5386791a0821f747e79645f47c7b635ce21675"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/NeuralPhysiologyState.md::0000","path":"agi/reference/particle_voice/risk/NeuralPhysiologyState.md","title":"particle_voice/risk/NeuralPhysiologyState.js","description":"","kind":"reference","source":"agi/particle_voice/risk/NeuralPhysiologyState.js","updated":"","headings":["particlevoice/risk/NeuralPhysiologyState.js","Functions","createNeuralPhysiologyState({ timestampSeconds, respiratoryDrive, glottalState, tractGesture, articulationEvent, uncertainty, })","createScriptedArticulationHead(intervention = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NeuralPhysiologyState.js — R6A Phase 1 risk spike. \"NeuralPhysiologyState schema: RespiratoryDriveHead, GlottalStateHead, TractGestureHead, ArticulationEventHead, UncertaintyHead version 0x00010000.\" — particle voice 26357c.md, Phase 2 (adopted early here for the R6A wiring receipt). No trained model exists yet (that's Phase 3+). This provides the state SCHEMA plus a deterministic scripted stand in (\"fake head\") that produces plausible per frame physiology values as a pure function of time and an parameter set — enough to prove the wiring ArticulationHead NeuralPhysiologyState BreathReservoir/ParticleTract renderer actually routes control values through to the final PCM, which is what R6A's exit gate asks for. Functions Deterministic scripted stand in for a trained ArticulationHead: a short \"utterance\" that opens into a steady vowel then applies a brief closure gesture, with and letting a caller apply a physiology intervention and compare against a baseline run. Constants — NeuralPhysiologyState.js — R6A Phase 1 risk spike. \"NeuralPhysiologyState schema: RespiratoryDriveHead, GlottalStateHead, TractGestureHead, ArticulationEventHead, UncertaintyHead version 0x00010000.\" — particle voice 26357c.md, Phase 2 (adopted early here for the R6A wiring receipt). No trained model exists yet (that's Phase 3+). This provides the state SCHEMA plus a deterministic scripted stand in (\"fake head\") that produces plausible per frame physiology values as a pure function of time and an parameter set — enough to prove the wiring ArticulationHead NeuralPhysiologyState BreathReservoir/ParticleTract renderer actually routes control values through to the final PCM, which is what R6A's exit gate asks for.","contentHash":"6a562e22c6b5ee0d10b0c8615367eee35974d15dfa67cc8fe466a5c6e7756059"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/NeuralPhysiologyState.md::0001","path":"agi/reference/particle_voice/risk/NeuralPhysiologyState.md","title":"particle_voice/risk/NeuralPhysiologyState.js","description":"","kind":"reference","source":"agi/particle_voice/risk/NeuralPhysiologyState.js","updated":"","headings":["particlevoice/risk/NeuralPhysiologyState.js","Functions","createNeuralPhysiologyState({ timestampSeconds, respiratoryDrive, glottalState, tractGesture, articulationEvent, uncertainty, })","createScriptedArticulationHead(intervention = {})","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"NeuralPhysiologyState BreathReservoir/ParticleTract renderer actually routes control values through to the final PCM, which is what R6A's exit gate asks for. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"f70f0be90d0fef333f079176e805ff7f7a40e7482c03eaf78c864dac05f326b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/OsMediaPermissionProbe.md::0000","path":"agi/reference/particle_voice/risk/OsMediaPermissionProbe.md","title":"particle_voice/risk/OsMediaPermissionProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/OsMediaPermissionProbe.js","updated":"","headings":["particlevoice/risk/OsMediaPermissionProbe.js","Functions","async runOsMediaPermissionProbe()","async buildOsMediaPermissionReceipt(result)","prepareOsMediaPermissionReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: OsMediaPermissionProbe.js — R16 Phase 1 risk spike. \"Secure context + user gesture + getUserMedia + enumerateDevices + AudioWorklet + SharedArrayBuffer all succeed through kernel.media. / kernel.audio. syscalls; media.audio / audio.play / microphone capabilities are correctly required and enforced by guardSyscalls; OsMediaBridge.js never touches raw navigator.mediaDevices.\" — Phase 1. does not exist yet (Phase 1 precedes Phase 1+ implementation) — that check is a forward contract placeholder here, not yet applicable. Everything else tests the REAL ( , ) and ( ) directly, not a stand in — this spike is about the OS integration contract itself. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"aa76f9e724c9a58efd3cd625722691e5756d6da2ee7c6832e593cda113736cd4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/ParticleEnergyMeter.md::0000","path":"agi/reference/particle_voice/risk/ParticleEnergyMeter.md","title":"particle_voice/risk/ParticleEnergyMeter.js","description":"","kind":"reference","source":"agi/particle_voice/risk/ParticleEnergyMeter.js","updated":"","headings":["particlevoice/risk/ParticleEnergyMeter.js","Functions","createParticleEnergyMeter({ sampleRate, frameSize = 256, attackMs = 5, releaseMs = 60, noiseFloorRecoveryPerFrame = 0.0008 })","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleEnergyMeter.js — R10 Phase 1 risk spike. \"RMS, dBFS, peak, clipping, DC offset, crest factor, attack/release, SNR, low/mid/high band energy, spectral flux; adaptive noise floor while no speech/echo present.\" — Phase 1. Plain JS CPU implementation (small analysis frames, not a GPU kernel — this is a metering/control path computation, not a bulk DSP kernel like R3's FFT). Includes its own compact FFT for band energy/spectral flux rather than importing Fft1024Kernel.js, which generates a WGSL string for GPU dispatch, not a callable JS magnitude spectrum function — a different form for a different execution context, same algorithm family as MatmulReferenceCpu.js is to matmul w8a16.js. Functions <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"197069b7e8ba0e895d268289af2b88fceb204f4699a3c6a573bdc28e8770ddd5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/ParticleVad.md::0000","path":"agi/reference/particle_voice/risk/ParticleVad.md","title":"particle_voice/risk/ParticleVad.js","description":"","kind":"reference","source":"agi/particle_voice/risk/ParticleVad.js","updated":"","headings":["particlevoice/risk/ParticleVad.js","Functions","createParticleVad({ sampleRate, frameSize = 256, smoothingMs = 30, riseThreshold = 0.55, fallThreshold = 0.35 })","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleVad.js — R11 Phase 1 risk spike. \"ParticleVAD 1 11 head output smoothness, hysteresis, no flicker; latency p50/p95 of speech start/end decisions.\" — Phase 1. No trained ParticleVAD 1 model exists yet — this is a heuristic, energy/spectral flux driven stand in (built on R10's ParticleEnergyMeter), not a neural VAD. The plan names \"11 continuous probability heads\" without enumerating all 11 in the sections read for this spike; the 11 names below are a reasonable, clearly labeled interpretation, not a verified spec. Testing rigor here focuses on the primary head's smoothness/hysteresis/latency, since that is what a heuristic stand in can meaningfully validate. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"69184505accec61493a03565410e7807c3a96b4c6821878b45eebe3d3a54d9cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/R4ReadbackAudioWorklet.worklet.md::0000","path":"agi/reference/particle_voice/risk/R4ReadbackAudioWorklet.worklet.md","title":"particle_voice/risk/R4ReadbackAudioWorklet.worklet.js","description":"","kind":"reference","source":"agi/particle_voice/risk/R4ReadbackAudioWorklet.worklet.js","updated":"","headings":["particlevoice/risk/R4ReadbackAudioWorklet.worklet.js","Exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: R4ReadbackAudioWorklet.worklet.js — R4 Phase 1 risk spike. \"allocation free AudioWorklet.\" — Phase 1. Reference/mirror target: engine/audio/synth/PatchRunner.worklet.js (SAB parameter reads, no allocation in process()). Consumes a single producer/single consumer PCM ring living in a SharedArrayBuffer (written by the main thread, standing in for what the production path would fill via GPUReadbackRing.js + SharedPCMRing.js). performs zero allocation: no , no object/array literals, no , no , no — only typed array indexing and Atomics on pre existing SharedArrayBuffer backed views. Control layout (Int32Array, SharedArrayBuffer, 4 x int32): [0] writeIndex — next PCM slot the producer will write (main thread) [1] readIndex — next PCM slot this processor will read [2] underrunCount — incremented whenever fewer than one quantum of samples are available [3] processCallCount — incremented every process() call This file cannot be dynamically ed from a normal page context: / only exist inside the AudioWorkletGlobalScope. Load it via . Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"b923628fba51f7557459a49641424204bc2c06f53dd659f5080eef65e45c0170"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/ReadbackAudioProbe.md::0000","path":"agi/reference/particle_voice/risk/ReadbackAudioProbe.md","title":"particle_voice/risk/ReadbackAudioProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/ReadbackAudioProbe.js","updated":"","headings":["particlevoice/risk/ReadbackAudioProbe.js","Functions","createSharedRing(sampleRate)","prefillRing(ring, sampleRate, prefillMs)","startProducer(ring, sampleRate, initialSamplesProduced = 0)","async createWorkletSetup()","async teardownWorkletSetup(setup)","async runReadbackAudioProbe()","async buildReadbackAudioReceipt(result)","prepareReadbackAudioReceiptDownload(receipt)","async runLongSoak(durationMs)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ReadbackAudioProbe.js — R4 Phase 1 risk spike. Exit gate: \"Per buffer mapAsync() p50/p95/p99; AudioWorklet survives variable quantum and rebuild; one hour zero underrun baseline.\" — Phase 1. Honest scoping note: a literal one hour automated soak is not run by this probe (impractical inside a single interactive/CI session). This runs a short deterministic soak (SHORT BASELINE SOAK MS) as a scaled down proxy, clearly labeled as such in the receipt, plus an underrun detector self test (proves the zero underrun count is meaningful, not tautological) and a full teardown+rebuild cycle. The full one hour soak is left as an explicit manual/CI follow up — see in the result. \"Variable quantum\" is not directly controllable from stable browser APIs (render quantum size is fixed at 128 in all current stable implementations); this is verified as a static property of the processor (R4ReadbackAudioWorklet.worklet.js reads for its loop bound rather than assuming 128) plus dynamic survival across two independent AudioContext instances (which may differ in ). Functions Synchronously write of audio into the ring before the worklet node is ever pulled. Absorbs the startup race between the interval based producer's first tick ( PRODUCER INTERVAL MS away) and the AudioWorklet's first process() call, which can happen sooner — without this, a handful of transient underruns at cold start are expected, not a sustained rate problem, but they'd still show up in a \"zero underrun baseline\" reading. Wall clock paced producer: writes exactly enough samples each tick to match elapsed real time (minus whatever was already prefilled), so it neither underruns (falls behind) nor overflows the fixed capacity ring (a","contentHash":"ed508cdfe8abf24254398cd09739deae2994a583d69100b9226251b2ae9645c0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/ReadbackAudioProbe.md::0001","path":"agi/reference/particle_voice/risk/ReadbackAudioProbe.md","title":"particle_voice/risk/ReadbackAudioProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/ReadbackAudioProbe.js","updated":"","headings":["particlevoice/risk/ReadbackAudioProbe.js","Functions","createSharedRing(sampleRate)","prefillRing(ring, sampleRate, prefillMs)","startProducer(ring, sampleRate, initialSamplesProduced = 0)","async createWorkletSetup()","async teardownWorkletSetup(setup)","async runReadbackAudioProbe()","async buildReadbackAudioReceipt(result)","prepareReadbackAudioReceiptDownload(receipt)","async runLongSoak(durationMs)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"each tick to match elapsed real time (minus whatever was already prefilled), so it neither underruns (falls behind) nor overflows the fixed capacity ring (a fixed chunk per tick producer would race arbitrarily far ahead of the consumer and wrap/corrupt the ring). Exposed on window for a human/CI to opt into the real one hour soak manually. Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"913a11569bba844a5503fde61f81e61ac92b88fde2f99f3b7808651b9f5150dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/ReceiptCrypto.md::0000","path":"agi/reference/particle_voice/risk/ReceiptCrypto.md","title":"particle_voice/risk/ReceiptCrypto.js","description":"","kind":"reference","source":"agi/particle_voice/risk/ReceiptCrypto.js","updated":"","headings":["particlevoice/risk/ReceiptCrypto.js","Functions","canonicalizeForHash(value)","async sha256HexOf(value)","async receiptHashOf(value)","prepareJsonDownload(receipt, filenamePrefix)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ReceiptCrypto.js — shared canonicalization + SHA 256 hashing for every Phase 1 risk spike JSON receipt under . Kept tiny and dependency free so any risk page can import it directly. Functions Recursively sort object keys so hashing is independent of insertion order. SHA 256 hex digest of a canonicalized JSON value, or null if WebCrypto is unavailable. Convenience: prefixed digest, or null. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"e1799ce0e53e8691a30aa9cd77ab608788b783b4a4c58f00cf2a2432d49a4e26"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/RendererVoiceStressProbe.md::0000","path":"agi/reference/particle_voice/risk/RendererVoiceStressProbe.md","title":"particle_voice/risk/RendererVoiceStressProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/RendererVoiceStressProbe.js","updated":"","headings":["particlevoice/risk/RendererVoiceStressProbe.js","Functions","async runRendererVoiceStressProbe()","async buildRendererVoiceStressReceipt(result)","prepareRendererVoiceStressReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RendererVoiceStressProbe.js — R9 Phase 1 risk spike. Exit gate: \"Voice + heavy scene runs without audio underruns or persistent render frame drops.\" — Phase 1. Runs a heavy procedural instanced triangle render pass and a batched FFT \"voice compute\" dispatch every animation frame, concurrently with R4's real AudioWorklet + SharedArrayBuffer PCM ring (imported directly, not reimplemented), for a few seconds. Measures both render frame time health and audio underrun count over the same window. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"bc21c03370dca229593436f2fde2eee9cd922707f9197f1f1087f0674f7c8ac3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/SignalMetrics.md::0000","path":"agi/reference/particle_voice/risk/SignalMetrics.md","title":"particle_voice/risk/SignalMetrics.js","description":"","kind":"reference","source":"agi/particle_voice/risk/SignalMetrics.js","updated":"","headings":["particlevoice/risk/SignalMetrics.js","Functions","rms(signal, start = 0, end = signal.length)","peakAbs(signal, start = 0, end = signal.length)","hasNonFinite(signal)","maxAbsDiff(a, b, startIndex = 0, endIndex = a.length)","detectClicks(signal, windowSize = 256, thresholdMultiplier = 12)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SignalMetrics.js — shared signal quality helpers for Phase 1 risk pages (extracted out of VoiceBoxWaveguideProbe.js when a third consumer appeared, to avoid a third copy paste of rms/peakAbs/hasNonFinite). Functions SignalMetrics.js — shared signal quality helpers for Phase 1 risk pages (extracted out of VoiceBoxWaveguideProbe.js when a third consumer appeared, to avoid a third copy paste of rms/peakAbs/hasNonFinite). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d8ceb750743b153495e2f3bd350df59f792441790a15228c6c4f72c1941a515b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/StftWolaProbe.md::0000","path":"agi/reference/particle_voice/risk/StftWolaProbe.md","title":"particle_voice/risk/StftWolaProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/StftWolaProbe.js","updated":"","headings":["particlevoice/risk/StftWolaProbe.js","Functions","async runStftWolaProbe()","async buildStftWolaReceipt(result)","prepareStftWolaReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StftWolaProbe.js — R3 Phase 1 risk spike. \"stft wola.html — 1024 point f32 FFT/IFFT and normalized WOLA for 320 sample hop; identity, impulse, sweep, noise tests.\" — Phase 1. Exit gate: \"Identity tests pass; workgroup limits respected; normalized WOLA ripple below audible threshold.\" Identity tests run a single frame through forward FFT then inverse FFT (both on GPU) and compare to the original signal. The WOLA test runs many overlapping analysis windowed frames through the same round trip, applies a synthesis window, overlap adds, and divides by the exact sum of squares envelope — with exact normalization the round trip is mathematically identity, so any measured \"ripple\" is real FFT/window/OLA implementation error, not a windowing shape artifact. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"60783666ee8f1887f34c2297f4f9dc06b2f9b3381c7e86fa93c1acfbef7572af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/StreamingContinuityProbe.md::0000","path":"agi/reference/particle_voice/risk/StreamingContinuityProbe.md","title":"particle_voice/risk/StreamingContinuityProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/StreamingContinuityProbe.js","updated":"","headings":["particlevoice/risk/StreamingContinuityProbe.js","Functions","async runStreamingContinuityProbe()","async buildStreamingContinuityReceipt(result)","prepareStreamingContinuityReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StreamingContinuityProbe.js — R5 Phase 1 risk spike orchestrator. Pure JS, no GPU/AudioContext dependency: R5's exit gate is an architectural/correctness property of the counter design (does chunking change the output?), not a GPU performance question, so no kernel is needed to validate it. See StreamingContinuitySource.js for the mechanism. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"907f40ba6f1cdc7c822b0bfe6b855c12cc04dc8ba83f910b74d64115943f93b3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/StreamingContinuitySource.md::0000","path":"agi/reference/particle_voice/risk/StreamingContinuitySource.md","title":"particle_voice/risk/StreamingContinuitySource.js","description":"","kind":"reference","source":"agi/particle_voice/risk/StreamingContinuitySource.js","updated":"","headings":["particlevoice/risk/StreamingContinuitySource.js","Functions","noiseAt(absoluteIndex, seed)","harmonicAt(absoluteIndex, sampleRate, f0Hz)","synthesizeAbsoluteCounter(totalSamples, sampleRate, f0Hz, noiseSeed, chunkSizes)","synthesizeChunkRelativeCounterBuggy(totalSamples, sampleRate, f0Hz, noiseSeed, chunkSizes)","maxAbsDiff(a, b)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StreamingContinuitySource.js — R5 Phase 1 risk spike. Exit gate: \"Phase continuous harmonic/noise across arbitrary chunk boundaries; absolute counter noise chunk independent.\" — Phase 1. There is no dedicated filename for R5 in the plan's risk/ page list (it names R0 R4, R6 R16 pages explicitly but not R5) — this file/page covers that exit gate directly. The technique: every sample's value is a pure function of its ABSOLUTE sample index (harmonic phase = 2 pi f0 n/sampleRate; noise = a counter based hash of n), with no persistent oscillator/PRNG state threaded between chunks and no chunk relative counter anywhere. Chunking therefore cannot affect the output — not \"close enough\", bit identical — because the per sample computation never reads chunk position at all. This is the mechanism / (Phase 2) must use for random chunk boundary training and streaming to work. Functions Counter based hash PRNG: deterministic pseudo random float in [ 1, 1], pure function of (index, seed). Pure function of absolute sample index — no carried oscillator phase state. Correct (absolute counter) synthesis: chunking (cycled) has zero effect on the output because each sample only ever reads its absolute index , never a position relative to the current chunk. Deliberately buggy (chunk relative counter) synthesis for the self test: resets its local counter to 0 at the start of every chunk, so output DOES depend on how the signal was chunked — used only to prove the bit exact comparison in this probe actually catches phase discontinuity. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the","contentHash":"207f300b8a7f75c1bab856c98aee841626d1caff67cebd5375b0674f52f08377"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/StreamingContinuitySource.md::0001","path":"agi/reference/particle_voice/risk/StreamingContinuitySource.md","title":"particle_voice/risk/StreamingContinuitySource.js","description":"","kind":"reference","source":"agi/particle_voice/risk/StreamingContinuitySource.js","updated":"","headings":["particlevoice/risk/StreamingContinuitySource.js","Functions","noiseAt(absoluteIndex, seed)","harmonicAt(absoluteIndex, sampleRate, f0Hz)","synthesizeAbsoluteCounter(totalSamples, sampleRate, f0Hz, noiseSeed, chunkSizes)","synthesizeChunkRelativeCounterBuggy(totalSamples, sampleRate, f0Hz, noiseSeed, chunkSizes)","maxAbsDiff(a, b)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1e15a3b0cc4d9c2389c1c002b52dbd1529ec012356bad9b362fd3a32c9d7ea72"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/TinyAutodiff.md::0000","path":"agi/reference/particle_voice/risk/TinyAutodiff.md","title":"particle_voice/risk/TinyAutodiff.js","description":"","kind":"reference","source":"agi/particle_voice/risk/TinyAutodiff.js","updated":"","headings":["particlevoice/risk/TinyAutodiff.js","Functions","makeRng(seed)","createLinear(inputDim, outputDim, rng)","createReLU()","createSigmoid()","createConv1D(inChannels, outChannels, kernelSize, rng)","mseLoss(pred, target)","bceLoss(pred, target)","clipGradGlobalNorm(gradArrays, maxNorm)","createAdamW(paramArrays, { lr = 0.01, beta1 = 0.9, beta2 = 0.999, eps = 1e-8, weightDecay = 0.01 } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TinyAutodiff.js — R7 Phase 1 risk spike. Hand wired forward+backward layers (Linear, Conv1D, ReLU, Sigmoid), losses (MSE, BCE), and an AdamW optimizer — deliberately NOT a general computational graph autodiff engine. / / (Phase 1, nn/autodiff/) are the real general system; R7's job is to prove models at this parameter scale can be forward+backward trained in browser at all, not to build that general architecture early. All arrays are plain Float32Array with row/channel major layouts documented per function; batch=1 throughout (a single fixed sequence/vector per step) is sufficient for R7's memorization convergence test. Functions TinyAutodiff.js — R7 Phase 1 risk spike. Hand wired forward+backward layers (Linear, Conv1D, ReLU, Sigmoid), losses (MSE, BCE), and an AdamW optimizer — deliberately NOT a general computational graph autodiff engine. / / (Phase 1, nn/autodiff/) are the real general system; R7's job is to prove models at this parameter scale can be forward+backward trained in browser at all, not to build that general architecture early. All arrays are plain Float32Array with row/channel major layouts documented per function; batch=1 throughout (a single fixed sequence/vector per step) is sufficient for R7's memorization convergence test. Clip the global L2 norm across all gradient arrays in place — cheap insurance against a deep stack diverging. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI","contentHash":"19e49cdce165fd1afeb30af66db79926758cc6292ca881adff0c53dab2325f77"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/TinyAutodiff.md::0001","path":"agi/reference/particle_voice/risk/TinyAutodiff.md","title":"particle_voice/risk/TinyAutodiff.js","description":"","kind":"reference","source":"agi/particle_voice/risk/TinyAutodiff.js","updated":"","headings":["particlevoice/risk/TinyAutodiff.js","Functions","makeRng(seed)","createLinear(inputDim, outputDim, rng)","createReLU()","createSigmoid()","createConv1D(inChannels, outChannels, kernelSize, rng)","mseLoss(pred, target)","bceLoss(pred, target)","clipGradGlobalNorm(gradArrays, maxNorm)","createAdamW(paramArrays, { lr = 0.01, beta1 = 0.9, beta2 = 0.999, eps = 1e-8, weightDecay = 0.01 } = {})","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"7d8a4a9c426cdf20205c508cd363ab9c4f488983ef43abf39f511147168acfac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/TinyModels.md::0000","path":"agi/reference/particle_voice/risk/TinyModels.md","title":"particle_voice/risk/TinyModels.js","description":"","kind":"reference","source":"agi/particle_voice/risk/TinyModels.js","updated":"","headings":["particlevoice/risk/TinyModels.js","Functions","createTinyMlpModel(rng)","createTinyConv1dModel(rng, sequenceLength = 16)","createTinyGan(rng)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TinyModels.js — R7 Phase 1 risk spike model definitions. \"1M parameter model, 5M Conv1D model, tiny adversarial audio pair\" — particle voice 26357c.md, Phase 1. Exact param counts land close to but not exactly at 1,000,000/5,000,000 (real counts are reported, not fudged to hit a round number) — the plan's own number is an order of magnitude descriptor. Functions 0.93M param MLP: Linear(64,650) ReLU x3 Linear(650,64). 4.5M param Conv1D stack: Conv1D(16,384,5) ReLU, 6x[Conv1D(384,384,5) ReLU], Conv1D(384,16,5). Tiny generator (noise[8] sample[16]) + discriminator (sample[16] real probability). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"0fe31425348e526e445d63e84ca669bca17392913d20030dd77c79ad0e2615ae"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/TrainingSpikeProbe.md::0000","path":"agi/reference/particle_voice/risk/TrainingSpikeProbe.md","title":"particle_voice/risk/TrainingSpikeProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/TrainingSpikeProbe.js","updated":"","headings":["particlevoice/risk/TrainingSpikeProbe.js","Functions","async runTrainingSpikeProbe()","async buildTrainingSpikeReceipt(result)","prepareTrainingSpikeReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TrainingSpikeProbe.js — R7 Phase 1 risk spike orchestrator. Exit gate: \"1M model converges; 5M Conv1D model converges; tiny GAN converges and checkpoints; AdamW memory estimate matches measurement.\" — Phase 1. \"OPFS cache behavior\" and \"device loss re upload\" are also named in the risk page description and covered here. Scoping notes (read before trusting a pass): \"Converges\" here means memorizes a small fixed random input/target pair (loss drops sharply) — a feasibility/mechanics check, not a generalization claim. \"Device loss re upload\" exercises the re upload PROCEDURE after an intentional device.destroy(); there is no scriptable public API to force an uncontrolled device loss (crash), so that path is not tested. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a6c59a61162ee04e128a5c53c84c16a31b10b61c8b9b1db9b6123ff6eb100c54"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/VadContinuityProbe.md::0000","path":"agi/reference/particle_voice/risk/VadContinuityProbe.md","title":"particle_voice/risk/VadContinuityProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/VadContinuityProbe.js","updated":"","headings":["particlevoice/risk/VadContinuityProbe.js","Functions","async runVadContinuityProbe()","async buildVadContinuityReceipt(result)","prepareVadContinuityReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VadContinuityProbe.js — R11 Phase 1 risk spike orchestrator. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"2ad08f955ad2db6ab1ad497782c5c6d12b3f2c13519a56c1e7d8d0ea9d2da40d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/VoiceBoxPhysiologyProbe.md::0000","path":"agi/reference/particle_voice/risk/VoiceBoxPhysiologyProbe.md","title":"particle_voice/risk/VoiceBoxPhysiologyProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/VoiceBoxPhysiologyProbe.js","updated":"","headings":["particlevoice/risk/VoiceBoxPhysiologyProbe.js","Functions","async runVoiceBoxPhysiologyProbe()","async buildVoiceBoxPhysiologyReceipt(result)","prepareVoiceBoxPhysiologyReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VoiceBoxPhysiologyProbe.js — R6A Phase 1 risk spike orchestrator. Exit gate: \"ArticulationHead NeuralPhysiologyState BreathReservoir/ParticleTract acoustic renderer receipt; physiology intervention changes final PCM.\" — Phase 1. No dedicated filename exists for R6A in the plan's risk/ page list either (same situation as R5) — this page covers that exit gate directly. Wires: createScriptedArticulationHead (stand in for the trained model) NeuralPhysiologyState createBreathReservoir createGlottalSource + createVocalTract (R6's waveguide, reused directly, not re implemented) PCM. Renders the same scripted utterance twice — once at baseline, once with a reduced respiratory drive intervention — and requires the two PCM outputs to measurably differ while both remain stable. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"57cb244d0904f361df214e7fd730194ca917af4a1d4a1cb52fecb690ba850f8c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/VoiceBoxWaveguideProbe.md::0000","path":"agi/reference/particle_voice/risk/VoiceBoxWaveguideProbe.md","title":"particle_voice/risk/VoiceBoxWaveguideProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/VoiceBoxWaveguideProbe.js","updated":"","headings":["particlevoice/risk/VoiceBoxWaveguideProbe.js","Functions","async runVoiceBoxWaveguideProbe()","async buildVoiceBoxWaveguideReceipt(result)","prepareVoiceBoxWaveguideReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VoiceBoxWaveguideProbe.js — R6 Phase 1 risk spike orchestrator. Exit gate: \"Stable vowels, nasal coupling, closure/release/frication, pitch sweeps with no clicks or energy explosions.\" — Phase 1. Pure JS/CPU (see KellyLochbaumWaveguide.js header for why): this proves the waveguide algorithm itself is stable and produces plausible, controllable behavior. GPU kernel parity ( etc.) is a separate Phase 2 concern, tested the same way R2 checked matmul parity. Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"baf9b29bface0d1055089c94e898b85fc3157fac64b6a163a55d3cdb89fb7334"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/WeightPagingProbe.md::0000","path":"agi/reference/particle_voice/risk/WeightPagingProbe.md","title":"particle_voice/risk/WeightPagingProbe.js","description":"","kind":"reference","source":"agi/particle_voice/risk/WeightPagingProbe.js","updated":"","headings":["particlevoice/risk/WeightPagingProbe.js","Functions","async runWeightPagingProbe()","async buildWeightPagingReceipt(result)","prepareWeightPagingReceiptDownload(receipt)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WeightPagingProbe.js — R8 Phase 1 risk spike. \"Weight page download/recovery/page hash/interrupted download works; device loss re upload succeeds.\" — Phase 1. No dedicated filename exists for R8 in the plan's risk/ page list — named weight paging.html here. Simulates WeightPageStore.js's core responsibilities: a per page SHA 256 directory, an interrupted download that must retry (not silently drop data), corruption detection via hash mismatch, and multi page device loss re upload (extends R7's single buffer version to several pages). Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"5608f489b819c396248295390a1fefe765ed381824cb9b93adc52ea18b3e424c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/risk/WolaSignals.md::0000","path":"agi/reference/particle_voice/risk/WolaSignals.md","title":"particle_voice/risk/WolaSignals.js","description":"","kind":"reference","source":"agi/particle_voice/risk/WolaSignals.js","updated":"","headings":["particlevoice/risk/WolaSignals.js","Functions","hannWindow(N)","impulseSignal(N)","sineSweepSignal(N, sampleRate, f0, f1)","whiteNoiseSignal(N, seed = 7)","sineSignal(length, sampleRate, freqHz, amplitude = 1.0)","computeSumOfSquaresEnvelope(window, hop, totalLength, numFrames)","overlapAdd(frames, hop, totalLength)","sliceFrames(signal, N, hop, numFrames)","applyWindow(frame, window)","maxAbsDiff(a, b, startIndex = 0, endIndex = a.length)","peakAbs(a, startIndex = 0, endIndex = a.length)","toDb(ratio)","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WolaSignals.js — deterministic test signals, Hann window, and CPU side sum of squares WOLA normalization/overlap add for R3 (stft wola.html). Functions Linear chirp from f0 to f1 Hz across N samples at sampleRate. sum k window[t k hop]^2 for every output sample t in 0, totalLength). Overlap add windowed frames (each already synthesis windowed) into a flat buffer. Slice a flat signal into overlapping N length frames at the given hop (zero padded past the end). <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: [AGI Training Guide · AGI Architecture","contentHash":"c3d680cef3efff8e018e00b952278cf64a88601e6bc046631ed64bd4b8b79ddc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/GPUReadbackRing.md::0000","path":"agi/reference/particle_voice/streaming/GPUReadbackRing.md","title":"particle_voice/streaming/GPUReadbackRing.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/GPUReadbackRing.js","updated":"","headings":["particlevoice/streaming/GPUReadbackRing.js","Classes","class GPUReadbackRing","Functions","createGPUReadbackRing(device, slotByteSize, options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GPUReadbackRing.js — Phase 2 ParticleVoice audio bridge. Production generalization of (R4)'s proven round robin staging slot ring — same core technique (each slot is copied into and mapped independently; the ONLY synchronization primitive is that slot's own promise, never a global ), generalized from R4's single fixed size/offset 0 probe surface to the production needs this module's callers ( 's per chunk PCM readback, eventually 's producer side) actually have: a byte offset/length per request (not always the whole buffer from 0), for backpressure introspection instead of only a throw on exhaustion, and GPU buffer accounting via (matching 's own convention for every other buffer this project creates). R4's exit gate ( ) already measured this exact technique's p50/p95/p99 readback latency and zero underrun behavior across an 8 slot ring — this module does not re derive or change that proven synchronization discipline, only widens its calling surface. Classes Method Signature Summary Number of slots currently checked out (acquired but not yet released) — the caller's own backpressure signal, so a producer can throttle before hitting 's exhaustion error. Encode+submit a copy from into , then BEGIN (not await) . Returns the map promise — the caller awaits it whenever convenient; this module never blocks on it internally, matching R4's \"no global \" discipline. Must only be called after the slot's map promise (from ) has resolved. Returns a Float32Array COPY (not a live view — 's ArrayBuffer detaches on , so this module copies out before the caller releases the slot, matching R4's proven pattern). Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop","contentHash":"da35f138b2cc8274e4cebd0e11477498a5ee55cb55c26e65a1b4634535924c7e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/GPUReadbackRing.md::0001","path":"agi/reference/particle_voice/streaming/GPUReadbackRing.md","title":"particle_voice/streaming/GPUReadbackRing.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/GPUReadbackRing.js","updated":"","headings":["particlevoice/streaming/GPUReadbackRing.js","Classes","class GPUReadbackRing","Functions","createGPUReadbackRing(device, slotByteSize, options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"before the caller releases the slot, matching R4's proven pattern). Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"37e0c825b5ed9aa5aa61fbd38b4b4bea85bc927531fc034c703fb6d20b2af9a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/PolyphaseResampler.md::0000","path":"agi/reference/particle_voice/streaming/PolyphaseResampler.md","title":"particle_voice/streaming/PolyphaseResampler.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/PolyphaseResampler.js","updated":"","headings":["particlevoice/streaming/PolyphaseResampler.js","Classes","class PolyphaseResampler","Functions","gcd(a, b)","designWindowedSincLowpass(numTaps, cutoff)","buildPolyphaseFilter(L, M, tapsPerPhase)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PolyphaseResampler.js — Phase 2 ParticleVoice audio bridge. \"ParticleVoice's own DSP runs at 32 kHz internally and resamples via at the audio bridge boundary\" — §\"Measured lead values\" / §7 (measured 48000 Hz on the reference device). No risk spike precedent exists for this module (checked and — the only \"resample\" hits in are unrelated texture/render resample passes), so this is a fresh CPU side (not GPU kernel) implementation — appropriate for the audio bridge, which is already CPU side per the plan ( , ). Classic Crochiere/Rabiner polyphase interpolator decimator: for an EXACT integer ratio L/M ( / reduced by their GCD — both are integers in practice, e.g. 32000 48000 reduces exactly to L=3, M=2), a single windowed sinc lowpass FIR (cutoff at , designed at the upsampled L inputRate rate to suppress both upsampling images and downsampling aliases) is decomposed into L phase sub filters of taps each. Per output sample, only multiplies are needed regardless of L — the O(tapsPerPhase L) cost is paid once at construction (filter design), not per sample. STREAMING correctness (critical for a chunked audio bridge, where chunks arrive as small windows, not one whole signal): keeps a persistent tail of not yet fully consumed input samples across calls ( / ) and a continuously advancing upsampled domain position ( ), so and concatenated produce IDENTICAL output — verified directly in . Known limitation (documented, not hidden): the FIR filter's group delay ( input samples) means the first ish output samples ramp up from a zero padded history rather than being bit perfect from sample 0 — a normal, bounded FIR startup transient, not a correctness bug (every streaming FIR filter has this).","contentHash":"80f0c5d41b4e6101d71422c10dfe79f7ed5e6f1afab00a0ac6f080ab202e8e6a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/PolyphaseResampler.md::0001","path":"agi/reference/particle_voice/streaming/PolyphaseResampler.md","title":"particle_voice/streaming/PolyphaseResampler.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/PolyphaseResampler.js","updated":"","headings":["particlevoice/streaming/PolyphaseResampler.js","Classes","class PolyphaseResampler","Functions","gcd(a, b)","designWindowedSincLowpass(numTaps, cutoff)","buildPolyphaseFilter(L, M, tapsPerPhase)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"history rather than being bit perfect from sample 0 — a normal, bounded FIR startup transient, not a correctness bug (every streaming FIR filter has this). Classes Method Signature Summary Clears all persistent filter state — matches 's reset on discontinuity convention (cancellation/interruption), so an audio bridge caller can reset the resampler in lockstep with a ring reset rather than letting stale pre reset history bleed into post reset output. Approximate output latency introduced by this filter's group delay, in output samples. Functions PolyphaseResampler.js — Phase 2 ParticleVoice audio bridge. \"ParticleVoice's own DSP runs at 32 kHz internally and resamples via at the audio bridge boundary\" — §\"Measured lead values\" / §7 (measured 48000 Hz on the reference device). No risk spike precedent exists for this module (checked and — the only \"resample\" hits in are unrelated texture/render resample passes), so this is a fresh CPU side (not GPU kernel) implementation — appropriate for the audio bridge, which is already CPU side per the plan ( , ). Classic Crochiere/Rabiner polyphase interpolator decimator: for an EXACT integer ratio L/M ( / reduced by their GCD — both are integers in practice, e.g. 32000 48000 reduces exactly to L=3, M=2), a single windowed sinc lowpass FIR (cutoff at , designed at the upsampled L inputRate rate to suppress both upsampling images and downsampling aliases) is decomposed into L phase sub filters of taps each. Per output sample, only multiplies are needed regardless of L — the O(tapsPerPhase L) cost is paid once at construction (filter design), not per sample. STREAMING correctness (critical for a chunked audio bridge, where chunks arrive as small windows, not one whole signal): keeps a persistent tail of not yet fully consumed input","contentHash":"3b0730fe260e2386e6a4062847dee9f830bd232e3e93cecac54caf453c8de2da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/PolyphaseResampler.md::0002","path":"agi/reference/particle_voice/streaming/PolyphaseResampler.md","title":"particle_voice/streaming/PolyphaseResampler.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/PolyphaseResampler.js","updated":"","headings":["particlevoice/streaming/PolyphaseResampler.js","Classes","class PolyphaseResampler","Functions","gcd(a, b)","designWindowedSincLowpass(numTaps, cutoff)","buildPolyphaseFilter(L, M, tapsPerPhase)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"(critical for a chunked audio bridge, where chunks arrive as small windows, not one whole signal): keeps a persistent tail of not yet fully consumed input samples across calls ( / ) and a continuously advancing upsampled domain position ( ), so and concatenated produce IDENTICAL output — verified directly in . Known limitation (documented, not hidden): the FIR filter's group delay ( input samples) means the first ish output samples ramp up from a zero padded history rather than being bit perfect from sample 0 — a normal, bounded FIR startup transient, not a correctness bug (every streaming FIR filter has this). Windowed sinc lowpass FIR, Hann windowed, normalized to unity DC gain ( ). is normalized to the","contentHash":"839c6f1da14ef987f6061b5fc39430772718f9d82cf764e5a0a5b6bd322b885f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/SafetyLimiter.md::0000","path":"agi/reference/particle_voice/streaming/SafetyLimiter.md","title":"particle_voice/streaming/SafetyLimiter.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/SafetyLimiter.js","updated":"","headings":["particlevoice/streaming/SafetyLimiter.js","Classes","class SafetyLimiter","Functions","softClip(x, threshold = DEFAULTSOFTCLIPTHRESHOLD)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SafetyLimiter.js — Phase 2 ParticleVoice audio bridge. \"SafetyLimiter.js — soft clip, DC removal, fade.\" No existing DC blocker/soft clip/limiter precedent exists in this codebase to reuse (checked — 's node is a bare waveshaper, not a limiter/DC blocker), so this is a fresh CPU side implementation. Sits at the very end of the audio bridge, downstream of , as the last line of defense before PCM reaches /the AudioContext — a physics/neural solver misbehaving upstream (an unstable reflection coefficient, a runaway Newton Raphson solve, etc.) should never be able to produce a harsh digital clip transient, a DC offset, or a click at an utterance boundary — that is this module's entire job. Three independent, composable stages, applied per sample in this order: 1. DC removal — the standard DC blocking filter (Julius O. Smith's well known form): . At DC this converges to exactly 0 (the zero cancels any constant component); close to 1 keeps the notch narrow so audible low frequencies are essentially untouched. is derived via this codebase's own established exponential pole convention ( 's pattern) rather than inventing a new formula style: here . 2. Fade — an explicit, persistent linear gain ramp ( / ), so an utterance start/stop or a cancellation ( 's discontinuity) can be given a clean few millisecond ramp instead of an audible click. 3. Soft clip — a saturating soft knee above (default 0.8): transparent (identity) below the threshold, then a C1 continuous (matching slope at the knee, so no audible kink) saturating curve that asymptotically approaches +/ 1 but never reaches or exceeds it — i.e. this NEVER hard clips, by construction. All three stages carry PERSISTENT state across","contentHash":"f3202b99c9471a825f85b46f4e6786cb84120ec36c199221262d08e642f3607f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/SafetyLimiter.md::0001","path":"agi/reference/particle_voice/streaming/SafetyLimiter.md","title":"particle_voice/streaming/SafetyLimiter.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/SafetyLimiter.js","updated":"","headings":["particlevoice/streaming/SafetyLimiter.js","Classes","class SafetyLimiter","Functions","softClip(x, threshold = DEFAULTSOFTCLIPTHRESHOLD)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"asymptotically approaches +/ 1 but never reaches or exceeds it — i.e. this NEVER hard clips, by construction. All three stages carry PERSISTENT state across calls (DC filter memory, fade envelope position) — clears all of it in one call, mirroring / 's reset on discontinuity convention, so a caller can reset the whole audio bridge chain in lockstep on cancellation/interruption. Classes Method Signature Summary Clears DC filter memory and any in progress fade (jumps straight to unity gain, no fade active) — matches / 's reset on discontinuity convention. Begins a linear fade in from the CURRENT gain (not necessarily 0 — a fade in interrupting an in progress fade out continues smoothly from wherever the gain currently is) up to unity, over . Begins a linear fade out from the current gain down to 0, over . Functions Pure, stateless: saturating soft knee. Identity below in magnitude; above it, asymptotically approaches but never reaches or exceeds it. C1 continuous at the knee ( matches the identity segment's slope exactly). Constants — SafetyLimiter.js — Phase 2 ParticleVoice audio bridge. \"SafetyLimiter.js — soft clip, DC removal, fade.\" No existing DC blocker/soft clip/limiter precedent exists in this codebase to reuse (checked — 's node is a bare waveshaper, not a limiter/DC blocker), so this is a fresh CPU side implementation. Sits at the very end of the audio bridge, downstream of , as the last line of defense before PCM reaches /the AudioContext — a physics/neural solver misbehaving upstream (an unstable reflection coefficient, a runaway Newton Raphson solve, etc.) should never be able to produce a harsh digital clip transient, a DC offset, or a click at an utterance boundary — that is this module's entire job. Three independent, composable stages, applied per sample","contentHash":"30e2f0d276534898bda9a7a3e341a2e946e0b30ac37e58c93f01aab7b0e43e79"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/SafetyLimiter.md::0002","path":"agi/reference/particle_voice/streaming/SafetyLimiter.md","title":"particle_voice/streaming/SafetyLimiter.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/SafetyLimiter.js","updated":"","headings":["particlevoice/streaming/SafetyLimiter.js","Classes","class SafetyLimiter","Functions","softClip(x, threshold = DEFAULTSOFTCLIPTHRESHOLD)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"clip transient, a DC offset, or a click at an utterance boundary — that is this module's entire job. Three independent, composable stages, applied per sample in this order: 1. DC removal — the standard DC blocking filter (Julius O. Smith's well known form): . At DC this converges to exactly 0 (the zero cancels any constant component); close to 1 keeps the notch narrow so audible low frequencies are essentially untouched. is derived via this codebase's own established exponential pole convention ( 's pattern) rather than inventing a new formula style: here . 2. Fade — an explicit, persistent linear gain ramp ( / ), so an utterance start/stop or a cancellation ( 's discontinuity) can be given a clean few millis","contentHash":"ce3528e46bac14d635155dd824c20ae0330e2d641f8ce466505cbf569ca40f31"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/SharedPCMRing.md::0000","path":"agi/reference/particle_voice/streaming/SharedPCMRing.md","title":"particle_voice/streaming/SharedPCMRing.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/SharedPCMRing.js","updated":"","headings":["particlevoice/streaming/SharedPCMRing.js","Functions","createSharedPCMRing({ sampleRate, capacitySeconds = DEFAULTRINGCAPACITYSECONDS })","writeSharedPCMRing(ring, samples)","resetSharedPCMRing(ring)","readAvailable(control, capacity)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SharedPCMRing.js — Phase 2 ParticleVoice audio bridge. Production generalization of (R4)'s proven / / SharedArrayBuffer PCM ring (single producer/single consumer, control layout consumed by 's allocation free ). Adds the plan's explicit \"generation/sequence IDs\" requirement, which R4's risk spike did not need (a disposable probe never gets reset mid run): (control[4]): bumped by whenever the producer discards the ring's contents outright (cancellation/ interruption per the plan's Phase 5 \"cancellation resets state cleanly\", or a device loss GPU recovery restart). The CONSUMER side ( /the resync check in ) compares its own cached generation against this value every call; on mismatch it resyncs to the CURRENT (dropping whatever stale audio was in the ring before the reset) rather than trusting a that may now point at samples from a discarded utterance. (control[5]): incremented once per producer call (a monotonic chunk counter, not a sample counter) — correlates a ring write with the that produced it for diagnostics/telemetry; the consumer does not need to read it for correctness (unlike ). The reader side helper function here ( ) is pure arithmetic over caller supplied typed arrays — no allocation, no closures over per call state — usable from a non worklet consumer (e.g. a test harness) without violating an allocation free constraint. (the AudioWorkletProcessor that actually drains this ring in real time) does NOT import this module — both existing worklet files in this project ( , ) are self contained with no ES imports, so duplicates and the read position arithmetic inline rather than relying on an unverified assumption that module imports behave identically to this project's","contentHash":"0cdc54ec25e795c3859fb110405527cd7e92852038344dfee8b71206e04aeb7c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/SharedPCMRing.md::0001","path":"agi/reference/particle_voice/streaming/SharedPCMRing.md","title":"particle_voice/streaming/SharedPCMRing.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/SharedPCMRing.js","updated":"","headings":["particlevoice/streaming/SharedPCMRing.js","Functions","createSharedPCMRing({ sampleRate, capacitySeconds = DEFAULTRINGCAPACITYSECONDS })","writeSharedPCMRing(ring, samples)","resetSharedPCMRing(ring)","readAvailable(control, capacity)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"so duplicates and the read position arithmetic inline rather than relying on an unverified assumption that module imports behave identically to this project's other worklet loading paths. Both files' docstrings flag this duplication explicitly so the two definitions cannot silently drift apart unnoticed. Functions Returns: A fresh SharedArrayBuffer backed PCM ring, empty, generation 0. Producer side write: copies into the ring starting at the current , advancing it and incrementing . Clamps to available free space ( , the usual ring buffer one slot gap to distinguish full from empty) rather than overflowing past the reader's current position and corrupting not yet read samples — R4's own avoided this by pacing writes to wall clock time so it could never get ahead of the ring's capacity, but a production writer driven by GPU chunk completion (irregular timing) cannot assume that pacing, so this function must be defensive. Returns: The number of samples actually written (may be less Producer side reset: zeroes both indices and bumps so the consumer discards its cached read position on its next call rather than replaying stale audio. Does not zero the PCM data itself (unnecessary — the consumer will resync past it). Pure, allocation free: samples currently available to read (does not mutate anything). Safe to call from . Constants — SharedPCMRing.js — Phase 2 ParticleVoice audio bridge. Production generalization of (R4)'s proven / / SharedArrayBuffer PCM ring (single producer/single consumer, control layout consumed by 's allocation free ). Adds the plan's explicit \"generation/sequence IDs\" requirement, which R4's risk spike did not need (a disposable probe never gets reset mid run): (control[4]): bumped by whenever the producer discards the ring's contents outright","contentHash":"d7bb0ee9dcd240219dc84a0941be8755fab210b6553c873a0cc820dd8dc24e15"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/SharedPCMRing.md::0002","path":"agi/reference/particle_voice/streaming/SharedPCMRing.md","title":"particle_voice/streaming/SharedPCMRing.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/SharedPCMRing.js","updated":"","headings":["particlevoice/streaming/SharedPCMRing.js","Functions","createSharedPCMRing({ sampleRate, capacitySeconds = DEFAULTRINGCAPACITYSECONDS })","writeSharedPCMRing(ring, samples)","resetSharedPCMRing(ring)","readAvailable(control, capacity)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"R4's risk spike did not need (a disposable probe never gets reset mid run): (control[4]): bumped by whenever the producer discards the ring's contents outright (cancellation/ interruption per the plan's Phase 5 \"cancellation resets state cleanly\", or a device loss GPU recovery restart). The CONSUMER side ( /the resync check in ) compares its own cached generation against this value every call; on mismatch it resyncs to the CURRENT (dropping whatever stale audio was in the ring before the reset) rather than trusting a that may now point at samples from a discarded utterance. (control[5]): incremented once per producer call (a monotonic chunk counter, not a sample counter) — correlates a ring write with the that produc","contentHash":"91ab092899b135bfe287fcc84940faeb06c05c8509716c3976c0150836d7f0e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/VoiceChunker.md::0000","path":"agi/reference/particle_voice/streaming/VoiceChunker.md","title":"particle_voice/streaming/VoiceChunker.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/VoiceChunker.js","updated":"","headings":["particlevoice/streaming/VoiceChunker.js","Classes","class VoiceChunker","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VoiceChunker.js — Phase 2 ParticleVoice audio bridge. \"VoiceChunker.js — legal buckets: first 12/16/24 frames, steady 32/48/64 frames, 16 frame left context, 8 12 frame overlap.\" A \"frame\" here is the Activity frame size ( 's measured lead values table: 256 samples @ 32 kHz, 8 ms/frame) — NOT the 100 Hz plan level analysis frame rate, which (Phase 3) reconciles separately. §4 (\"Shape buckets\") directly reuses these exact bucket definitions so a compiled model's execution plan only needs to support this small fixed set of shapes rather than arbitrary sequence lengths — this module is the single source of truth those buckets come from, not a second independent copy of them: firstChunkFrames: [12, 16, 24] steadyChunkFrames: [32, 48, 64] leftContextFrames: 16 overlapFrames: [8, 12] (R5) already exercised exactly these bucket sizes ( ) as one of its chunk boundary patterns and proved that an ABSOLUTE (not chunk relative) sample/phase counter design makes chunking bit identical to processing a whole signal at once — this module's bookkeeping exists for exactly that reason (a caller can derive an absolute frame index from it), not merely as a diagnostic counter. SCOPE (Phase 2, before any real streaming model exists): this module only decides CHUNK SIZE SCHEDULING (which legal bucket to use next, given how many frames are currently available) — it does not itself run a model, apply left context frames to a real tensor, or overlap add output audio (that's / , already built and verified in Phase 2's DSP kernels; a future model execution layer composes THOSE with the chunk size decisions THIS module makes). Latency/deadline tradeoffs (when to prefer a smaller, faster available bucket over","contentHash":"f15c0fb76b413143a6658e978d3b9122a80971deade95379fd6ae020a0f9775d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/VoiceChunker.md::0001","path":"agi/reference/particle_voice/streaming/VoiceChunker.md","title":"particle_voice/streaming/VoiceChunker.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/VoiceChunker.js","updated":"","headings":["particlevoice/streaming/VoiceChunker.js","Classes","class VoiceChunker","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":3,"text":"layer composes THOSE with the chunk size decisions THIS module makes). Latency/deadline tradeoffs (when to prefer a smaller, faster available bucket over waiting for a larger one) are explicitly 's job, not this module's — here always greedily picks the LARGEST legal bucket that currently fits, which is the natural default in the absence of an explicit deadline override. Classes Method Signature Summary Reverts to the initial state (next chunk will again be treated as the FIRST chunk of a fresh utterance) — matches this audio bridge's reset on discontinuity convention ( / / ) for cancellation/interruption. Records that additional frames (from whatever upstream produces them — e.g. a future ) are now available to be chunked. Decides the next legal chunk to dispatch, if enough frames are currently pending — always the LARGEST legal bucket for the current phase (first vs. steady) that fits, consuming that many frames from the pending count. Constants — VoiceChunker.js — Phase 2 ParticleVoice audio bridge. \"VoiceChunker.js — legal buckets: first 12/16/24 frames, steady 32/48/64 frames, 16 frame left context, 8 12 frame overlap.\" A \"frame\" here is the Activity frame size ( 's measured lead values table: 256 samples @ 32 kHz, 8 ms/frame) — NOT the 100 Hz plan level analysis frame rate, which (Phase 3) reconciles separately. §4 (\"Shape buckets\") directly reuses these exact bucket definitions so a compiled model's execution plan only needs to support this small fixed set of shapes rather than arbitrary sequence lengths — this module is the single source of truth those buckets come from, not a second independent copy of them: firstChunkFrames: [12, 16, 24] steadyChunkFrames: [32, 48, 64] leftContextFrames: 16 overlapFrames: [8, 12] (R5) already exercised exactly these bucket","contentHash":"d3a4467872746a43c5a9fada6bdb45f9535aa5e376fe7769bc8817ebaf32b3cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/VoiceChunker.md::0002","path":"agi/reference/particle_voice/streaming/VoiceChunker.md","title":"particle_voice/streaming/VoiceChunker.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/VoiceChunker.js","updated":"","headings":["particlevoice/streaming/VoiceChunker.js","Classes","class VoiceChunker","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":2,"chunkCount":3,"text":"them: firstChunkFrames: [12, 16, 24] steadyChunkFrames: [32, 48, 64] leftContextFrames: 16 overlapFrames: [8, 12] (R5) already exercised exactly these bucket sizes ( ) as one of its chunk boundary patterns and proved that an ABSOLUTE (not chunk relative) sample/phase counter design makes chunking bit identical to processing a whole signal at once — this module's bookkeeping exists for exactly that reason (a caller can derive an absolute frame index from it), not merely as a diagnostic counter. SCOPE (Phase 2, before any real streaming model exists): this module only decides CHUNK SIZE SCHEDULING (which legal bucket to use next, given how many frames are currently available) — it does not itself run a model","contentHash":"d710f067fbdfdf22a0ef0c166bc69a6c2d7cc7dfb3e3e7abe4e13668e3e7514f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/VoiceDeadlineScheduler.md::0000","path":"agi/reference/particle_voice/streaming/VoiceDeadlineScheduler.md","title":"particle_voice/streaming/VoiceDeadlineScheduler.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/VoiceDeadlineScheduler.js","updated":"","headings":["particlevoice/streaming/VoiceDeadlineScheduler.js","Classes","class VoiceDeadlineScheduler","Functions","classifyDeadlineTier(bufferedAheadMs)","admissionFor(bufferedAheadMs)","bufferedAheadMsFromRing(ring)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VoiceDeadlineScheduler.js — Phase 2 ParticleVoice audio bridge. \"VoiceDeadlineScheduler.js — target =300 ms, warning 200 ms, emergency 100 ms; GPU budget admission.\" These three thresholds classify how much PLAYBACK RUNWAY remains — how far ahead of the AudioContext's current playback position the produced but not yet played PCM currently extends ( , typically derived from 's via below) — into an urgency tier, and maps that tier onto EXISTING scheduling primitives rather than inventing new ones: 's priority buckets (queue ordering among pending runs). 's bypass ( 's own docstring: \"Render critical work bypasses the budget\") — this IS the \"GPU budget admission\" the plan names: in the tier, this module recommends so the broker admits the work immediately regardless of the current frame's compute budget, rather than letting a nearly starved voice ring wait behind unrelated background GPU work. Tier boundaries (this module's own interpretation of the plan's three named thresholds — documented explicitly since the plan states three thresholds but only two transitions are unambiguous from the wording alone): bufferedAheadMs = 300 'target' (healthy, target met) 200 <= bufferedAheadMs < 300 'belowTarget' (below target, not yet urgent) 100 <= bufferedAheadMs < 200 'warning' bufferedAheadMs < 100 'emergency' Classes Method Signature Summary Returns the most recently computed admission decision without recomputing it (e.g. for a caller that only wants to inspect current state between calls). Functions Returns: } Composes with 's — the natural real world source of for a live audio bridge — rather than re deriving ring position arithmetic here. Constants <! HUMAN NOTES Notes & Examples Where","contentHash":"0b34216e63fe8121f494fd953601dab2475770c22c7f81283e2722bc17893484"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/VoiceDeadlineScheduler.md::0001","path":"agi/reference/particle_voice/streaming/VoiceDeadlineScheduler.md","title":"particle_voice/streaming/VoiceDeadlineScheduler.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/VoiceDeadlineScheduler.js","updated":"","headings":["particlevoice/streaming/VoiceDeadlineScheduler.js","Classes","class VoiceDeadlineScheduler","Functions","classifyDeadlineTier(bufferedAheadMs)","admissionFor(bufferedAheadMs)","bufferedAheadMsFromRing(ring)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"natural real world source of for a live audio bridge — rather than re deriving ring position arithmetic here. Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"2534bb7b4338b8d0c4d92c088a62d0033f49a85b320887cc72e52e86b6955421"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/VoicePlayback.md::0000","path":"agi/reference/particle_voice/streaming/VoicePlayback.md","title":"particle_voice/streaming/VoicePlayback.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/VoicePlayback.js","updated":"","headings":["particlevoice/streaming/VoicePlayback.js","Classes","class VoicePlayback","Functions","createVoicePlayback(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VoicePlayback.js — Phase 3 ParticleVoice audio bridge. The last hop of the Phase 3 path: model PCM → resample → → → audible speech. Every piece it composes was built and verified in Phase 2; this module only wires them, which is why it is small. ParticleVoiceModel (32 kHz) → PolyphaseResampler (32 kHz → AudioContext.sampleRate) → SafetyLimiter is already applied upstream by the model → SharedPCMRing (SAB, single producer/single consumer) → ParticleVoiceProcessor (AudioWorkletProcessor) The resample is mandatory, not optional The model's internal DSP rate is 32 kHz (R6's proven ), but an picks its own rate — commonly 48 kHz, sometimes 44.1 kHz. Writing 32 kHz samples into a 48 kHz ring without resampling does not error: it plays back 1.5× too fast and a fifth too high , which sounds like a chipmunk rather than like a bug. handles the exact integer L/M case (32k→48k reduces to L=3, M=2) and is streaming correct across chunk boundaries, so feeding it per utterance or per chunk gives identical output. Backpressure is the producer's problem CLAMPS to available space and returns how much it actually accepted — it never overwrites unread audio. A producer that ignores the return value silently drops the tail of every utterance that does not fit. therefore loops, awaiting drain, until everything has been accepted, and reports the total written so a caller can assert it. What this module deliberately does NOT do It does not own the . Creating and resuming one requires a user gesture in a real page, its lifetime belongs to the application, and a test harness needs to build its own — so the context and worklet node are passed in via . That also keeps this module testable without assuming","contentHash":"4fd0e31f9efc08ff03abb30d23bc5885806e9168536d955bb160473948b1d2cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/streaming/VoicePlayback.md::0001","path":"agi/reference/particle_voice/streaming/VoicePlayback.md","title":"particle_voice/streaming/VoicePlayback.js","description":"","kind":"reference","source":"agi/particle_voice/streaming/VoicePlayback.js","updated":"","headings":["particlevoice/streaming/VoicePlayback.js","Classes","class VoicePlayback","Functions","createVoicePlayback(options)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"and a test harness needs to build its own — so the context and worklet node are passed in via . That also keeps this module testable without assuming any particular page structure. Classes Method Signature Summary The SAB views an 's needs. Record the worklet node driving this ring, so can report whether a consumer is actually running. Samples currently queued for playback. Milliseconds of audio queued ahead of the consumer, plus the tier and the scheduling admission it implies. The returned object is spreadable straight into / options, which is the shape was built to produce. Resample model rate PCM to the output rate. Exposed separately so a caller can inspect the conversion (and so tests can verify the rate change independently of the ring). Resample and enqueue an utterance, awaiting ring space as needed. Discard queued audio and resync the consumer — cancellation/barge in. Resets the resampler in lockstep so stale pre reset filter history cannot bleed into the next utterance, which is exactly why exists. Wait until queued audio has been consumed (or the timeout elapses). Functions Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"323302816aa0395e0038f60dc9b4f0e271dfa277deb25ad7bb38fcc28c2e5688"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/worklet/ParticleVoiceProcessor.md::0000","path":"agi/reference/particle_voice/worklet/ParticleVoiceProcessor.md","title":"particle_voice/worklet/ParticleVoiceProcessor.js","description":"","kind":"reference","source":"agi/particle_voice/worklet/ParticleVoiceProcessor.js","updated":"","headings":["particlevoice/worklet/ParticleVoiceProcessor.js","Exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleVoiceProcessor.js — Phase 2 ParticleVoice audio bridge. Production AudioWorkletProcessor consuming 's ring, generalizing (R4)'s proven allocation free (no , no object/array literals, no , no , no — only typed array indexing and Atomics on pre existing SharedArrayBuffer backed views) with the plan's generation aware resync requirement 's docstring describes. This file is deliberately SELF CONTAINED (no ES module imports), matching this project's two existing worklet files ( , ) — 's constants are duplicated here as rather than imported; the two must be kept in sync by hand (flagged in both files' docstrings) rather than relying on an unverified assumption that module imports behave identically to this project's other worklet loading paths. Control layout (Int32Array, SharedArrayBuffer, 6 x int32) — MUST match 's exactly: [0] writeIndex — next PCM slot the producer will write [1] readIndex — next PCM slot this processor will read [2] underrunCount — incremented whenever fewer than one quantum of samples are available [3] processCallCount — incremented every process() call [4] generation — bumped by the producer's resetSharedPCMRing(); on change, this processor jumps readIndex to the CURRENT writeIndex (dropping stale pre reset audio) instead of continuing from a readIndex that may now point at discarded samples. [5] writeSequence — producer chunk counter; read only from here, not required for correctness, exposed for parity with SharedPCMRing.js's layout only. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from","contentHash":"3e91ddfcc58a02a02dc8645387761973582d356a017d10c9470f5beeed72add6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/particle_voice/worklet/ParticleVoiceProcessor.md::0001","path":"agi/reference/particle_voice/worklet/ParticleVoiceProcessor.md","title":"particle_voice/worklet/ParticleVoiceProcessor.js","description":"","kind":"reference","source":"agi/particle_voice/worklet/ParticleVoiceProcessor.js","updated":"","headings":["particlevoice/worklet/ParticleVoiceProcessor.js","Exports","Notes & Examples","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"5c57eb5a91f479381ba95e911d683f831840a2bd1b3811b101d2828de91cbefa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/persistence/CheckpointContracts.md::0000","path":"agi/reference/persistence/CheckpointContracts.md","title":"persistence/CheckpointContracts.js","description":"","kind":"reference","source":"agi/persistence/CheckpointContracts.js","updated":"","headings":["persistence/CheckpointContracts.js","Functions","createNetworkEnvelope(kind, config, parameters)","prepareNetworkEnvelope(input, expectedKind)","createCheckpointEnvelope(data)","prepareCheckpointEnvelope(input)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Accept legacy {config,parameters} documents and return canonical v1 data. Validate both canonical v1 and the pre envelope checkpoint shape. Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4b2235ab707321fcd40d336fd8cf22fafc93047c044f994c7c7a35279f71c187"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/rig/BrainVisualizer.md::0000","path":"agi/reference/rig/BrainVisualizer.md","title":"rig/BrainVisualizer.js","description":"","kind":"reference","source":"agi/rig/BrainVisualizer.js","updated":"","headings":["rig/BrainVisualizer.js","Classes","class BrainVisualizer","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Brain Visualizer Visualizes neural network activity on the brain sphere Method Signature Summary Update with neural network activity Compute average neural activity Get current activity level (0 1) Get activity history Render brain activity visualization Render pulsing rings Render activity particles Reset visualizer <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"019381da01c601a3ed36a529f857dee45cd1d5904ff50841ebb2f09b3b8cf394"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/rig/InjectionSystem.md::0000","path":"agi/reference/rig/InjectionSystem.md","title":"rig/InjectionSystem.js","description":"","kind":"reference","source":"agi/rig/InjectionSystem.js","updated":"","headings":["rig/InjectionSystem.js","Classes","class InjectionSystem","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Injection System Manages tentacle attachment from brain to ragdoll bones Method Signature Summary Initialize tentacles for each bone Update tentacles Get tentacle data for rendering Get tentacle start position (brain) Get tentacle end position for specific bone Check if tentacle is fully attached Get all attached tentacles <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"c09d2055fbf3b9bd3dffc27490314c6beefc52bd3f88cf16fb45f7f78b030c86"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/rig/ParasiteRig.md::0000","path":"agi/reference/rig/ParasiteRig.md","title":"rig/ParasiteRig.js","description":"","kind":"reference","source":"agi/rig/ParasiteRig.js","updated":"","headings":["rig/ParasiteRig.js","Classes","class ParasiteRig","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Parasite Rig The \"brain sphere\" entity that hovers above and controls the ragdoll Method Signature Summary Update parasite rig Inject into ragdoll Eject from ragdoll Set neural activity level (0 1) Get brain sphere position Get current radius (with pulse) Get glow color (varies with neural activity) Get injection progress (0 1) Render brain sphere <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a62a93363994a5483ef249f958d0237ab6e0d5c53618243590c1b835ac71e389"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/rig/TentacleRenderer.md::0000","path":"agi/reference/rig/TentacleRenderer.md","title":"rig/TentacleRenderer.js","description":"","kind":"reference","source":"agi/rig/TentacleRenderer.js","updated":"","headings":["rig/TentacleRenderer.js","Classes","class TentacleRenderer","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Tentacle Renderer Renders tentacles using lightning/electricity effect Method Signature Summary Initialize renderer Render all tentacles Render single tentacle Generate curved path between two points Quadratic bezier curve Add electrical noise to path Get tentacle color based on neural activity Render neural pulse traveling down tentacle <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"368a5c7d3ba94ce950adab12490e94e5cc9cc781466c4c4f3b77a30416016f78"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/scene/DebugVisualizer.md::0000","path":"agi/reference/scene/DebugVisualizer.md","title":"scene/DebugVisualizer.js","description":"","kind":"reference","source":"agi/scene/DebugVisualizer.js","updated":"","headings":["scene/DebugVisualizer.js","Classes","class DebugVisualizer","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Debug Visualizer Renders debug overlays for training visualization Method Signature Summary Initialize debug visualizer Render debug visualizations Render bone positions as spheres Render velocity vectors Render center of mass Enable/disable debug visualization <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"0e75c3e7dd6510302c01818088913554af06fc9df1fe8f11851161b9af153c79"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/scene/GroundPlane.md::0000","path":"agi/reference/scene/GroundPlane.md","title":"scene/GroundPlane.js","description":"","kind":"reference","source":"agi/scene/GroundPlane.js","updated":"","headings":["scene/GroundPlane.js","Classes","class GroundPlane","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Ground Plane Infinite grid ground for training environment Method Signature Summary Initialize ground plane Render ground plane Set grid properties Set grid color <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"fe76231ba12df5fdfbb391fe33bf192df590798e935f86e2d2923c681d665c38"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/scene/SceneRenderer.md::0000","path":"agi/reference/scene/SceneRenderer.md","title":"scene/SceneRenderer.js","description":"","kind":"reference","source":"agi/scene/SceneRenderer.js","updated":"","headings":["scene/SceneRenderer.js","Classes","class SceneRenderer","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize renderer Begin render pass End render pass Render grid Get render pass Get device <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4160a2117e3b43758eed5f8ab6a2528111fd195b05ab8262db86ad13a8b972ad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/scene/TrackingCamera.md::0000","path":"agi/reference/scene/TrackingCamera.md","title":"scene/TrackingCamera.js","description":"","kind":"reference","source":"agi/scene/TrackingCamera.js","updated":"","headings":["scene/TrackingCamera.js","Classes","class TrackingCamera","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Tracking Camera Smooth camera that follows the ragdoll Method Signature Summary Set camera position Set look at target Set target to track Update camera position Reset camera Get camera position Get look at target Get view matrix Compute look at matrix Vector operations Set camera offset Set smoothing factor <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"6dd8c2c426dcfe9da55d4a1c36d4cecac2cde34e8f565679f40017d10c0ba21b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/scene/TrainingScene.md::0000","path":"agi/reference/scene/TrainingScene.md","title":"scene/TrainingScene.js","description":"","kind":"reference","source":"agi/scene/TrainingScene.js","updated":"","headings":["scene/TrainingScene.js","Classes","class TrainingScene","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize scene Spawn ragdoll in scene Reset scene for new episode Update scene physics Render scene Get ragdoll Get camera Enable/disable debug visualization <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"78e5a3b6412a794395c46ff5430a56c9ae4fdbec5d63313f34d6dc9df08f709c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/studio/core/StudioApp.md::0000","path":"agi/reference/studio/core/StudioApp.md","title":"studio/core/StudioApp.js","description":"","kind":"reference","source":"agi/studio/core/StudioApp.js","updated":"","headings":["studio/core/StudioApp.js","Classes","class StudioApp","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Studio Application Main AGI Studio workspace application Classes Method Signature Summary Initialize studio application Initialize WebGPU Resize canvas to fill viewport Setup button handlers Start training Pause training Reset training Auto load last folder Verify permission for directory handle Show last folder hint in file browser Browse folder Load files from folder Update file list display Scroll files Load model from browser Auto load last model Save last folder handle to IndexedDB (for model loading) Get last folder handle from IndexedDB (for model loading) Clear last folder handle from IndexedDB Save last save folder handle to IndexedDB (for training data) Get last save folder handle from IndexedDB (for training data) Save last loaded model name to IndexedDB Get last loaded model name from IndexedDB Open IndexedDB Toggle metrics overlay visibility Update metrics display Start render loop Load ragdoll model (VRM/GLB) from folder Show model picker overlay Select and load model Save training data to folder Write file to directory Helper to download a file Toggle mesh visibility on/off Toggle particle emission on/off Get controller Get scene <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next","contentHash":"becf3f3ef1cb0871b887155fbc38f26c318744d227b790b49db13461cc5a1469"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/studio/core/StudioApp.md::0001","path":"agi/reference/studio/core/StudioApp.md","title":"studio/core/StudioApp.js","description":"","kind":"reference","source":"agi/studio/core/StudioApp.js","updated":"","headings":["studio/core/StudioApp.js","Classes","class StudioApp","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":1,"chunkCount":2,"text":"→ action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"9d499cebea2d54e2c7547eb82dfb0bf89d60ffa33b9f354baaf4767907d67c51"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/studio/core/StudioDirectoryHandleStore.md::0000","path":"agi/reference/studio/core/StudioDirectoryHandleStore.md","title":"studio/core/StudioDirectoryHandleStore.js","description":"","kind":"reference","source":"agi/studio/core/StudioDirectoryHandleStore.js","updated":"","headings":["studio/core/StudioDirectoryHandleStore.js","Classes","class AGIStudioHandleStoreError extends Error","class StudioDirectoryHandleStore","Functions","isAGIStudioDirectoryHandle(value)","agiStudioDirectoryHandleCurrentKey(slot)","prepareAGIStudioDirectoryHandleRecord(value, expectedSlot)","Constants","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Versioned IndexedDB owner for AGI Studio directory handles. Classes Method Signature Summary Method Signature Summary Functions Validate a raw v1 handle or exact v2 envelope without serializing the handle. Constants — Versioned IndexedDB owner for AGI Studio directory handles. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"4e5a582132e004a569e2b8591906b17328b708724664fc83990f6cf80fd14061"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/studio/main.md::0000","path":"agi/reference/studio/main.md","title":"studio/main.js","description":"","kind":"reference","source":"agi/studio/main.js","updated":"","headings":["studio/main.js","Exports","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1516818f8f2109a2892e58cdb76bf56ad62a56a4755f20045b2ff7a81e7328c5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/studio/ui/LoadingProgress.md::0000","path":"agi/reference/studio/ui/LoadingProgress.md","title":"studio/ui/LoadingProgress.js","description":"","kind":"reference","source":"agi/studio/ui/LoadingProgress.js","updated":"","headings":["studio/ui/LoadingProgress.js","Classes","class LoadingProgress","Constants","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Loading Progress UI Shows what's loading and progress Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1aa285dd7b93851ce39d254caa04a5854ee635a1d74869d6299a62ca38f729e0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/ComputeGraph.md::0000","path":"agi/reference/tensor/ComputeGraph.md","title":"tensor/ComputeGraph.js","description":"","kind":"reference","source":"agi/tensor/ComputeGraph.js","updated":"","headings":["tensor/ComputeGraph.js","Classes","class ComputeGraph","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Compute Graph Manages operation chaining and execution order for tensor operations Method Signature Summary Add operation node to graph Topological sort to determine execution order Execute the compute graph Clear graph state Reset entire graph Get node by ID Get all nodes Visualize graph structure <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"79ed5f1ed1275bd8329940499e745cd3bae7db5f7c83dd5800537bfbce6a23c5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/GradientTape.md::0000","path":"agi/reference/tensor/GradientTape.md","title":"tensor/GradientTape.js","description":"","kind":"reference","source":"agi/tensor/GradientTape.js","updated":"","headings":["tensor/GradientTape.js","Classes","class GradientTape","class GradientContext","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Gradient Tape Automatic Differentiation Records operations for backward pass computation Method Signature Summary Start recording operations Stop recording operations Record an operation Compute gradients via backpropagation Get gradient for a tensor Clear all recorded operations and gradients Helper: Create tensor of ones with same shape Helper: Add two tensors (for gradient accumulation) Context manager for gradient tape Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"abd8d0b4fae8f6ce3bbb82bfe416d5ee42c4b108845d7bc370ff670c418e6e26"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/Tensor.md::0000","path":"agi/reference/tensor/Tensor.md","title":"tensor/Tensor.js","description":"","kind":"reference","source":"agi/tensor/Tensor.js","updated":"","headings":["tensor/Tensor.js","Classes","class Tensor","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GPU resident float32 tensor with explicit readback and ownership. Classes GPU resident float32 tensor with explicit readback and ownership. Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1aeeaf9703929e599c5a66a1ff35a08f6af1c9dbfd2f552315459bd5e928fcbb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/TensorCache.md::0000","path":"agi/reference/tensor/TensorCache.md","title":"tensor/TensorCache.js","description":"","kind":"reference","source":"agi/tensor/TensorCache.js","updated":"","headings":["tensor/TensorCache.js","Classes","class TensorCache","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Tensor Cache Memory Management for GPU Tensors Manages tensor buffer lifecycle and memory reuse Method Signature Summary Get or create a buffer for tensor Release a buffer (mark as inactive but keep in cache) Evict oldest unused buffer Clear all cached buffers Get cache statistics Compact cache by removing inactive buffers Generate cache key from tensor properties <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"d6156bc39147eb4e22321e7fc3cdcac6893c70e928b8ca281b699860e9f1253d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/TensorOps.md::0000","path":"agi/reference/tensor/TensorOps.md","title":"tensor/TensorOps.js","description":"","kind":"reference","source":"agi/tensor/TensorOps.js","updated":"","headings":["tensor/TensorOps.js","Classes","class TensorOps","Notes & Examples","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GPU resident float32 elementwise and reduction operations. Method Signature Summary <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"aabafc8e615fddec493a3336ec979c3bde60d78f574d3072f79eff2be730076c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/TensorOpsAdvanced.md::0000","path":"agi/reference/tensor/TensorOpsAdvanced.md","title":"tensor/TensorOpsAdvanced.js","description":"","kind":"reference","source":"agi/tensor/TensorOpsAdvanced.js","updated":"","headings":["tensor/TensorOpsAdvanced.js","Classes","class TensorOpsAdvanced","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Softmax activation softmax(x) = exp(x max(x)) / sum(exp(x max(x))) Layer Normalization LayerNorm(x) = gamma (x mean) / sqrt(var + eps) + beta Dropout randomly zero out elements during training Exponential function Square root Mean reduction along axis Sum reduction along axis Max reduction along axis Add scalar to tensor Divide tensor by scalar GELU activation GELU(x) = 0.5 x (1 + tanh(sqrt(2/π) (x + 0.044715 x^3))) Clip values to range [min, max] <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"240e8fd42d4c5f7e243d0a54079b7a5679c1d724606f660787a02188f95b11cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/shaders/activation.md::0000","path":"agi/reference/tensor/shaders/activation.md","title":"tensor/shaders/activation.js","description":"","kind":"reference","source":"agi/tensor/shaders/activation.js","updated":"","headings":["tensor/shaders/activation.js","Functions","createActivationShader(activationType = 'relu', workgroupSize = 256)","createActivationDerivativeShader(activationType = 'relu', workgroupSize = 256)","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Activation Function Compute Shaders ReLU, Tanh, Sigmoid, and their derivatives <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"3785388ea355ebc59048a324115acc3501ec0cb89879f1fd14f5cc28dffbbd62"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/shaders/matmul.md::0000","path":"agi/reference/tensor/shaders/matmul.md","title":"tensor/shaders/matmul.js","description":"","kind":"reference","source":"agi/tensor/shaders/matmul.js","updated":"","headings":["tensor/shaders/matmul.js","Functions","createMatmulShader(workgroupSize = 8)","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Matrix Multiplication Compute Shader C = A B where A is [M x K] and B is [K x N] <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"1435cfe4049a29c209da7327007031356fe1522f8eeaa2e9b717f3244100fef0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/tensor/shaders/reduction.md::0000","path":"agi/reference/tensor/shaders/reduction.md","title":"tensor/shaders/reduction.js","description":"","kind":"reference","source":"agi/tensor/shaders/reduction.js","updated":"","headings":["tensor/shaders/reduction.js","Functions","createSumReductionShader(workgroupSize = 256)","createMaxReductionShader(workgroupSize = 256)","createMeanReductionShader(workgroupSize = 256)","createSoftmaxShader(workgroupSize = 256)","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Reduction Operations Compute Shaders Sum, Max, Min reductions along axes <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"a23addbee2994b154c6769d1ca003956eb2edb580d74093b5e8475f5654a1234"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/ui/MetricsDisplay.md::0000","path":"agi/reference/ui/MetricsDisplay.md","title":"ui/MetricsDisplay.js","description":"","kind":"reference","source":"agi/ui/MetricsDisplay.js","updated":"","headings":["ui/MetricsDisplay.js","Classes","class MetricsDisplay","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Metrics Display Real time training statistics display Method Signature Summary Initialize display Create metrics elements Create metric row Update metrics Destroy display <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"ae6d60e42d46bb42ecdcaaab26221d3fb132a9d984f1574ecdae3716bda7c842"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/reference/ui/TrainingUI.md::0000","path":"agi/reference/ui/TrainingUI.md","title":"ui/TrainingUI.js","description":"","kind":"reference","source":"agi/ui/TrainingUI.js","updated":"","headings":["ui/TrainingUI.js","Classes","class TrainingUI","Notes & Examples","Where this fits in the training loop","Where this fits in the training loop"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Training UI Main control panel for training interface Method Signature Summary Initialize UI Create control buttons Create button element Toggle training Start training loop Reset training Save model Load model Update metrics display Destroy UI <! HUMAN NOTES Notes & Examples Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. See also: AGI Training Guide · AGI Architecture Where this fits in the training loop AGI runs an observation → brain → action → reward loop each tick: observations are gathered from the world, a brain maps them to actions, the rig applies motion, and rewards shape the next update. Example: Minimal training loop See also: AGI Training Guide · AGI Architecture","contentHash":"e57db2a4df8fc005512e17377248869c5b50b40b54a5c6af2423ca965afa17aa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/training-guide.md::0000","path":"agi/training-guide.md","title":"AGI Training Guide","description":"How to train the parasite rig from standing to full locomotion across seven curriculum stages, plus fixes for common problems.","kind":"guide","source":"MD/agi/training-guide.md","updated":"2026-06-05","headings":["AGI Training Guide","Curriculum stages","The training loop","Tuning tips","Troubleshooting","See also"],"chunkIndex":0,"chunkCount":2,"text":"How to train the parasite rig from standing to full locomotion across seven curriculum stages, plus fixes for common problems. AGI Training Guide How to train the parasite rig from standing to full locomotion, and how to fix common problems. Condensed from and . Curriculum stages Training uses curriculum learning with 7 progressive stages. The advances automatically as criteria are met. Stage Approx. time Goal 1 Standing 1–2 h Stand upright for 10 s 2 Balance Recovery 2–3 h Recover from random perturbations 3 Walking Forward 4–6 h Walk at 1 m/s sustained 4 Directional Control 6–8 h Walk toward target positions 5 Obstacle Navigation 8–12 h Navigate around obstacles 6 Dynamic Terrain 12–16 h Walk on slopes up to 30° 7 Full Locomotion 16–24 h Run, jump, turn, crouch Total: 24–72 h for complete mastery. The training loop Each step: 1. reads the ragdoll into a 12D observation. 2. The policy network outputs a 17D action. 3. applies the action as bone impulses. 4. PBD physics advances; scores the result. 5. Experience is buffered (with GAE); updates the policy. Tuning tips Reward shaping — adjust weights in (or the Studio Reward editor). Increasing the uprightness weight helps early stages. Buffer/batch size — larger buffers stabilize updates but use more memory. Curriculum pacing — if a stage stalls, verify its advancement criteria before moving on. Troubleshooting Ragdoll not learning? Confirm WebGPU is available in the browser. Verify physics is running at 60 FPS. Increase the uprightness reward weight. Performance issues? Close other browser tabs. Reduce buffer size (default 2048). Disable debug visualizations. Check GPU utilization. Browser crashes? Reduce buffer size. Clear the tensor cache. Save the model frequently. See also AGI Getting Started. AGI Architecture. AGI","contentHash":"d03100ce6e6e4d9873ea20cb9b154adbaeea50f2cf795b189b6c57169d01a4c2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"agi/training-guide.md::0001","path":"agi/training-guide.md","title":"AGI Training Guide","description":"How to train the parasite rig from standing to full locomotion across seven curriculum stages, plus fixes for common problems.","kind":"guide","source":"MD/agi/training-guide.md","updated":"2026-06-05","headings":["AGI Training Guide","Curriculum stages","The training loop","Tuning tips","Troubleshooting","See also"],"chunkIndex":1,"chunkCount":2,"text":"GPU utilization. Browser crashes? Reduce buffer size. Clear the tensor cache. Save the model frequently. See also AGI Getting Started. AGI Architecture. AGI API Reference — , , .","contentHash":"c71676518711175d169b29af366252ed0688edabdd3762a6dc5c3587a4ee8b96"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"api/index.md::0000","path":"api/index.md","title":"API Reference","description":"Entry point to the stack's API — public entry points, the auto-generated per-symbol reference for each subsystem, and the curated public API maps.","kind":"guide","source":"MD/api/index.md","updated":"2026-06-05","headings":["API Reference","Public entry points","Per-subsystem reference","Machine-readable catalog"],"chunkIndex":0,"chunkCount":2,"text":"Entry point to the stack's API — public entry points, the auto-generated per-symbol reference for each subsystem, and the curated public API maps. API Reference The stack's API is documented in two complementary forms: Curated public API maps — hand authored tables of the common exports for each subsystem, on the Capabilities page. Auto generated per symbol reference — generated from source by and browsable per subsystem (use the sidebar API Reference groups, or the links below). Public entry points Surface Import Notes Engine (source) All engine exports — math, ECS, render, sim, GPU, gameplay, saves. Engine (compiled) / After loading a built bundle. Plauna UI framework — app, widgets, services. AGI Core Training, observations, rewards, brains, motion. Editor Editor app orchestration + . See Engine Stack Usage for source mode vs bundle mode loading patterns. Per subsystem reference Each subsystem ships a generated, per file symbol reference (browse via the sidebar API Reference group under each section): Engine — overview, reference under . Editor — overview, reference under . Plauna — overview, reference under . AGI — overview, reference under . WebGPU OS — overview, reference under . The reference is hybrid : signatures are regenerated from source on every run, while hand authored notes below the marker are preserved. See the API Reference Standard. Machine readable catalog Agents and tools should start with . It combines all subsystem indexes and records the exact source path, source server import specifier, source SHA 256, detected exports, signatures, and summaries when the source JSDoc provides them. Its object quantifies missing module and export prose instead of filling gaps with invented descriptions. The per subsystem files use the same record shape and remain","contentHash":"a3b49236552bba682701cb002873693dd69bbcaa5590bde2c8fefae1b05892fb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"api/index.md::0001","path":"api/index.md","title":"API Reference","description":"Entry point to the stack's API — public entry points, the auto-generated per-symbol reference for each subsystem, and the curated public API maps.","kind":"guide","source":"MD/api/index.md","updated":"2026-06-05","headings":["API Reference","Public entry points","Per-subsystem reference","Machine-readable catalog"],"chunkIndex":1,"chunkCount":2,"text":"quantifies missing module and export prose instead of filling gaps with invented descriptions. The per subsystem files use the same record shape and remain compatible with the documentation viewer. The catalog's contract distinguishes source mode from compiled mode: absolute module imports assume is serving the repository root, while the compact production site may expose only generated bundles. For incremental indexing, use . Each line contains one module or detected export and repeats the source path, import specifier, and source hash required to verify its context. Use when the task needs bounded prose from guides and generated references without loading the full search index. Both feeds have byte identical copies at the site root and in . The catalog describes ES modules, not an HTTP API. Do not infer REST endpoints, request schemas, or behavior that is absent from the linked source. Regenerate the catalog with followed by .","contentHash":"200626ec3583216f697d6c847d4235956b0954eeb87e229130a9712354bb4b86"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md::0000","path":"archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md","title":"APPFORGE IMPLEMENTATION PLAN","description":"","kind":"guide","source":"MD/archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md","updated":"","headings":["APPFORGE IMPLEMENTATION PLAN","1. Execution Rules","2. Phase Dependency Order","2.1 Current Implementation Status","2.2 App-Owned Migration Strategy","3. Phase 0: Baseline Guard","Deliverables","Verification","4. Phase 1: Registry Foundation","New Folders And Files","Required APIs","Definition Types","Implementation Steps","Acceptance Criteria","5. Phase 2: Tags And Scoring","New Folders And Files","Required Namespaces","Implementation Steps","Acceptance Criteria","6. Phase 3: Service Container","New Folders And Files","Required APIs","Initial Service IDs","Implementation Steps","Acceptance Criteria","7. Phase 4: Context Graph","New Folders And Files","Required APIs","Initial Node Types","Implementation Steps","Acceptance Criteria","8. Phase 5: Command Objects","Files To Modify","Command Shape","Implementation Steps","Acceptance Criteria","9. Phase 6: Layout Zones","Folders And Files To Add Or Modify","Required Zones","Implementation Steps","Acceptance Criteria","10. Phase 7: Blueprints And AppFactory","New Folders And Files","Required APIs","Implementation Steps","Acceptance Criteria","11. Phase 8: Terminal Service","Files To Add Or Modify","Required State","Implementation Steps","Acceptance Criteria","12. Phase 9: Package Exports","Files To Modify","Package Metadata","Implementation Steps","Acceptance Criteria","Implementation Notes","13. Phase 10: Timeline And Lenses","New Folders And Files","Implementation Steps","Acceptance Criteria","Implementation Notes","14. Phase 11: Visual Builder And Starter Packs","Deliverables","Acceptance Criteria","Implementation Notes","15. Global Test Matrix","16. First Coding Sprint","Implemented Sprint Files","Optional Future Hardening","Active Non-Goals","Current Done Evidence","17. Stop Conditions","18. Definition Of Done"],"chunkIndex":0,"chunkCount":3,"text":"<! SPDX FileCopyrightText: 2026 Jake Wehmeier (BTSpaniel) <https://github.com/BTSpaniel SPDX License Identifier: LicenseRef ParticleRealms Alpha APPFORGE IMPLEMENTATION PLAN This document operationalizes . It is the execution checklist for building AppForge into the current WebGPU OS without replacing the existing kernel, app registry, package manager, permissions, shell, or Plauna panel stack. 1. Execution Rules Preserve current WebGPU OS boot behavior at every phase. Keep as the app manifest registry. Add AppForge as a part registry and assembly layer. Keep the existing permission engine canonical. Keep current package trust and sandbox checks. Do not add Node.js, npm, or package lock files. Use browser ES modules and Python tooling only. Do not edit vendored, generated, binary, or third party paths. Add SPDX headers to new source files. Every phase must be independently testable before moving forward. 2. Phase Dependency Order Order Phase Depends On Output 0 Baseline Guard none Known good boot and command baseline 1 Registry Foundation baseline AppForge part registry 2 Tags And Scoring registry Deterministic semantic query engine 3 Service Container registry facade 4 Context Graph services Provides/consumes state graph 5 Command Objects registry, services, context Registered command contract 6 Layout Zones registry, context AppForge workspace zones 7 Blueprints And AppFactory registry, tags, layout Deterministic workspace assembly 8 Terminal Service services, context, commands Persistent terminal sessions 9 Package Exports registry, permissions AppForge package part exports 10 Timeline And Lenses context, layout, commands Replayable workspace history and alternate views 11 Visual Builder And Packs all prior User facing composition tools Do not skip phases. Later","contentHash":"af2c28765ff9e45d77385e58631d929b32c92cf64c90646ef6316c32db116028"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md::0001","path":"archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md","title":"APPFORGE IMPLEMENTATION PLAN","description":"","kind":"guide","source":"MD/archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md","updated":"","headings":["APPFORGE IMPLEMENTATION PLAN","1. Execution Rules","2. Phase Dependency Order","2.1 Current Implementation Status","2.2 App-Owned Migration Strategy","3. Phase 0: Baseline Guard","Deliverables","Verification","4. Phase 1: Registry Foundation","New Folders And Files","Required APIs","Definition Types","Implementation Steps","Acceptance Criteria","5. Phase 2: Tags And Scoring","New Folders And Files","Required Namespaces","Implementation Steps","Acceptance Criteria","6. Phase 3: Service Container","New Folders And Files","Required APIs","Initial Service IDs","Implementation Steps","Acceptance Criteria","7. Phase 4: Context Graph","New Folders And Files","Required APIs","Initial Node Types","Implementation Steps","Acceptance Criteria","8. Phase 5: Command Objects","Files To Modify","Command Shape","Implementation Steps","Acceptance Criteria","9. Phase 6: Layout Zones","Folders And Files To Add Or Modify","Required Zones","Implementation Steps","Acceptance Criteria","10. Phase 7: Blueprints And AppFactory","New Folders And Files","Required APIs","Implementation Steps","Acceptance Criteria","11. Phase 8: Terminal Service","Files To Add Or Modify","Required State","Implementation Steps","Acceptance Criteria","12. Phase 9: Package Exports","Files To Modify","Package Metadata","Implementation Steps","Acceptance Criteria","Implementation Notes","13. Phase 10: Timeline And Lenses","New Folders And Files","Implementation Steps","Acceptance Criteria","Implementation Notes","14. Phase 11: Visual Builder And Starter Packs","Deliverables","Acceptance Criteria","Implementation Notes","15. Global Test Matrix","16. First Coding Sprint","Implemented Sprint Files","Optional Future Hardening","Active Non-Goals","Current Done Evidence","17. Stop Conditions","18. Definition Of Done"],"chunkIndex":1,"chunkCount":3,"text":"layout, commands Replayable workspace history and alternate views 11 Visual Builder And Packs all prior User facing composition tools Do not skip phases. Later phases may stub data fixtures only in tests, never in runtime code. 2.1 Current Implementation Status Phase Status Evidence 1 Registry Foundation Implemented , , , 2 Tags And Scoring Implemented , 3 Service Container Implemented , , 4 Context Graph Implemented , , 5 Command Objects Implemented Command helpers, , pipelines, Notepad and Files batches, command tooling visibility 6 Layout Zones Implemented , , , , persisted snapshots 7 Blueprints And AppFactory Implemented , , , app manifest panel import 8 Terminal Service Implemented , , , terminal syscall bridge 9 Package Exports Implemented , package manager validation/registration/remove/rollback hooks, manifest schema/docs 10 Timeline And Lenses Implemented , , , , 11 Visual Builder And Packs Implemented , , , , 2.2 App Owned Migration Strategy Keep current apps in until their AppForge equivalents are proven and the old app surfaces can be removed manually. For each migration slice: 1. Keep the app manifest and existing launch entry working. 2. Add for that app's panels, tools, commands, services, workflows, and profiles. 3. Keep any old top level AppForge files as re export shims until manual cleanup removes them. 4. Promote shared code into only after at least two apps need the same primitive. 5. Verify the app still launches through Desktop and the AppForge smoke runner still passes. Migration order remains Files, Notepad, Terminal, Paint, then admin/system apps. Files and Notepad are the first app owned migration slices. 3. Phase 0: Baseline Guard Purpose: prove the current OS still works before adding AppForge code. Deliverables Record current app manifest","contentHash":"bcb26ee33ee2deb17e456fa747d6b19a8b89cb804ad7438171608ec35fb23caa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md::0002","path":"archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md","title":"APPFORGE IMPLEMENTATION PLAN","description":"","kind":"guide","source":"MD/archive/appforge/APPFORGE_IMPLEMENTATION_PLAN.md","updated":"","headings":["APPFORGE IMPLEMENTATION PLAN","1. Execution Rules","2. Phase Dependency Order","2.1 Current Implementation Status","2.2 App-Owned Migration Strategy","3. Phase 0: Baseline Guard","Deliverables","Verification","4. Phase 1: Registry Foundation","New Folders And Files","Required APIs","Definition Types","Implementation Steps","Acceptance Criteria","5. Phase 2: Tags And Scoring","New Folders And Files","Required Namespaces","Implementation Steps","Acceptance Criteria","6. Phase 3: Service Container","New Folders And Files","Required APIs","Initial Service IDs","Implementation Steps","Acceptance Criteria","7. Phase 4: Context Graph","New Folders And Files","Required APIs","Initial Node Types","Implementation Steps","Acceptance Criteria","8. Phase 5: Command Objects","Files To Modify","Command Shape","Implementation Steps","Acceptance Criteria","9. Phase 6: Layout Zones","Folders And Files To Add Or Modify","Required Zones","Implementation Steps","Acceptance Criteria","10. Phase 7: Blueprints And AppFactory","New Folders And Files","Required APIs","Implementation Steps","Acceptance Criteria","11. Phase 8: Terminal Service","Files To Add Or Modify","Required State","Implementation Steps","Acceptance Criteria","12. Phase 9: Package Exports","Files To Modify","Package Metadata","Implementation Steps","Acceptance Criteria","Implementation Notes","13. Phase 10: Timeline And Lenses","New Folders And Files","Implementation Steps","Acceptance Criteria","Implementation Notes","14. Phase 11: Visual Builder And Starter Packs","Deliverables","Acceptance Criteria","Implementation Notes","15. Global Test Matrix","16. First Coding Sprint","Implemented Sprint Files","Optional Future Hardening","Active Non-Goals","Current Done Evidence","17. Stop Conditions","18. Definition Of Done"],"chunkIndex":2,"chunkCount":3,"text":"migration slices. 3. Phase 0: Baseline Guard Purpose: prove the current OS still works before adding AppForge code. Deliverables Record current app manifest count from . Record current OS boot entry points: Record current launch path: Add no source changes in this phase unless a baseline test already exists and needs a non behavioral documentation update. Verification Manual browser checks: Desktop boots at . Files opens. Terminal opens. Notepad opens. Paint opens. Package manager opens. Permission manager opens. Exit gate: current behavior is understood and reproducible. 4. Phase 1: Registry Foundation Purpose: add the AppForge part registry without changing current app launch. New Folders And Files Required AP","contentHash":"301a2f82c7109c60d19b20cda3e54769f26b900bbea80150f644bfd31264f83d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/APPFORGE_SUPER_PLAN.md::0000","path":"archive/appforge/APPFORGE_SUPER_PLAN.md","title":"APPFORGE SUPER PLAN","description":"","kind":"guide","source":"MD/archive/appforge/APPFORGE_SUPER_PLAN.md","updated":"","headings":["APPFORGE SUPER PLAN","1. Executive Decision","2. Scan Basis","3. Current Codebase Map","3.1 OS Kernel And Runtime","3.2 Shell And Plauna","3.3 Existing Apps And Reusable Parts","4. Reuse Inventory","4.1 Core Services","4.2 UI And Panel Hosting","4.3 Files","4.4 Terminal","4.5 Notepad","4.6 Paint","4.7 Packages And Trust","5. Refactor And Build Matrix","6. Public Interfaces To Add","6.1 Registry","6.2 SDK Helpers","6.3 AppFactory","6.4 ContextGraph","6.5 ServiceContainer","6.6 Registered Command Shape","7. Tag Model","7.1 Required Namespaces","7.2 Scoring","8. Layout Model","8.1 Zones","8.2 Zone Features","8.3 Desktop Integration","9. Blueprint Model","10. Terminal Refactor","11. Command Refactor","12. Permission Strategy","13. Sandbox Strategy","14. Package Strategy","15. Starter Packs","16. Implementation Phases","Phase 1: Registry Foundation","Phase 2: Services And Context","Phase 3: Command Objects","Phase 4: Layout Engine","Phase 5: AppFactory And Blueprints","Phase 6: Terminal Service","Phase 7: Package Exports","Phase 8: Timeline, Lenses, Builder, Packs","17. Test Plan","17.1 Static Tests","17.2 Unit Tests","17.3 Integration Tests","17.4 Regression Commands","17.5 Security Tests","18. Risks And Controls","19. Immediate Next Work","20. Final Decision"],"chunkIndex":0,"chunkCount":3,"text":"<! SPDX FileCopyrightText: 2026 Jake Wehmeier (BTSpaniel) <https://github.com/BTSpaniel SPDX License Identifier: LicenseRef ParticleRealms Alpha APPFORGE SUPER PLAN 1. Executive Decision AppForge OS should be implemented as a deterministic refactor layer over the existing WebGPU OS stack, not as a replacement. The repository already has the hard operating system pieces that AppForge needs: A kernel bootstrap and service owner. An app discovery and launch path. A package manager with trust, verification, rollback, and built in sync. A permission system with default deny syscall guards. A desktop shell with window hosting and app lifecycle. Plauna panels, workspaces, DOM/GPU panel primitives, and layout primitives. Many reusable apps and domain modules: Files, Terminal, Notepad, Paint, package managers, permission managers, log/service monitors, GPU demos, editor tools, and AGI tools. The missing AppForge layer is a unified semantic runtime: A registry for all app building parts. Namespaced tags and deterministic scoring. A context graph for provides/consumes wiring. A service container facade. An app factory that assembles blueprints into running workspaces. A zone layout system with docking, tabs, layout diffs, and restoration. First class registered commands, tools, panels, services, workflows, themes, packages, and blueprints. The guiding rule is simple: reuse the current OS primitives wherever they are already correct, then refactor them into AppForge contracts. 2. Scan Basis Repository root: Git snapshot inspected: Worktree state during scan: dirty; existing user changes must be preserved. Attached briefing reviewed: AppForge tag semantic deterministic assembly plan. Session memory found: Targeted scan: 35 core/app/source/doc files, 38 app manifests, and broad repo","contentHash":"b0abe781f1055496e9581064a59e7df024d3b5798c0e771822d3cfc8e4c05aeb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/APPFORGE_SUPER_PLAN.md::0001","path":"archive/appforge/APPFORGE_SUPER_PLAN.md","title":"APPFORGE SUPER PLAN","description":"","kind":"guide","source":"MD/archive/appforge/APPFORGE_SUPER_PLAN.md","updated":"","headings":["APPFORGE SUPER PLAN","1. Executive Decision","2. Scan Basis","3. Current Codebase Map","3.1 OS Kernel And Runtime","3.2 Shell And Plauna","3.3 Existing Apps And Reusable Parts","4. Reuse Inventory","4.1 Core Services","4.2 UI And Panel Hosting","4.3 Files","4.4 Terminal","4.5 Notepad","4.6 Paint","4.7 Packages And Trust","5. Refactor And Build Matrix","6. Public Interfaces To Add","6.1 Registry","6.2 SDK Helpers","6.3 AppFactory","6.4 ContextGraph","6.5 ServiceContainer","6.6 Registered Command Shape","7. Tag Model","7.1 Required Namespaces","7.2 Scoring","8. Layout Model","8.1 Zones","8.2 Zone Features","8.3 Desktop Integration","9. Blueprint Model","10. Terminal Refactor","11. Command Refactor","12. Permission Strategy","13. Sandbox Strategy","14. Package Strategy","15. Starter Packs","16. Implementation Phases","Phase 1: Registry Foundation","Phase 2: Services And Context","Phase 3: Command Objects","Phase 4: Layout Engine","Phase 5: AppFactory And Blueprints","Phase 6: Terminal Service","Phase 7: Package Exports","Phase 8: Timeline, Lenses, Builder, Packs","17. Test Plan","17.1 Static Tests","17.2 Unit Tests","17.3 Integration Tests","17.4 Regression Commands","17.5 Security Tests","18. Risks And Controls","19. Immediate Next Work","20. Final Decision"],"chunkIndex":1,"chunkCount":3,"text":"AppForge tag semantic deterministic assembly plan. Session memory found: Targeted scan: 35 core/app/source/doc files, 38 app manifests, and broad repo searches across , , , and . No runtime LLM planner should be added. AppForge selection must remain deterministic, inspectable, and reproducible. 3. Current Codebase Map 3.1 OS Kernel And Runtime Central kernel bootstrap and service owner. Owns GPU initialization, scheduler, event bus, process table, permissions, virtual filesystem, surfaces, VRAM tracking, drivers, schema registry, package manager, trust store, theme engine, session store, tool driver, syscalls, and built in commands. This should become the backing runtime for AppForge services. Discovers app manifests from . Validates app manifests and supports packaged app registration. Current scope is app level only. AppForge needs a broader registry for every reusable part. Registers, aliases, dispatches, lists, and logs commands. Already supports dot namespaced command IDs and history. Needs AppForge command object metadata: tags, inputs, outputs, permissions, undo behavior, risk, and pipeline compatibility. Provides capability checks, manifest registration, grants, revokes, requests, audit logging, and persistence. Should remain canonical. AppForge permission names should map into this existing model. Handles install, remove, update, verify, repair, rollback, built in sync, trust tiers, execution policy, provenance, integrity, and package app registration. Should be extended to export/import AppForge parts. Provides iframe based isolation for untrusted packages. Should become the sandbox foundation for AppForge package parts. Applies, previews, imports, exports, and emits theme changes. Should be exposed as a registered theme service. Allocates WebGPU surfaces to","contentHash":"1517e47703ee0768877ef4cd1a93b8e65ccf36a2b38b83b8cefbf2591ac10ffe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/APPFORGE_SUPER_PLAN.md::0002","path":"archive/appforge/APPFORGE_SUPER_PLAN.md","title":"APPFORGE SUPER PLAN","description":"","kind":"guide","source":"MD/archive/appforge/APPFORGE_SUPER_PLAN.md","updated":"","headings":["APPFORGE SUPER PLAN","1. Executive Decision","2. Scan Basis","3. Current Codebase Map","3.1 OS Kernel And Runtime","3.2 Shell And Plauna","3.3 Existing Apps And Reusable Parts","4. Reuse Inventory","4.1 Core Services","4.2 UI And Panel Hosting","4.3 Files","4.4 Terminal","4.5 Notepad","4.6 Paint","4.7 Packages And Trust","5. Refactor And Build Matrix","6. Public Interfaces To Add","6.1 Registry","6.2 SDK Helpers","6.3 AppFactory","6.4 ContextGraph","6.5 ServiceContainer","6.6 Registered Command Shape","7. Tag Model","7.1 Required Namespaces","7.2 Scoring","8. Layout Model","8.1 Zones","8.2 Zone Features","8.3 Desktop Integration","9. Blueprint Model","10. Terminal Refactor","11. Command Refactor","12. Permission Strategy","13. Sandbox Strategy","14. Package Strategy","15. Starter Packs","16. Implementation Phases","Phase 1: Registry Foundation","Phase 2: Services And Context","Phase 3: Command Objects","Phase 4: Layout Engine","Phase 5: AppFactory And Blueprints","Phase 6: Terminal Service","Phase 7: Package Exports","Phase 8: Timeline, Lenses, Builder, Packs","17. Test Plan","17.1 Static Tests","17.2 Unit Tests","17.3 Integration Tests","17.4 Regression Commands","17.5 Security Tests","18. Risks And Controls","19. Immediate Next Work","20. Final Decision"],"chunkIndex":2,"chunkCount":3,"text":"package parts. Applies, previews, imports, exports, and emits theme changes. Should be exposed as a registered theme service. Allocates WebGPU surfaces to panels and tracks VRAM quota. Should back registered GPU panels. Tracks running apps, panels, process like metadata, and resource estimates. Should back AppForge process/session visibility. Provides command palette search over apps, commands, and providers. Should be reused for registry search and discovery. Provides OS native tool registration and execution for tool callers. Should inform AppForge tool contract design. 3.2 Shell And Plauna Hosts app windows, launches apps, gates quarantine, applies manifest patches, creates panels, registers pro","contentHash":"e11b06981958abd10d2cb8da5ab89bd223125a785d64dc4ff2e3454abe8b7fc5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/appforge-contracts.md::0000","path":"archive/appforge/appforge-contracts.md","title":"AppForge Contracts","description":"Public contracts for the AppForge registry, tags, services, context graph, command objects, layouts, blueprints, package exports, timeline, lenses, builder, and starter packs.","kind":"guide","source":"MD/archive/appforge/appforge-contracts.md","updated":"2026-06-12","headings":["AppForge Contracts","Part Definition","Tags And Scoring","Registry","Service Container","Context Graph","Command Objects","Layout","Blueprints And AppFactory","Terminal Service","Package Exports","Timeline","Lenses","Starter Packs","Workspace Builder","AppForge Syscalls","Security Invariants"],"chunkIndex":0,"chunkCount":3,"text":"Public contracts for the AppForge registry, tags, services, context graph, command objects, layouts, blueprints, package exports, timeline, lenses, builder, and starter packs. AppForge Contracts AppForge is the deterministic assembly layer inside WebGPU OS. It does not replace the kernel, shell, package manager, permission model, or current apps. It registers reusable parts, scores them with tags, assembles blueprints into workspace layouts, records workspace history, and exposes builder tooling. Primary source files: Part Definition Every registered part is a plain object. The shared definition validator accepts these part types: Required fields: Field Meaning Dot or dash namespaced ID that starts with a lowercase letter. One of the supported AppForge part types. Human readable title. Semver like string. Defaults to when omitted. Common optional fields: Field Meaning Human readable summary. Namespaced semantic tags. Capabilities or outputs this part offers. Context, service, or capability dependencies. OS permissions this part needs. / Structured command or tool IO metadata. Numeric scoring tiebreaker. Plain object describing lifecycle hooks or module entry data. Provenance metadata such as app manifest, package export, or starter pack. Part specific metadata. Definitions are cloned on public reads. Callers should treat returned values as snapshots, not live registry objects. Tags And Scoring Tags use form. Supported namespaces are: Examples: uses deterministic scoring from tags, type, zone affinity, permissions, available context, co occurrence data, and risk filters. It returns scored candidates with explanation strings. Registry is the source of truth for reusable AppForge parts. Public API: Rules: Duplicate IDs are rejected unless the caller unregisters the prior","contentHash":"ad9071285504fa12f6d31612b89cb26910ddef9a88d239f4c8101aba2186a1d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/appforge-contracts.md::0001","path":"archive/appforge/appforge-contracts.md","title":"AppForge Contracts","description":"Public contracts for the AppForge registry, tags, services, context graph, command objects, layouts, blueprints, package exports, timeline, lenses, builder, and starter packs.","kind":"guide","source":"MD/archive/appforge/appforge-contracts.md","updated":"2026-06-12","headings":["AppForge Contracts","Part Definition","Tags And Scoring","Registry","Service Container","Context Graph","Command Objects","Layout","Blueprints And AppFactory","Terminal Service","Package Exports","Timeline","Lenses","Starter Packs","Workspace Builder","AppForge Syscalls","Security Invariants"],"chunkIndex":1,"chunkCount":3,"text":"strings. Registry is the source of truth for reusable AppForge parts. Public API: Rules: Duplicate IDs are rejected unless the caller unregisters the prior part first. and return clones. returns scored results and never mutates the registry. Existing app manifests remain in ; AppForge imports them as panel candidates with . Service Container exposes existing kernel owned services through stable IDs. Public API: Kernel provided AppForge services include: ID Backing owner Context Graph stores current OS context as directed nodes and edges. It is used for active file, selection, project, shell cwd, process, theme, panel, registry, layout, terminal, builder, and pack state. Public API: Invalidations are microtask batched. Tests that assert subscriber behavior should wait for a tick before reading callback results. Command Objects AppForge command objects promote local app actions into typed command contracts. Required shape: validates the command object, wraps it in the existing , and exposes public metadata without the handler function. Object pipelines intentionally require exact AppForge command object IDs. Layout owns serializable AppForge workspace state. It does not replace the Desktop window manager. Existing floating windows still launch through the current shell path. Required zones: Public API: is the DOM adapter that exposes AppForge zones while keeping the normal Desktop launch behavior intact. Blueprints And AppFactory A blueprint is a part that declares workspace slots. Slots can require exact parts, prefer optional parts, or select parts by wanted tags. Slot shape: resolves a blueprint and returns selections, permission summary, proposed workspace state, and layout diff without mutating live state. applies a valid preview to the live layout engine. Terminal","contentHash":"a2fc7e2698b6a96c32f2c2eb0b218a658f0735c847a07e0f17887308dcf7d01f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"archive/appforge/appforge-contracts.md::0002","path":"archive/appforge/appforge-contracts.md","title":"AppForge Contracts","description":"Public contracts for the AppForge registry, tags, services, context graph, command objects, layouts, blueprints, package exports, timeline, lenses, builder, and starter packs.","kind":"guide","source":"MD/archive/appforge/appforge-contracts.md","updated":"2026-06-12","headings":["AppForge Contracts","Part Definition","Tags And Scoring","Registry","Service Container","Context Graph","Command Objects","Layout","Blueprints And AppFactory","Terminal Service","Package Exports","Timeline","Lenses","Starter Packs","Workspace Builder","AppForge Syscalls","Security Invariants"],"chunkIndex":2,"chunkCount":3,"text":"permission summary, proposed workspace state, and layout diff without mutating live state. applies a valid preview to the live layout engine. Terminal Service backs the Terminal panel with persistent sessions. Sessions store session ID, cwd, pid, command, stdout/stderr records, exit state, history, and timestamps. The Terminal app attaches to the service and runs commands through the guarded syscall object attached to the session, not through raw kernel syscalls. Exposed syscall namespace: . Package Exports manifests may include AppForge exports: Rules: Export groups imply the part type when is omitted. Exported part permissions must be declared in package or . Export IDs cannot replace parts owned b","contentHash":"976d2d2ead3542aacd68c9c2cfea6e576faf3f06f97c447c7a275ee7f2f99fef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/architecture-overview.md::0000","path":"concepts/architecture-overview.md","title":"Architecture Overview","description":"The big picture — how the engine, editor, Plauna, AGI, and the WebGPU OS compose into one layered system.","kind":"guide","source":"MD/concepts/architecture-overview.md","updated":"2026-06-05","headings":["Architecture Overview","Layered composition","The composition rule","How the OS maps onto the subsystems","Tier framing","Tier 2 migration contract (stable surfaces)","Cross-cutting concerns"],"chunkIndex":0,"chunkCount":2,"text":"The big picture — how the engine, editor, Plauna, AGI, and the WebGPU OS compose into one layered system. Architecture Overview This page is the big picture: how the engine, editor, Plauna, AGI, and the WebGPU OS compose into one system. Read it before diving into any single subsystem. Layered composition The stack is built in reusable layers. Lower layers know nothing about higher ones; higher layers consume lower ones as libraries. The composition rule is composition glue only . It consumes , , , and as libraries and must not fork them. If something needs fixing, it is fixed upstream in the owning subsystem, not patched inside the OS layer. (Source: §4.) How the OS maps onto the subsystems The WebGPU OS does not reimplement runtime services — it reuses the engine and Plauna: OS concern Provided by Kernel / scheduler / GPU device Engine , , , , plus glue Compositor / window manager / shell Plauna , , , + Filesystem / project / packages Engine , + + IPC / events / \"syscalls\" Engine , Plauna + Intelligence layer AGI , , (Source: §3, \"Asset inventory → OS subsystems\".) Tier framing The OS is delivered in tiers; Tier 1 (browser resident) is the current implementation target: Tier What it is Status 1 — Browser resident OS Desktop like environment in a browser tab, built from the existing stack Implementation target 2 — WASM + native host Rust + Wasmtime/WASI host wrapping Dawn/wgpu, exposing capability mediated APIs Documented migration path 3 — Native microkernel Kernel + user space services around WebGPU/WGSL Research only A core decision (adopted from the research): do not put WebGPU \"in the kernel.\" In every tier the GPU service is a user space process owning validation, shader compilation, and pipeline creation; the kernel handles scheduling, memory protection, and","contentHash":"5c1496c2360f2d8a05b72da9abc8485079fe3ca07b3d60c5ec92b0062b65dd50"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/architecture-overview.md::0001","path":"concepts/architecture-overview.md","title":"Architecture Overview","description":"The big picture — how the engine, editor, Plauna, AGI, and the WebGPU OS compose into one layered system.","kind":"guide","source":"MD/concepts/architecture-overview.md","updated":"2026-06-05","headings":["Architecture Overview","Layered composition","The composition rule","How the OS maps onto the subsystems","Tier framing","Tier 2 migration contract (stable surfaces)","Cross-cutting concerns"],"chunkIndex":1,"chunkCount":2,"text":"the GPU service is a user space process owning validation, shader compilation, and pipeline creation; the kernel handles scheduling, memory protection, and device mediation only. This mirrors the browser GPU process model. Tier 2 migration contract (stable surfaces) These must survive a future Tier 2 swap, so treat them as the stable contract: App manifest — same JSON boots a Plauna panel today and a WASI sandbox tomorrow. Syscall surface ( ) — JS shape today, WASI capability table tomorrow. WGSL shaders — already portable. Capability gates — the rule graph is the Tier 1 stand in for the Tier 2 capability broker. Cross cutting concerns These topics span every subsystem and have dedicated pages: Boot Sequence — how the OS comes up. GPU Device Sharing — one device, many apps. Security & Trust Model — capabilities, trust rings, package verification. Data Flow — how state moves (ECS, save, collab). History & Evolution — why the layering looks the way it does.","contentHash":"1c84b3f70b54c7d254fea5c9897e063be59d6b25012f0fac5d93d22bc565e7cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/boot-sequence.md::0000","path":"concepts/boot-sequence.md","title":"Boot Sequence","description":"How the WebGPU OS comes up — from the HTML page to a mounted desktop — via boot.js and the bootWebGpuOS() entry point.","kind":"guide","source":"MD/concepts/boot-sequence.md","updated":"2026-06-05","headings":["Boot Sequence","Entry points","The boot phases","Kernel init order","Boot options","Failure handling","See also"],"chunkIndex":0,"chunkCount":1,"text":"How the WebGPU OS comes up — from the HTML page to a mounted desktop — via boot.js and the bootWebGpuOS() entry point. Boot Sequence How the WebGPU OS comes up, from the HTML page to a mounted desktop. This reflects and the function in . Entry points — a side effect free barrel exporting . Importing it does not auto boot, which makes it the clean entry point for the static bundler ( ). — a thin wrapper that calls on for plain ES module/dev usage. The boot phases runs these phases, updating the on screen boot status as it goes: 1. Initializing kernel — brings up kernel services against the WebGPU canvas. 2. Discovering apps — finds apps from (errors are logged as warnings, not fatal). Discovered built ins are synced into the package registry via (idempotent). 3. Loading mods — loads runtime mods from . 4. Mounting desktop shell — then . Missing shell root elements throw. 5. Optional security self tests — when is true or the URL contains : , , and run and log findings. is also exposed for on demand use. 6. Ready — the boot loader is hidden and (frozen). resolves to . Kernel init order Inside , the package/trust subsystem initializes in this order (Source: ): Because installed packages are re registered on init, installed apps survive a reload. Boot options accepts selector overrides (defaults shown): Option Default Failure handling If any phase throws, the boot status is set to , the error is logged via , and the promise rejects. App/mod discovery errors are non fatal and surface as console warnings. See also GPU Device Sharing — what the kernel sets up on the canvas. Security & Trust Model — what the boot time audits check. WebGPU OS API Reference — , , .","contentHash":"da875f8ddb745bd4e78346a05c15a9c78e56c4c8e0c5937e300159b044666be4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/data-flow.md::0000","path":"concepts/data-flow.md","title":"Data Flow","description":"How state moves through the stack — ECS state, persistence, the virtual filesystem, inter-app messaging, and optional multi-user sync.","kind":"guide","source":"MD/concepts/data-flow.md","updated":"2026-08-02","headings":["Data Flow","State lives in ECS","Persistence and the filesystem","Inter-app messaging (IPC)","Optional multi-user sync","Authoritative UI state","End-to-end example","See also"],"chunkIndex":0,"chunkCount":2,"text":"How state moves through the stack — ECS state, persistence, the virtual filesystem, inter-app messaging, and optional multi-user sync. Data Flow How state moves through the stack: ECS state, persistence, the virtual filesystem, inter app messaging, and optional multi user sync. This page orients you before the per subsystem references. State lives in ECS The engine is ECS driven : runtime state lives in components, owned by a world, and mutated by systems. Plauna defines its own UI components in a dedicated UI world (e.g. , , , , , , ). See: Engine ECS: ( , , components, systems, world). Plauna UI ECS: and + . Persistence and the filesystem The OS exposes a virtual filesystem and storage layer over browser primitives: Layer Component Backed by Virtual FS (syscall facing) , OPFS / IndexedDB Origin private files OPFS Key value / structured IndexedDB External mounts user picked dirs Caching Cache API Per app isolation scoped paths Orchestration — Engine side asset/resource loading and save go through , , and . Inter app messaging (IPC) Apps communicate through kernel mediated IPC syscalls ( / ), gated by capabilities. Lower level event buses exist in the engine ( ) and Plauna ( ), and the kernel adds buses such as , , and . Optional multi user sync For collaborative or multi user scenarios, the engine's collab mesh ( ) provides identity, integrity, presence, signaling, host migration, and scene/transform sync. State that needs to be shared is replicated over this mesh; identity and integrity are enforced by , , and . Authoritative UI state Particle State Channels connect Plauna views to ECS, CSE, or another authority. UI events become typed intents. Confirmed snapshots or merge patches return as projections. SSE is the standard downstream browser transport, paired with","contentHash":"c502c1aee101a66dd0180f2821499c741d1ae02afb2394b75681e1fec8a329dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/data-flow.md::0001","path":"concepts/data-flow.md","title":"Data Flow","description":"How state moves through the stack — ECS state, persistence, the virtual filesystem, inter-app messaging, and optional multi-user sync.","kind":"guide","source":"MD/concepts/data-flow.md","updated":"2026-08-02","headings":["Data Flow","State lives in ECS","Persistence and the filesystem","Inter-app messaging (IPC)","Optional multi-user sync","Authoritative UI state","End-to-end example","See also"],"chunkIndex":1,"chunkCount":2,"text":"UI events become typed intents. Confirmed snapshots or merge patches return as projections. SSE is the standard downstream browser transport, paired with HTTP for upstream intents. Particle signaling and BroadcastChannel remain available for peer oriented routes. (Source: , ) End to end example A note created in the Notepad app: 1. The app calls (a guarded syscall) → → . 2. The capability guard checks against the app's grants. 3. On reload, re registers the app and its sandboxed storage path persists, so the note is still there. See also GPU Device Sharing — GPU resource flow. Security & Trust Model — how the syscalls above are gated. Particle State Channels — authoritative intent and projection flow. Engine, Plauna, and WebGPU OS API References .","contentHash":"3e170997e1e78d93519b5d7e79e8a7d705711e5ca2ad23b3cafe21178d629982"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/gpu-device-sharing.md::0000","path":"concepts/gpu-device-sharing.md","title":"GPU Device Sharing","description":"The single shared WebGPU device model — one device brokered by the kernel with per-app budgets and barriers.","kind":"guide","source":"MD/concepts/gpu-device-sharing.md","updated":"2026-06-05","headings":["GPU Device Sharing","Why one device","Key components","The model","device-lost fan-out","What an app should assume","See also"],"chunkIndex":0,"chunkCount":2,"text":"The single shared WebGPU device model — one device brokered by the kernel with per-app budgets and barriers. GPU Device Sharing The whole OS runs against a single WebGPU device shared by the shell and every app. This page explains the model and where it lives. It expands the notes in . Why one device WebGPU devices are expensive and the browser already runs GPU work in a dedicated process. The OS follows the same principle: one device, brokered by the kernel, with per app budgets and barriers — rather than each app creating its own device. Design rule: the GPU service is user space, not \"in the kernel.\" The kernel mediates the device (scheduling, memory protection, fan out); validation, shader compilation, and pipeline creation happen above it. See Architecture Overview. Key components Concern Component Device acquisition + sharing Adapter/device info VRAM accounting Virtual GPU abstraction (VGPU) Multi queue submission Resource barriers engine VGPU resource barrier enforcement Device recovery Canvas bootstrap The model Single device — acquired once by the broker and handed to the VGPU abstraction. Frame loop ownership — the kernel owns the loop and allocates per app tick budgets ; apps do not each spin their own loop. Multi queue + barriers — concurrent GPU work is ordered through and resource barrier enforcement so apps don't corrupt each other's state. VRAM tracking — accounts for allocations so the OS can show usage (e.g. the GPU Manager app) and enforce limits. device lost fan out When the browser raises WebGPU's , the broker fans the event out to every app and the shell so each can release and rebuild GPU resources. Recovery logic lives in . Apps should treat their GPU resources as reconstructable and listen for the fan out rather than assuming the device is","contentHash":"57601eed8a3e9e55c9057300406d8eab45f376653117af13f518382dc3640177"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/gpu-device-sharing.md::0001","path":"concepts/gpu-device-sharing.md","title":"GPU Device Sharing","description":"The single shared WebGPU device model — one device brokered by the kernel with per-app budgets and barriers.","kind":"guide","source":"MD/concepts/gpu-device-sharing.md","updated":"2026-06-05","headings":["GPU Device Sharing","Why one device","Key components","The model","device-lost fan-out","What an app should assume","See also"],"chunkIndex":1,"chunkCount":2,"text":"GPU resources. Recovery logic lives in . Apps should treat their GPU resources as reconstructable and listen for the fan out rather than assuming the device is permanent. What an app should assume It shares the device; it must respect its tick budget and not block the frame loop. GPU resources can be lost at any time; handle the fan out. Heavy compute belongs in WebGPU compute passes, scheduled through the VGPU layer. See also Boot Sequence — when the device is acquired. Engine API Reference — . WebGPU OS API Reference — , , .","contentHash":"e07ef5db400dccb059189d289c915cdc60890db4b2125eec21eb2a4537f65709"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/history-evolution.md::0000","path":"concepts/history-evolution.md","title":"History & Evolution","description":"How the stack grew (engine to editor to Plauna to AGI to WebGPU OS) and why the subsystem boundaries sit where they do.","kind":"guide","source":"MD/concepts/history-evolution.md","updated":"2026-06-05","headings":["History & Evolution","The order of creation","1. Engine","2. Editor","3. Plauna","4. AGI","5. WebGPU OS","Why documentation stopped — and why it's being redone","Naming note"],"chunkIndex":0,"chunkCount":2,"text":"How the stack grew (engine to editor to Plauna to AGI to WebGPU OS) and why the subsystem boundaries sit where they do. History & Evolution This is the canonical story of how the stack grew. Understanding the order in which the layers appeared explains why the boundaries sit where they do — and why is glue rather than a rewrite. The order of creation 1. Engine The foundation. A pure browser, GPU first runtime: a shared WebGPU device, frame graph, ECS, rendering pipeline, simulation systems, networking, and audio. Everything else consumes it. Its development principles — no Node.js, GPU first, ECS driven, modular — propagate to every later layer. (Source: .) 2. Editor The first major application built on the engine: a scene and asset authoring IDE ( ). It established the panel/workbench patterns and the project/filesystem abstraction ( ) that Plauna and the OS later generalize. 3. Plauna A UI runtime extracted to serve UI needs the editor exposed. Plauna adds hybrid DOM/GPU rendering , DOM free text measurement, a GPU surface graph , and a dockable workbench (workspaces, panels, tabs). It integrates with the engine using the same bootstrap and VGPU patterns as the editor, and is explicitly zero dependency, no build step . (Source: .) 4. AGI An intelligence layer: a \"Doc Octavius\" style parasite rig that injects into a humanoid ragdoll and learns to control it via reinforcement learning (PPO). It ships its own WebGPU tensor library ( ), neural networks ( ), a curriculum system, and AGI Studio — a full training workspace application. (Source: .) 5. WebGPU OS The unifying layer. Rather than rebuild runtime services, it composes the engine, Plauna, AGI, and editor into a desktop like, GPU first OS in a browser tab : a kernel (syscalls, scheduling, GPU mediation,","contentHash":"c922072d2e4b2c982f2e238f70f19c12da2045ff8966793fe6fc4d3443b3b36d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/history-evolution.md::0001","path":"concepts/history-evolution.md","title":"History & Evolution","description":"How the stack grew (engine to editor to Plauna to AGI to WebGPU OS) and why the subsystem boundaries sit where they do.","kind":"guide","source":"MD/concepts/history-evolution.md","updated":"2026-06-05","headings":["History & Evolution","The order of creation","1. Engine","2. Editor","3. Plauna","4. AGI","5. WebGPU OS","Why documentation stopped — and why it's being redone","Naming note"],"chunkIndex":1,"chunkCount":2,"text":"services, it composes the engine, Plauna, AGI, and editor into a desktop like, GPU first OS in a browser tab : a kernel (syscalls, scheduling, GPU mediation, trust/permissions), a shell (desktop, taskbar, windows), a signed package system, and a runtime app catalog. (Source: .) Why documentation stopped — and why it's being redone Documentation was written per layer as each was built, then drifted as the OS absorbed everything. The result was scattered across , , , and many per component files, with overlapping and stale content. This set restructures all of it into one audience segmented source of truth, leaving the original files in place as read only references. See the Contribution Workflow for how to keep it from drifting again. Naming note Older docs and source headers may refer to the project as \"Particle Engine\" / \"Particle Engine v2\" and to game content as \"Particle Realms Online.\" These are the historical names of the engine and a game built on it; the current umbrella is the WebGPU OS stack described here.","contentHash":"2b0c34f617b3542cd64f6346e6887d3f99aa1769589689825f5246e31f102979"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/schema-evolution.md::0000","path":"concepts/schema-evolution.md","title":"Schema Evolution and Expand-Contract","description":"Repository-wide rules for evolving SQLite, JSON, browser storage, binary saves, protocols, and signed packages without destructive upgrades.","kind":"guide","source":"MD/concepts/schema-evolution.md","updated":"2026-08-08","headings":["Schema Evolution and Expand-Contract","Non-negotiable invariants","One policy, five mechanisms","Repository coverage","Relational expand-contract","Document and browser-storage evolution","Protocol evolution","Retirement gates","Deployment and rollback runbook","Adding a contract","Audit baseline"],"chunkIndex":0,"chunkCount":3,"text":"Repository-wide rules for evolving SQLite, JSON, browser storage, binary saves, protocols, and signed packages without destructive upgrades. Schema Evolution and Expand Contract Particle Realms treats every durable or independently deployed data boundary as a versioned contract. This includes SQLite tables, JSON files, browser storage, OPFS trees, binary saves, network messages, checkpoints, and signed packages. The expand contract pattern applies directly to the active SQLite service and to any storage layout shared by old and new application instances. The same safety goal applies elsewhere, but the mechanism changes with the medium: JSON uses explicit readers and pure upcasters, live protocols negotiate overlapping versions, signed artifacts use immutable generations, and disposable caches are namespaced and invalidated. The machine readable source of truth is . Its meta schema is , and checks the catalog, every first party JSON document, every formal JSON Schema, and every direct production use of browser persistence APIs. A browser storage call must be owned by a declared contract or carry one exact, reviewed classification such as primitive preference, ephemeral session state, disposable cache, storage infrastructure, or compatibility shim. Structured durable state cannot be hidden behind an exclusion. Expand contract is not a blanket rewrite rule. It is the correct mechanism for relational columns, shared browser keys, and rolling network deployments. Immutable hashed events, signed packages, procedural voxel snapshots, and disposable caches need different strategies because dual writing them would weaken integrity or manufacture a lossy conversion. Non negotiable invariants 1. Every authoritative value has a format discriminator and an explicit version. 2.","contentHash":"de05ace52265d859760e474a026d3e6cb42ba919e8d3328a1241d4ee35ee24a7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/schema-evolution.md::0001","path":"concepts/schema-evolution.md","title":"Schema Evolution and Expand-Contract","description":"Repository-wide rules for evolving SQLite, JSON, browser storage, binary saves, protocols, and signed packages without destructive upgrades.","kind":"guide","source":"MD/concepts/schema-evolution.md","updated":"2026-08-08","headings":["Schema Evolution and Expand-Contract","Non-negotiable invariants","One policy, five mechanisms","Repository coverage","Relational expand-contract","Document and browser-storage evolution","Protocol evolution","Retirement gates","Deployment and rollback runbook","Adding a contract","Audit baseline"],"chunkIndex":1,"chunkCount":3,"text":"integrity or manufacture a lossy conversion. Non negotiable invariants 1. Every authoritative value has a format discriminator and an explicit version. 2. Writers emit one declared current version. Readers may accept an ordered compatibility window. 3. Reading never silently relabels old data. A pure migration must produce the new shape and pass the new validator. 4. Unknown and future durable versions fail closed without overwriting the source. 5. Durable commits are transactional, copy on write, manifest last, or generation swapped. A partially written value is never promoted as current. 6. Rollback data remains readable until the catalog's retirement gates pass. 7. Cache records are never treated as authoritative. They may be invalidated and rebuilt. 8. Signed packages are immutable. A schema change creates a new signed generation; it never mutates an installed generation in place. One policy, five mechanisms Contract class Evolution strategy Commit boundary Unknown version SQLite authoritative data Expand, backfill, switch reads, contract One database transaction per migration or backfill batch Reject startup/readiness JSON, IndexedDB, OPFS, binary saves Read old, pure upcast in memory, validate, copy on write Verified backup, manifest last, or generation swap Reject or quarantine WebSocket, SSE, HTTP envelopes Advertise capabilities and negotiate current plus previous Acknowledged message or request transaction Protocol error; never reinterpret Signed package/export Side by side immutable generation Verify hashes/signature, then publish manifest Reject UI and derived cache Namespace by version and rebuild Replace disposable entry Invalidate Repository coverage The catalog currently records 125 independently evolving contract families. The implementation wave covers","contentHash":"ddd080dffa63bac7f17d12dbba018260fc2274bdbd0a40b2ce233589b4dfff68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/schema-evolution.md::0002","path":"concepts/schema-evolution.md","title":"Schema Evolution and Expand-Contract","description":"Repository-wide rules for evolving SQLite, JSON, browser storage, binary saves, protocols, and signed packages without destructive upgrades.","kind":"guide","source":"MD/concepts/schema-evolution.md","updated":"2026-08-08","headings":["Schema Evolution and Expand-Contract","Non-negotiable invariants","One policy, five mechanisms","Repository coverage","Relational expand-contract","Document and browser-storage evolution","Protocol evolution","Retirement gates","Deployment and rollback runbook","Adding a contract","Audit baseline"],"chunkIndex":2,"chunkCount":3,"text":"disposable entry Invalidate Repository coverage The catalog currently records 125 independently evolving contract families. The implementation wave covers the following high risk boundaries: The Python service uses ordered, checksummed SQLite migrations and transactional cursor based backfills. Physical drift checks include columns, defaults, nullability, checks, unique keys, indexes, and foreign keys. (Source: , .) Engine and Life saves use exact format readers. World WAL recovery validates the entire sequence, CRCs, entry types, coordinates, lengths, and LSN order before replay. Flush and checkpoint share one operation queue, and a failed region save cannot truncate the log. ANI motion NPZ files use bou","contentHash":"c0b811918f19a35a7f2b7b96cc14d7ad923614cad673e611f86884c3b9a3d348"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/security-model.md::0000","path":"concepts/security-model.md","title":"Security & Trust Model","description":"How the OS contains code via capability-gated apps and mods plus package trust verdicts that combine to limit untrusted code.","kind":"guide","source":"MD/concepts/security-model.md","updated":"2026-06-05","headings":["Security & Trust Model","Two enforcement layers","Capability enforcement","Permission vocabulary","Trust verdicts → capability defaults","The verification choke point","Consent & trust-on-first-use (TOFU)","Install-time execution policy","Boot-time self-audit","Audit logs","See also"],"chunkIndex":0,"chunkCount":2,"text":"How the OS contains code via capability-gated apps and mods plus package trust verdicts that combine to limit untrusted code. Security & Trust Model How the OS contains code it runs. Apps and mods are capability gated and packages carry a trust verdict ; the two combine so that untrusted code is contained even if it declares broad permissions. This page consolidates and . Two enforcement layers 1. Capabilities — a package may only call a syscall if it declared the matching permission and the user/policy granted it. 2. Trust verdict — the result of verifying the package's integrity, signature, provenance, and scan risk. The verdict can override grants (e.g. block network egress regardless of declared permissions). Capability enforcement A package declares in its manifest. At launch, wraps the panel's syscalls with . Each guarded method calls before running; missing/denied capabilities throw or prompt per policy. resolves decisions; persists grants. Permission vocabulary Capabilities are dotted strings. Declare only what you use — the consent prompt lists requested permissions. Namespace Examples Gated action , , , virtual filesystem , , , OPFS / cache / mounts , inter app messaging raw GPU device model inference , network egress , shell UI , , — package/patch management Trust verdicts → capability defaults Installed packages carry a verdict ( ): Verdict Network egress Notes (root chained) as granted full capability set available to grant (TOFU) as granted accepted by the user on first install (self signed, unpinned) no auto grant restricted; must be explicitly granted (integrity fail / high scan risk / key change) hard blocked throws on any regardless of grants This is default deny egress : it blunts credential exfiltration and worm C2 even if a malicious package","contentHash":"d868ce530091e010307c81bf3649fa8ef371c018cf531e9d710112440785aecd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/security-model.md::0001","path":"concepts/security-model.md","title":"Security & Trust Model","description":"How the OS contains code via capability-gated apps and mods plus package trust verdicts that combine to limit untrusted code.","kind":"guide","source":"MD/concepts/security-model.md","updated":"2026-06-05","headings":["Security & Trust Model","Two enforcement layers","Capability enforcement","Permission vocabulary","Trust verdicts → capability defaults","The verification choke point","Consent & trust-on-first-use (TOFU)","Install-time execution policy","Boot-time self-audit","Audit logs","See also"],"chunkIndex":1,"chunkCount":2,"text":"change) hard blocked throws on any regardless of grants This is default deny egress : it blunts credential exfiltration and worm C2 even if a malicious package declares . The verification choke point All installs route through (Source: ): Ring 0 roots live in ; handles roots + publisher pinning. Provenance is checked by and . Scanning is performed by . Consent & trust on first use (TOFU) First install of a self signed package prompts with: publisher fingerprint , trust verdict , scan risk , and requested permissions . Accepting pins the publisher fingerprint ( ). Anti takeover: if the same publisher later presents a different fingerprint, the install is flagged ( ) and requires explicit re consent — defending against style account takeover. The shell can register a rich modal via ; otherwise a fallback is used. Install time execution policy Packages run no install scripts . Code executes only when the app is opened (its ), inside the per app sandbox ( ) with guarded syscalls. There is no / style hook — the top real world infection vector is removed by design. Boot time self audit Boot with (or ) to run: — reports guarded / open / unguarded syscalls. — detects capability map drift (unclassified or stale entries). — full posture report; also exposed as . Audit logs Package lifecycle → ; updates → . Per package trust metadata ( , , , ) is stored in the package registry. See also WebGPU OS API Reference — , , , , . App manifest fields — WebGPU OS Architecture.","contentHash":"0a856a5885badaf0f097592339965a6de9a3d0767f96603e538e5355a121b0d6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/state-channels.md::0000","path":"concepts/state-channels.md","title":"Particle State Channels","description":"The authoritative intent and projection path that connects Plauna, ECS, CSE, and Particle Network transports.","kind":"guide","source":"MD/concepts/state-channels.md","updated":"2026-08-02","headings":["Particle State Channels","Standard flow","Place state by owner","Define a channel","Connect Plauna","Connect ECS replication","Connect CSE app state","Embedded network runtime","Run the proof","See also"],"chunkIndex":0,"chunkCount":3,"text":"The authoritative intent and projection path that connects Plauna, ECS, CSE, and Particle Network transports. Particle State Channels Particle State Channels define where shared state lives and how views receive it. This guide is for app, game, and UI authors who need one authoritative state path across Plauna, ECS, WebGPU OS state, and Particle Network. Standard flow A State Channel accepts typed intents and emits revisioned projections plus receipts. An intent asks an authority to perform an action. A projection contains confirmed state for a consumer to render. Plauna never treats an input event as shared truth. (Source: , ) The standard browser client transport uses Server Sent Events (SSE) downstream and HTTP upstream. reconnects the projection stream. Event IDs and synthesized snapshots recover missed revisions. The local development server and V3 Masterserver enable this route by default. The production route requires a short lived signed lease bound to a proven V3 key, route, channel, and role. Set on the Masterserver only when an operator intentionally disables this V3 capability. (Source: , , ) keeps that default while removing per app setup. A server authority resolves to SSE and can acquire its production lease from . A same origin authority resolves to . A peer authority opens the existing Particle WebRTC route and resolves to mesh. An in process authority stays local. (Source: , , ) Place state by owner State Owner Example Delivery Local presentation Plauna open menu, hover, draft input in process Authoritative simulation ECS world transform, particle emitter, combat state mesh or State Channel projection App owned durable state WebGPU OS CSE preferences, document state, workflow state Shared mergeable state CRDT or semantic replication workstation layout,","contentHash":"3b90e6088182c9d018d108313822e8e35d050ba926eff8d32136fe6dc5f3939d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/state-channels.md::0001","path":"concepts/state-channels.md","title":"Particle State Channels","description":"The authoritative intent and projection path that connects Plauna, ECS, CSE, and Particle Network transports.","kind":"guide","source":"MD/concepts/state-channels.md","updated":"2026-08-02","headings":["Particle State Channels","Standard flow","Place state by owner","Define a channel","Connect Plauna","Connect ECS replication","Connect CSE app state","Embedded network runtime","Run the proof","See also"],"chunkIndex":1,"chunkCount":3,"text":"App owned durable state WebGPU OS CSE preferences, document state, workflow state Shared mergeable state CRDT or semantic replication workstation layout, offline edits Particle Network Remote view State Channel client dashboard value, inspector state SSE by default Do not mirror the same authoritative value into independent UI, ECS, and network stores. Keep one owner. Derive projections for every other consumer. Define a channel The authority serializes submissions. It validates the channel, action, payload, expected revision, authority epoch, and optional fencing token. Duplicate intent IDs receive duplicate receipts without reapplying the mutation. (Source: ) Connect Plauna holds the latest projection for rendering. updates retained nodes. and dispatch actions; they do not write an authoritative projection before a receipt arrives. A state channel descriptor creates the client and resolves its transport, then owns cleanup. Callers may still provide an existing client. (Source: , , ) Connect ECS replication version 2 selects a named profile. Profiles set authority, cadence, projection strategy, component interest, and transport. Use for state exposed to browser views over SSE. Use or for peer simulation traffic over mesh. (Source: , ) SSE is the State Channel standard, not a replacement for every network lane. WebRTC mesh carries peer gameplay and semantic replication. BroadcastChannel remains useful for same origin peer tabs. In process transport remains useful for tests and local authorities. Connect CSE app state commits each accepted intent through with . The compare and swap result becomes the new authority state. External CSE writes produce a replacement snapshot. (Source: , ) The OS persists bounded authority checkpoints and offline intent outboxes through . A","contentHash":"361725ac6736c288b7cc1604f77fbae74f5d68724d2bb4c1d71d258f062a9bd6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"concepts/state-channels.md::0002","path":"concepts/state-channels.md","title":"Particle State Channels","description":"The authoritative intent and projection path that connects Plauna, ECS, CSE, and Particle Network transports.","kind":"guide","source":"MD/concepts/state-channels.md","updated":"2026-08-02","headings":["Particle State Channels","Standard flow","Place state by owner","Define a channel","Connect Plauna","Connect ECS replication","Connect CSE app state","Embedded network runtime","Run the proof","See also"],"chunkIndex":2,"chunkCount":3,"text":"state. External CSE writes produce a replacement snapshot. (Source: , ) The OS persists bounded authority checkpoints and offline intent outboxes through . A standby restores only valid, non regressing checkpoints. uses signed, replay rejected heartbeats, deterministic takeover, and strictly increasing fencing tokens before a promoted peer accepts writes. This is browser availability and stale writer fencing, not Byzantine consensus across a physical network partition. (Source: , , ) An authority is eligible only while its scoped mesh route is active. Suspending that route removes local authority immediately. On resume, the coordinator waits for a current authority heartbeat before deterministic failove","contentHash":"73829d74e95f508acd17e5a4f1cbaee477ffe5828ddc020934294b1493c33a7d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/ai-and-accessibility.md::0000","path":"contributing/ai-and-accessibility.md","title":"AI & Accessibility","description":"How this documentation stays safe and useful for both AI agents and humans — discovery files, agent boundaries, self-contained sections, metadata, and accessibility.","kind":"guide","source":"MD/contributing/ai-and-accessibility.md","updated":"2026-06-05","headings":["AI & Accessibility","Making the docs AI-safe","Discovery files (guide the AI to its places)","Self-contained sections","Page metadata (frontmatter)","Verifiability over fluency","Making the docs human-safe","Accessibility","Safety & accuracy","Diátaxis alignment","See also"],"chunkIndex":0,"chunkCount":3,"text":"How this documentation stays safe and useful for both AI agents and humans — discovery files, agent boundaries, self-contained sections, metadata, and accessibility. AI & Accessibility This documentation is built to be AI safe (readable by and guiding to LLM agents) and human safe (accessible, accurate, and clear). This page records those conventions. They draw on the emerging llmstxt.org proposal, the agents.md convention, the Diátaxis framework, and AI/RAG writing guidance. is supplemental discovery metadata, not a replacement for canonical Markdown and source code. Making the docs AI safe Discovery files (guide the AI to its places) — a curated, machine readable index at the web root so agents can discover it without knowing the documentation layout. A portable copy also lives in . — the curated pages concatenated for full context ingestion (the large generated reference is linked, not inlined). — an ES module catalog with the source path, source server import specifier, source hash, detected exports, and signatures. Summaries appear only where source JSDoc provides them; quantifies the remaining gaps and distinguishes repository source mode from compiled production mode. — bounded documentation chunks generated from the search index. Each UTF 8 line is an independent JSON object with source metadata, a stable chunk position, and a SHA 256 content hash. — the API catalog flattened to one source backed module or detected export per UTF 8 line. It preserves module paths, source imports, source hashes, signatures, and empty summaries when JSDoc has no description. and — crawler discovery files generated alongside the LLM indexes. Curated pages point to raw Markdown, API catalogs point to JSON, and bundled generated references use stable URLs. (at the root) — a \"README","contentHash":"dc2cd6bc905ab2968eebc3800291142b578ea693d6e4f5561a27e0c38ed7a9bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/ai-and-accessibility.md::0001","path":"contributing/ai-and-accessibility.md","title":"AI & Accessibility","description":"How this documentation stays safe and useful for both AI agents and humans — discovery files, agent boundaries, self-contained sections, metadata, and accessibility.","kind":"guide","source":"MD/contributing/ai-and-accessibility.md","updated":"2026-06-05","headings":["AI & Accessibility","Making the docs AI-safe","Discovery files (guide the AI to its places)","Self-contained sections","Page metadata (frontmatter)","Verifiability over fluency","Making the docs human-safe","Accessibility","Safety & accuracy","Diátaxis alignment","See also"],"chunkIndex":1,"chunkCount":3,"text":"the LLM indexes. Curated pages point to raw Markdown, API catalogs point to JSON, and bundled generated references use stable URLs. (at the root) — a \"README for agents\": where things live, which commands to run, what may be changed, and the hard boundaries. AI agents should read it first. Regenerate discovery files after content changes: refreshes both the copies and the web root discovery files. It generates the canonical sitemap by default; pass and only for another deployment. The validator rejects stale local ports, malformed or stale JSONL records, oversized feeds, malformed enriched API indexes, known nonexistent GPU symbols, missing root discovery files, and public wrappers that expose documentation only through an iframe. Self contained sections LLMs retrieve chunks , not whole pages, and document order is not preserved. So each section must make sense in isolation: Front load context — start a section by naming the subsystem/feature it concerns. Use descriptive headings that say what the section accomplishes. Avoid back references like \"as mentioned above,\" \"now that you've,\" or \"with everything configured.\" Include complete steps within a section rather than relying on earlier ones. Page metadata (frontmatter) Pages may begin with a YAML frontmatter block. The viewer strips it (showing the description as a subtitle) and the build tools use it for richer search and freshness signals: and improve retrieval; is a freshness signal valued by AI search. Verifiability over fluency Every behavioral claim must be traceable to a source file — cite it. The per symbol API reference is machine extracted and may lag the source; the generated banner marks it. Improve accuracy by editing JSDoc upstream , then regenerating. Prefer Markdown/HTML over PDFs; keep semantic","contentHash":"5ac5c0da2436e36a03f7b3dd9debe3810ea1e08ae739b91b47b14ca0cd2c2e7b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/ai-and-accessibility.md::0002","path":"contributing/ai-and-accessibility.md","title":"AI & Accessibility","description":"How this documentation stays safe and useful for both AI agents and humans — discovery files, agent boundaries, self-contained sections, metadata, and accessibility.","kind":"guide","source":"MD/contributing/ai-and-accessibility.md","updated":"2026-06-05","headings":["AI & Accessibility","Making the docs AI-safe","Discovery files (guide the AI to its places)","Self-contained sections","Page metadata (frontmatter)","Verifiability over fluency","Making the docs human-safe","Accessibility","Safety & accuracy","Diátaxis alignment","See also"],"chunkIndex":2,"chunkCount":3,"text":"lag the source; the generated banner marks it. Improve accuracy by editing JSDoc upstream , then regenerating. Prefer Markdown/HTML over PDFs; keep semantic structure (real headings, lists, tables) so crawlers and models parse it cleanly. Making the docs human safe Accessibility Descriptive link text — never \"click here\". Alt text on every image; text equivalents near every diagram (a screen reader may not read a rendered SVG). No layout relative references (\"above\"/\"below\"/\"on the right\") — refer to sections by name. Meaningful, ordered headings; sufficient color contrast in the dark theme. The viewer honors , exposes / on navigation, and provides a skip link and keyboard shortcuts. Safety & accuracy Never inclu","contentHash":"4dfcfc5660e5f84d9b44c3c41006975943f0af410372da3db819cdef5c37abc4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/api-reference-standard.md::0000","path":"contributing/api-reference-standard.md","title":"API Reference Standard","description":"The hybrid API reference standard — generated signatures from source plus hand-authored notes injected from a separate _notes/ overlay tree.","kind":"guide","source":"MD/contributing/api-reference-standard.md","updated":"2026-06-05","headings":["API Reference Standard","How generation works","Hand-authored notes (the notes/ overlay)","What a generated page contains","What contributors add (in the overlay)","Improve the source, improve the docs","Formatting","See also"],"chunkIndex":0,"chunkCount":2,"text":"The hybrid API reference standard — generated signatures from source plus hand-authored notes injected from a separate _notes/ overlay tree. API Reference Standard The reference is hybrid : generates per file signature stubs from source; contributors add prose and examples in a separate overlay tree that the extractor injects below the marker. This page defines the standard both halves follow. How generation works The extractor walks each subsystem's JS source and writes plus a consumed by the viewers. The whole page is regenerated every run (signatures and the Notes & Examples section), so the 1700 reference files stay purely generated and can be rebuilt from scratch. Hand authored notes live outside the pages in and are injected on every run — so regenerating never clobbers your prose. Hand authored notes (the overlay) There are two ways to add notes — see in the repo for the full guide. Per page notes — (the reference path with the segment dropped). The file becomes the page's Notes & Examples body verbatim. Example: notes for live in . Use normal relative links here. Shared blocks — . Write a block once and apply it to many pages via globs (matched against the reference path, e.g. ). This is how common context is authored once instead of copied onto every page. Because a shared block lands on pages at varying depths, use docroot absolute links like (leading ). A page's composed notes are its per page overlay first, then every matching shared block. If nothing applies, a placeholder is shown. What a generated page contains File path and a Source link to the real file. The file level description (from a leading JSDoc, or leading comments). Classes with their methods (signature + JSDoc summary). Functions with parameters ( ), return ( ), and summary. Constants and re","contentHash":"8069de6e28ce159b2284bd02ccf492d796e1d52fe5cc03d7b0f4d89d29b76045"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/api-reference-standard.md::0001","path":"contributing/api-reference-standard.md","title":"API Reference Standard","description":"The hybrid API reference standard — generated signatures from source plus hand-authored notes injected from a separate _notes/ overlay tree.","kind":"guide","source":"MD/contributing/api-reference-standard.md","updated":"2026-06-05","headings":["API Reference Standard","How generation works","Hand-authored notes (the notes/ overlay)","What a generated page contains","What contributors add (in the overlay)","Improve the source, improve the docs","Formatting","See also"],"chunkIndex":1,"chunkCount":2,"text":"JSDoc, or leading comments). Classes with their methods (signature + JSDoc summary). Functions with parameters ( ), return ( ), and summary. Constants and re exports . What contributors add (in the overlay) Each non trivial symbol should gain: Purpose — what it's for and when to use it (beyond the one line summary). Parameters — full sentences. Booleans: \"If , do X; otherwise Y.\" Objects: describe each field. Returns — start with \"The …\" for objects (\"The resolved trust profile.\"); booleans use \" if …; otherwise.\" Raises/errors — what throws and when. Example — a short, runnable snippet with error handling where relevant. See also — related symbols/pages. Improve the source, improve the docs Because file descriptions and / come from JSDoc, the best way to improve a generated page is to add JSDoc to the source (upstream), then re run the extractor. Per the project's composition rule, fix documentation at the source rather than only in the generated Markdown. Formatting All symbols in , matching source casing. One page per source file; one H3 per symbol. Keep examples self contained and language tagged. See also Docs Style Guide Contribution Workflow","contentHash":"9d475f819ac5c558ce4b559f4fd52bdf80212e75301c9f88ab1541ee9aaf2cfa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/diagram-guide.md::0000","path":"contributing/diagram-guide.md","title":"Diagram Guide","description":"How and when to use Mermaid diagrams so they live in Markdown, version with text, and render across all three viewers.","kind":"guide","source":"MD/contributing/diagram-guide.md","updated":"2026-06-05","headings":["Diagram Guide","When to use a diagram","How to author","Conventions","Accessibility","Theming","Example","See also"],"chunkIndex":0,"chunkCount":1,"text":"How and when to use Mermaid diagrams so they live in Markdown, version with text, and render across all three viewers. Diagram Guide Diagrams help readers grasp complex flows faster. This project uses Mermaid so diagrams live in Markdown, are versioned with text, and render in all three viewers. When to use a diagram Architecture/component relationships. Sequences (boot, request flows, IPC). State machines and pipelines. Use a diagram to complement prose, not replace it. Always introduce a diagram with a sentence saying what it shows. How to author Use a fenced markdown mermaid sequenceDiagram participant App participant Kernel App Kernel: fs.write(path, data) Kernel App: ok / throws if capability denied ` See also Docs Style Guide Examples in use: Boot Sequence, Architecture Overview.","contentHash":"e72c95ca656a9d3c025396adff6ed4084ea267212d51ae4426a5593ecc5ff3bc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/doc-contribution-workflow.md::0000","path":"contributing/doc-contribution-workflow.md","title":"Contribution Workflow","description":"How to add or change documentation and keep it from drifting — docs as code: edit Markdown, run the tooling, verify locally, review.","kind":"guide","source":"MD/contributing/doc-contribution-workflow.md","updated":"2026-06-05","headings":["Contribution Workflow","The loop","1. Edit Markdown","2. Regenerate derived artifacts","from C:\\Coding\\game\\MD","3. Verify locally","4. Keep docs in sync with code","5. Review & publish","Suggested CI (optional)","See also"],"chunkIndex":0,"chunkCount":1,"text":"How to add or change documentation and keep it from drifting — docs as code: edit Markdown, run the tooling, verify locally, review. Contribution Workflow How to add or change documentation and keep it from drifting. Docs are treated as code: edited in Markdown, validated by tooling, and reviewed. The loop 1. Edit Markdown All docs live under . This is the single source of truth. Existing docs elsewhere ( , , , per component ) are read only references — don't edit them as part of docs work; fold needed content into . Add new curated pages to . Follow the Docs Style Guide and use . 2. Regenerate derived artifacts If the viewer's libs aren't vendored yet: 3. Verify locally Zero build viewer: → . Click through changed pages; confirm no \"Page not found\", search works, diagrams render. MkDocs (optional): — fails on broken links. Run the Writing Checklist. 4. Keep docs in sync with code When you change an API or user visible behavior, update the docs in the same change. Improve source JSDoc so the generated reference improves too (see API Reference Standard). Record notable doc changes in CHANGELOG.md (Keep a Changelog format). 5. Review & publish Have a second contributor proofread. The three viewers all read the same files, so a merged change is immediately reflected once artifacts are rebuilt and the site/app is served. Suggested CI (optional) A CI job can run, on every change touching : 1. (source hashes and detected exports are current). 2. (must exit 0 — all nav paths resolve). 3. (root discovery files are regenerated). 4. (the compact deployed viewer payload is current). 5. (API, crawler, URL, and wrapper contracts pass). 6. (no broken links). 7. A Markdown link checker and a style linter (e.g. Vale). See also Docs Style Guide Writing Checklist Diagram Guide","contentHash":"30473d83ab390cfabe852fde9c3878188b5254622fe394b26f90720cc90cbe5d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/docs-style-guide.md::0000","path":"contributing/docs-style-guide.md","title":"Docs Style Guide","description":"How to write docs for this project so they are clear, consistent, accessible, and easy for both AI tools and humans to read.","kind":"guide","source":"MD/contributing/docs-style-guide.md","updated":"2026-06-05","headings":["Docs Style Guide","Voice and clarity","Inclusive language","Accessibility","Structure","Formatting conventions","Citing source","AI-readability","See also"],"chunkIndex":0,"chunkCount":2,"text":"How to write docs for this project so they are clear, consistent, accessible, and easy for both AI tools and humans to read. Docs Style Guide How to write docs for this project so they are clear, consistent, accessible, and easy for both AI tools and humans to read. Voice and clarity Active voice, present tense. \"The kernel guards syscalls,\" not \"syscalls are guarded by the kernel.\" One idea per sentence. Prefer short sentences and short paragraphs (3–5 sentences). Define terms on first use and add them to the Glossary. Be specific. Reference real file paths, functions, and symbols in . No filler. Every sentence should inform; cut marketing language. Inclusive language Use gender neutral terms (\"they/them\", \"the user\"). Avoid loaded metaphors. Prefer / and / . Avoid idioms that don't translate well. Accessibility Descriptive link text — link the thing, not \"click here\". Good: \"see the Boot Sequence\". Alt text on every image and diagram. No layout relative references (\"above\"/\"below\"/\"on the right\") — refer to sections by name. Meaningful headings in order (don't skip levels). Structure Every page should have: 1. An H1 title matching its purpose. 2. A one or two sentence intro stating what the page is and who it's for. 3. Body sections with descriptive H2/H3 headings. 4. At least one example where relevant. 5. A \"See also\" / next steps section with cross links. Use the skeletons in (overview, guide, tutorial, api entry). Formatting conventions Code font for files, functions, classes, symbols, and literal values: , , . Fenced code blocks with a language tag ( , ). Tables for option/parameter/field lists. Mermaid for diagrams (see Diagram Guide). Use relative links to other files so all three viewers resolve them. Citing source When you state how something works, point at","contentHash":"6276cf476a9e2de52b884f35ae8f6cdb366846677aa4ae861813c5d499f2e092"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/docs-style-guide.md::0001","path":"contributing/docs-style-guide.md","title":"Docs Style Guide","description":"How to write docs for this project so they are clear, consistent, accessible, and easy for both AI tools and humans to read.","kind":"guide","source":"MD/contributing/docs-style-guide.md","updated":"2026-06-05","headings":["Docs Style Guide","Voice and clarity","Inclusive language","Accessibility","Structure","Formatting conventions","Citing source","AI-readability","See also"],"chunkIndex":1,"chunkCount":2,"text":"diagrams (see Diagram Guide). Use relative links to other files so all three viewers resolve them. Citing source When you state how something works, point at the source: (Source: §4) or a file path. This keeps docs verifiable and makes drift obvious. AI readability Keep Markdown plain and standard (the zero build viewer has only a minimal fallback parser). Prefer explicit tables and lists over prose for structured data. Put the most important information first. See also Writing Checklist Page Templates API Reference Standard","contentHash":"9a3f2d449306edd70b3768a79ea0a719fae60b64fe325b3dd1137836b56cf9b8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/page-templates.md::0000","path":"contributing/page-templates.md","title":"Page Templates","description":"Copy-paste skeletons for new pages (overview, guide, reference, explanation) and guidance on when to use each.","kind":"guide","source":"MD/contributing/page-templates.md","updated":"2026-06-05","headings":["Page Templates","When to use which","Overview skeleton","<Subsystem> Overview","What it provides","Module map","Next steps","Guide skeleton","<Task>","Prerequisites","Steps","Verify","See also","API entry skeleton","functionName(param1, param2)","See also"],"chunkIndex":0,"chunkCount":1,"text":"Copy-paste skeletons for new pages (overview, guide, reference, explanation) and guidance on when to use each. Page Templates Copy paste skeletons for new pages. The full files live in ; this page explains when to use each and shows the shape. When to use which Template Use for A subsystem or major area landing page (what/who, module map). A task based how to (prerequisites → steps → verify). A longer, end to end learning path with a concrete goal. A hand written reference entry (most reference is auto generated). Overview skeleton Guide skeleton API entry skeleton js // runnable example See also Docs Style Guide API Reference Standard","contentHash":"40ea30ae035022306554c908ed9d7b7c7df484d65f04cfa515e66df22f3a8b3f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"contributing/writing-checklist.md::0000","path":"contributing/writing-checklist.md","title":"Writing Checklist","description":"A pre-merge checklist that operationalizes the Docs Style Guide — audience and scope, structure, navigation, links, and accuracy.","kind":"guide","source":"MD/contributing/writing-checklist.md","updated":"2026-06-05","headings":["Writing Checklist","Audience & scope","Structure & navigation","Content quality","Required sections (by page type)","Examples","Diagrams","Accessibility & style","Build verification","Review"],"chunkIndex":0,"chunkCount":1,"text":"A pre-merge checklist that operationalizes the Docs Style Guide — audience and scope, structure, navigation, links, and accuracy. Writing Checklist Run through this before merging any documentation change. It operationalizes the Docs Style Guide. Audience & scope [ ] The intro states what the page is and who it's for. [ ] The page is in the correct section and appears in (or an auto generated reference index). Structure & navigation [ ] Single H1; headings are ordered and meaningful. [ ] Cross links to related pages; a \"See also\" / next steps section exists. [ ] Internal links use relative paths and resolve in the viewer. Content quality [ ] Active voice, short sentences, short paragraphs. [ ] New terms are defined and added to the Glossary. [ ] Claims about behavior cite a source file/section. Required sections (by page type) [ ] Overview: what/who, module map, next steps. [ ] Guide/how to: prerequisites, numbered steps, at least one example. [ ] Reference entry: description, parameters, returns, errors, example. See API Reference Standard. Examples [ ] At least one code/command example where relevant. [ ] Examples are runnable/accurate and tagged with a language. Diagrams [ ] Mermaid diagrams render; each has surrounding explanatory text and alt text equivalent context. Accessibility & style [ ] Descriptive link text (no \"click here\"). [ ] No layout relative references (\"above\"/\"below\"). [ ] Inclusive, neutral language. Build verification [ ] passes (search index builds; nav paths resolve). [ ] regenerated root discovery files. [ ] passes API, crawler, and wrapper contracts. [ ] If you touched the API reference, ran and external overlays under were reinjected below . [ ] (If using MkDocs) has no broken link errors. Review [ ] A second contributor proofread the change.","contentHash":"d2ed5d455da182a078c8993a0b71d2f5aba7cd9917429a6485f7a27fb91b4f5e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/architecture.md::0000","path":"editor/architecture.md","title":"Editor Architecture","description":"How the editor is organized — the EditorApp single-page app orchestrating viewport, panels, and project state on the engine.","kind":"guide","source":"MD/editor/architecture.md","updated":"2026-06-05","headings":["Editor Architecture","Structure","Key pieces","Integration points","See also"],"chunkIndex":0,"chunkCount":1,"text":"How the editor is organized — the EditorApp single-page app orchestrating viewport, panels, and project state on the engine. Editor Architecture How the editor is organized. The editor is a single page application whose orchestrates the viewport, panels, and project state on top of the engine. Structure Key pieces — the central application object. It wires panels, the viewport, project lifecycle, and editor modules together. (It is the largest file in the editor; treat the generated API reference as the index of its surface.) — boots the editor and constructs . + — the project/filesystem abstraction the OS later generalizes into its storage layer. — renders the editable scene using the engine's renderer and VGPU. — dockable UI panels (hierarchy, inspector, asset tools). These are the panels Plauna can enhance. — transform and manipulation handles in the viewport. — entity templates that can be placed into a scene. — discrete feature modules. — offloaded work via Web Workers. — editor visual themes. Integration points Bootstrap: brings up the engine and exposes Plauna as . Plauna enhancement: existing panels are passed to for hybrid DOM/GPU upgrades, sharing the editor's VGPU. As an OS app: the editor is one of the userland apps the OS re wraps as a Plauna panel (Source: ). See also Plauna Architecture — the panel/surface system the editor feeds into. Editor API Reference — per file symbols from .","contentHash":"51c7345f892b986299432e95c9852b56cec4300b18f0f55f44823bb4316f3f82"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/getting-started.md::0000","path":"editor/getting-started.md","title":"Editor Getting Started","description":"Launch the editor in a browser and learn where the viewport, panels, and project files live.","kind":"guide","source":"MD/editor/getting-started.md","updated":"2026-06-05","headings":["Editor Getting Started","Launch","then browse to:","http://127.0.0.1:9001/editor/","Orientation","Extending the editor","See also"],"chunkIndex":0,"chunkCount":1,"text":"Launch the editor in a browser and learn where the viewport, panels, and project files live. Editor Getting Started Open the editor and learn where things live. Assumes Install & Run is done. Launch The page ( ) loads , which constructs and mounts the viewport and panels. Orientation You want to… Look at Understand the app shell Add/modify a panel Work on the 3D viewport Add a placeable entity Manipulate transforms Handle projects/files , Author materials Extending the editor New features are typically added as modules ( ) or panels ( ). For hybrid DOM/GPU panel upgrades, enhance panels via Plauna ( ). See Plauna Getting Started. See also Editor Architecture. Editor API Reference (run ).","contentHash":"e2b0d667fff88a3bb47a8aba4e22adce4dbf21e77a18b3bafd06b7c3a52cc98d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/index.md::0000","path":"editor/index.md","title":"Editor","description":"Section index for the editor — scene and asset authoring IDE built on the engine (overview, architecture, getting started, API reference).","kind":"guide","source":"MD/editor/index.md","updated":"2026-06-05","headings":["Editor","In this section","Module map","Related"],"chunkIndex":0,"chunkCount":1,"text":"Section index for the editor — scene and asset authoring IDE built on the engine (overview, architecture, getting started, API reference). Editor Scene and asset authoring IDE built on the engine. Source: . In this section Overview — what the editor is and its layout. Architecture — orchestration and integration points. Getting Started — launch and orientation. API Reference — per file symbols from (browse ). Module map Related Plauna — the UI framework that enhances editor panels. Engine — the runtime the editor renders with.","contentHash":"426c4b3051c2d8f3f710c751b15acd1fd2c490b0ba044b9d253e9ef3c53a7c5f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/overview.md::0000","path":"editor/overview.md","title":"Editor Overview","description":"The scene and asset authoring IDE built on the engine — viewport, dockable panels, project filesystem, gizmos, and material authoring.","kind":"guide","source":"MD/editor/overview.md","updated":"2026-06-05","headings":["Editor Overview","What it provides","Audience","Layout","Relationship to the engine and Plauna","Next steps"],"chunkIndex":0,"chunkCount":1,"text":"The scene and asset authoring IDE built on the engine — viewport, dockable panels, project filesystem, gizmos, and material authoring. Editor Overview The editor ( ) is the scene and asset authoring IDE built on the engine. It was the first major application on top of the runtime and established the panel/workbench and project filesystem patterns that Plauna and the OS later generalized. What it provides A viewport for editing scenes against the engine's renderer. Dockable panels (inspector, hierarchy, asset/material tools). A project/filesystem abstraction ( ). Gizmos, spawnables, and material authoring. Audience Content creators authoring scenes/assets, and tools developers extending the editor. Layout Path Purpose The editor shell page. Entry point. The main application class (large; orchestrates panels, viewport, project). Project / filesystem abstraction. UI components. Dockable editor panels. The 3D viewport. Transform/manipulation gizmos. Spawnable entity definitions. Feature modules. Project data/handling. Editor theming. Utilities. Web workers. Materials. Relationship to the engine and Plauna The editor bootstraps through . Plauna can enhance existing editor panels without replacing them ( ), sharing the same VGPU instance and ECS patterns. See Plauna Overview. Next steps Editor Architecture. Editor Getting Started. Editor API Reference — generated from by .","contentHash":"57e806b7c277e9e0b78d1f4aeaf146ff5c3eaf9747b89656f1d5e5bb3418e961"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/EditorApp.md::0000","path":"editor/reference/EditorApp.md","title":"EditorApp.js","description":"","kind":"reference","source":"editor/js/EditorApp.js","updated":"","headings":["EditorApp.js","Classes","class EditorApp","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorApp Main application controller (Modular) Uses lazy loading for heavy modules to improve initial load time Classes Method Signature Summary Initialize editor Record transform change (called by viewport gizmo) Save current scene to file Load scene from file List all scenes in project Create new empty scene Delete scene file Export project for runtime Initialize auto save system Mark scene as dirty (has unsaved changes) Show/update/hide the play mode compile overlay. Yield to event loop so overlay paints Enter play mode Toggle pause Exit play mode Update timeline UI with current simulation time Add delta time to simulation time (called from viewport loop) Calculate adaptive history interval based on max object velocity Fast objects = more frequent snapshots for smoother scrubbing Record current state to history with delta compression Compress snapshot quantize floats with delta+entropy residuals for lossless reconstruction Compute delta residuals between original and quantized values Returns entropy encoded residuals for lossless reconstruction Entropy encode residuals using run length encoding for zeros Uses 0x7FFFFFFF marker to avoid collision with actual values Decode entropy encoded residuals Quantize array of floats to integers Dequantize integers back to floats with optional residual correction Compute delta between two snapshots (only store changes) with residual encoding Reconstruct full snapshot at given index by applying deltas from nearest keyframe Uses caching during scrubbing to avoid redundant reconstruction Estimate timeline memory usage (compressed) Get particle snapshot memory stats Get comprehensive memory stats including off heap storage Seek to a specific","contentHash":"e80a2c1c658c632e94227d96f0383694448f493686d4181365b6f6cda09b4b57"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/EditorApp.md::0001","path":"editor/reference/EditorApp.md","title":"EditorApp.js","description":"","kind":"reference","source":"editor/js/EditorApp.js","updated":"","headings":["EditorApp.js","Classes","class EditorApp","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"Estimate timeline memory usage (compressed) Get particle snapshot memory stats Get comprehensive memory stats including off heap storage Seek to a specific time in history with smooth interpolation Restore a decompressed snapshot to ECS Interpolate between two snapshots for smooth timeline scrubbing Uses scratch arrays to avoid GC pressure during fast scrubbing Spherical linear interpolation for quaternions (allocating version) Slerp quaternions into existing array (zero allocation version) Sync PhysX bodies with current ECS state after scrubbing Setup timeline interactivity (click/drag to scrub) Initialize physics world directly (like stick2) Update spatial index for an entity (call when entity moves) Refresh entities sharing an animated mesh at most once per renderer bounds revision. Rebuild entire spatial index (call after scene load or many changes) Find entities near a point Raycast to find entity (for click selection) Get visible entities (frustum culled) Smoothly move camera to target position Update camera tween (call in render loop) Create Plauna root container if it doesn't exist Focus camera on one entity using its collider or rendered mesh bounds. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"7a6a95d18f58053219de2fae85d8eaec63aa9dfd8727fa3483324c08c33c78f2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/ProjectManager.md::0000","path":"editor/reference/ProjectManager.md","title":"ProjectManager.js","description":"","kind":"reference","source":"editor/js/ProjectManager.js","updated":"","headings":["ProjectManager.js","Classes","class ProjectManager","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProjectManager Handles project folder selection and initialization Classes Method Signature Summary Show directory picker and select project folder Initialize project check if valid, create structure if new Create folder structure for new project <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"dc73f0c3211605484e484274bdc987ad9a36ad797d6736ebcaa0c90cfa79bf09"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioEditorPanel.md::0000","path":"editor/reference/components/AudioEditorPanel.md","title":"components/AudioEditorPanel.js","description":"","kind":"reference","source":"editor/js/components/AudioEditorPanel.js","updated":"","headings":["components/AudioEditorPanel.js","Functions","createAudioEditorPanel(parentContainer, options = {})","destroyAudioEditorPanel(panel)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioEditorPanel.js Main Audio Editor Panel Composes NodeGraph + Palette + Inspector + Materials + PreviewControls into a single editor tab panel for the engine editor. Functions Create the audio editor panel. Parameters: (HTMLElement) — DOM element to mount into (Object) — No description in source JSDoc. (AudioContext) — Existing AudioContext (optional) Returns: Panel instance Destroy the audio editor panel. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"851b556660c55d8fbe9f455907c7fadfea64b88689d8931e26b1a0f66770d404"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioMotionTimeline.md::0000","path":"editor/reference/components/AudioMotionTimeline.md","title":"components/AudioMotionTimeline.js","description":"","kind":"reference","source":"editor/js/components/AudioMotionTimeline.js","updated":"","headings":["components/AudioMotionTimeline.js","Functions","createAudioMotionTimeline(container, callbacks = {})","setMotionPatch(timeline, motionData, options = {})","exportMotionPatch(timeline)","evaluateMotionAtTime(timeline, tSec)","evaluateActivityAtTime(timeline, tSec)","resolveAudioMotionTimelineTime(timeline, tSec)","destroyAudioMotionTimeline(timeline)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioMotionTimeline.js Sound motion/automation timeline for Audio Editor V1 feature set: Per parameter tracks (nodeId + param) Keyframe authoring (time, value, easing) Loop + duration + playhead scrubbing Runtime evaluation using AnimationTrack Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"084c9744f3f97c59fe3f78e13099339e36e576818ab1a3ab2862dbfe3ce0fdbf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioNodeGraph.md::0000","path":"editor/reference/components/AudioNodeGraph.md","title":"components/AudioNodeGraph.js","description":"","kind":"reference","source":"editor/js/components/AudioNodeGraph.js","updated":"","headings":["components/AudioNodeGraph.js","Functions","createAudioNodeGraph(container, callbacks = {})","addNode(graph, type, x, y, params = {})","removeNode(graph, nodeId)","addWire(graph, from, to)","removeWire(graph, from, to)","duplicateNode(graph, nodeId)","disconnectNode(graph, nodeId)","fitToView(graph)","setNodeTypes(graph, types)","selectNode(graph, nodeId)","exportPatch(graph)","importPatch(graph, patch)","renderGraph(graph)","startGraphAnimation(graph)","stopGraphAnimation(graph)","setNodeAnalysers(graph, analysers)","setMinimapContainer(graph, container)","destroyAudioNodeGraph(graph)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioNodeGraph.js Canvas Based Node Graph Editor Draggable nodes, wire connections (audio=thick, control=thin/dashed), zoom/pan, selection, and serialization to/from patch JSON. Functions Create an audio node graph editor. Parameters: (HTMLElement) — DOM element to mount into (Object) — { onNodeSelected, onPatchChanged, onWireChanged } Returns: Graph editor instance Add a node to the graph. Parameters: (Object) — No description in source JSDoc. (string) — Node type name (number) — X position (number) — Y position (Object) — Initial parameter overrides Returns: Node ID Remove a node and its wires. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Add a wire between two ports. Parameters: (Object) — No description in source JSDoc. (string) — \"nodeId:portName\" (string) — \"nodeId:portName\" Remove a wire. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. Duplicate a node (offset position by 20,20). Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Returns: New node ID Disconnect all wires from a node. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Fit view to show all nodes. Parameters: (Object) — No description in source JSDoc. Register available node types. Parameters: (Object) — No description in source JSDoc. (Map) — Map of type → { inputs, outputs, params } Select a node. Parameters: (Object) — No description in source JSDoc. (string null) — No description in source JSDoc. Import patch JSON into graph. Parameters: (Object) — No description in","contentHash":"4cf06cc087a63a1fb5e1f609c823224bab42f9806d604b5229c73ea00052d87c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioNodeGraph.md::0001","path":"editor/reference/components/AudioNodeGraph.md","title":"components/AudioNodeGraph.js","description":"","kind":"reference","source":"editor/js/components/AudioNodeGraph.js","updated":"","headings":["components/AudioNodeGraph.js","Functions","createAudioNodeGraph(container, callbacks = {})","addNode(graph, type, x, y, params = {})","removeNode(graph, nodeId)","addWire(graph, from, to)","removeWire(graph, from, to)","duplicateNode(graph, nodeId)","disconnectNode(graph, nodeId)","fitToView(graph)","setNodeTypes(graph, types)","selectNode(graph, nodeId)","exportPatch(graph)","importPatch(graph, patch)","renderGraph(graph)","startGraphAnimation(graph)","stopGraphAnimation(graph)","setNodeAnalysers(graph, analysers)","setMinimapContainer(graph, container)","destroyAudioNodeGraph(graph)","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"— No description in source JSDoc. (string null) — No description in source JSDoc. Import patch JSON into graph. Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. Render the entire graph. Parameters: (Object) — No description in source JSDoc. Start the animation loop for live waveform + wire animation. Parameters: (Object) — No description in source JSDoc. Stop animation loop. Parameters: (Object) — No description in source JSDoc. Set per node analyser taps for live waveform display. Parameters: (Object) — No description in source JSDoc. (Map) — nodeId → AnalyserNode Set an external container for the minimap (rendered separately from the main canvas). Parameters: (Object) — No description in source JSDoc. (HTMLElement) — No description in source JSDoc. Destroy the graph editor. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"04e023ac8e657d3751bea4f6716d73554a5263099cfa9acc3f8fd8e8869fcb0d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioNodeInspector.md::0000","path":"editor/reference/components/AudioNodeInspector.md","title":"components/AudioNodeInspector.js","description":"","kind":"reference","source":"editor/js/components/AudioNodeInspector.js","updated":"","headings":["components/AudioNodeInspector.js","Functions","createAudioNodeInspector(container, onParamChanged)","updateInspector(inspector, node)","destroyAudioNodeInspector(inspector)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioNodeInspector.js Right Panel for Selected Node Parameters Shows parameter knobs/sliders for the selected node. Uses SoundSchema when available for rich typed controls. Falls back to PARAM HINTS for legacy/unschemaed node types. Functions Create the node inspector panel. Parameters: (HTMLElement) — No description in source JSDoc. (Function) — Callback(nodeId, paramName, value) Update the inspector to show a node's parameters. Parameters: (Object) — No description in source JSDoc. (Object null) — Graph node or null Destroy the inspector. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"0f677fe80f54b9d0b9fd2f58ff64d3a65fa1ef57d535b56dd4ef76ec9de5e038"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioNodePalette.md::0000","path":"editor/reference/components/AudioNodePalette.md","title":"components/AudioNodePalette.js","description":"","kind":"reference","source":"editor/js/components/AudioNodePalette.js","updated":"","headings":["components/AudioNodePalette.js","Functions","createAudioNodePalette(container, onNodeDragStart)","destroyAudioNodePalette(palette)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioNodePalette.js Side Panel with Node Types Lists all available node types grouped by category. Supports drag to create from palette onto the graph canvas. Functions Create the node palette panel. Parameters: (HTMLElement) — DOM element to mount into (Function) — Callback(nodeType) when drag starts Returns: Palette instance Destroy the palette. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"9c3767372b9f6481da253096b7efd0832c83ac9fb49b22a2f80c289cbb7a1ad2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioPatchEditor.md::0000","path":"editor/reference/components/AudioPatchEditor.md","title":"components/AudioPatchEditor.js","description":"","kind":"reference","source":"editor/js/components/AudioPatchEditor.js","updated":"","headings":["components/AudioPatchEditor.js","Functions","createAudioPatchEditor(container, callbacks = {})","setPatchEditorAudioContext(editor, ctx)","setPatchEditorApp(patchEditor, editorApp)","destroyAudioPatchEditor(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioPatchEditor.js Live Material Patch Editor for Sound Studio Reads real substance audio definitions from the SubstanceRegistry and lets you tweak them on the spot. Changes feed into the ProceduralPatches runtime override system. Edits persist with scene. Layout: Material list (compact cards) + Dedicated param panel below. Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"36fd8255a3539ea345e7bfc8bb7911811e4b17fe523c6f35916e04df8035a24b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioPresetBrowser.md::0000","path":"editor/reference/components/AudioPresetBrowser.md","title":"components/AudioPresetBrowser.js","description":"","kind":"reference","source":"editor/js/components/AudioPresetBrowser.js","updated":"","headings":["components/AudioPresetBrowser.js","Functions","getPresetPatch(name)","createAudioPresetBrowser(container, callbacks = {})","destroyAudioPresetBrowser(browser)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioPresetBrowser.js Load/Save/Browse Patch Presets Browse built in presets per substance, load/save patches as JSON. Functions Get a preset patch by name. Parameters: (string) — No description in source JSDoc. Returns: Patch JSON or null Create the preset browser panel. Parameters: (HTMLElement) — No description in source JSDoc. (Object) — { onPresetLoad, onPresetSave } Destroy the preset browser. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"85f671943beb248eb59f1d58b94385c7d291fbec4cf3d570644188aed07ba2de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioPreviewControls.md::0000","path":"editor/reference/components/AudioPreviewControls.md","title":"components/AudioPreviewControls.js","description":"","kind":"reference","source":"editor/js/components/AudioPreviewControls.js","updated":"","headings":["components/AudioPreviewControls.js","Functions","createAudioPreviewControls(container, callbacks = {})","setPreviewPlaying(controls, playing)","destroyAudioPreviewControls(controls)","connectAnalyser()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioPreviewControls.js Professional Transport Bar Play/Pause/Stop with icons, elapsed time display, wave shape selector, volume control with arc knob, and waveform quick switch. Functions Create the transport controls bar. Parameters: (HTMLElement) — No description in source JSDoc. (Object) — { onPlay, onStop, onPause, onVolumeChange, onWaveSelect } Set playing state externally. Parameters: (Object) — No description in source JSDoc. (boolean) — No description in source JSDoc. Destroy preview controls. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"84b334797d7d66575d7f3093b347a5e59740b9a52a63ab861367206a24000778"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/AudioSignalAnalyzer.md::0000","path":"editor/reference/components/AudioSignalAnalyzer.md","title":"components/AudioSignalAnalyzer.js","description":"","kind":"reference","source":"editor/js/components/AudioSignalAnalyzer.js","updated":"","headings":["components/AudioSignalAnalyzer.js","Functions","createSignalAnalyzer(container)","connectSignalAnalyzer(analyzer, analyserNode)","disconnectSignalAnalyzer(analyzer)","destroySignalAnalyzer(analyzer)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioSignalAnalyzer.js Professional Signal Analysis Panel Full width bottom panel with switchable visualization modes: Oscilloscope (time domain waveform) Spectrum Analyzer (FFT frequency bars, log scale) Spectrogram (scrolling waterfall) Plus stereo VU/peak meter and freeze capability. Functions Create the signal analyzer panel. Parameters: (HTMLElement) — No description in source JSDoc. Returns: Analyzer instance Connect an AnalyserNode for visualization. Parameters: (Object) — No description in source JSDoc. (AnalyserNode) — No description in source JSDoc. Disconnect and stop rendering. Parameters: (Object) — No description in source JSDoc. Destroy the analyzer. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"5b2a91bd188d59c4fc2af3830e591af38dacfb8135e8e5149d6995d281c72e49"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/CollabPanel.md::0000","path":"editor/reference/components/CollabPanel.md","title":"components/CollabPanel.js","description":"","kind":"reference","source":"editor/js/components/CollabPanel.js","updated":"","headings":["components/CollabPanel.js","Classes","class CollabPanel","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CollabPanel.js Collaboration sidebar panel for the editor. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"7472a34320bf2ab957ec5a72b81e0fdaa7d0167e5a779c5e121e6076c6786123"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/GraphPersistenceContracts.md::0000","path":"editor/reference/components/GraphPersistenceContracts.md","title":"components/GraphPersistenceContracts.js","description":"","kind":"reference","source":"editor/js/components/GraphPersistenceContracts.js","updated":"","headings":["components/GraphPersistenceContracts.js","Classes","class UnsupportedGraphVersionError extends Error","Functions","prepareAudioGraphDocument(input)","prepareMaterialGraphDocument(input, { allowedNodeTypes = null } = {})","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Normalize legacy audio patches and validate the full candidate before use. Normalize legacy material graphs and reject dangling connections/future schemas. Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"130a29d382813377c3d6b7faeed4b55932ee97660227b122d6711a4b87dd2273"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/MaterialNodeGraph.md::0000","path":"editor/reference/components/MaterialNodeGraph.md","title":"components/MaterialNodeGraph.js","description":"","kind":"reference","source":"editor/js/components/MaterialNodeGraph.js","updated":"","headings":["components/MaterialNodeGraph.js","Functions","createNodeGraph(container, options = {})","evaluateGraphData(graphData)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MaterialNodeGraph.js Canvas based node graph editor for materials Features: pan/zoom, node drag, port connections, context menu to add nodes, node deletion, bezier connection rendering, port type coloring. Functions Standalone evaluator for raw graph data (no canvas UI needed). Used by headless preview animation. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"2012a4cbbafdda7f16673a0fd4b11667d67b8bcc8a73ab3eb2c6e2ec3ee09cb1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/MaterialNodePresets.md::0000","path":"editor/reference/components/MaterialNodePresets.md","title":"components/MaterialNodePresets.js","description":"","kind":"reference","source":"editor/js/components/MaterialNodePresets.js","updated":"","headings":["components/MaterialNodePresets.js","Functions","getPresetGraph(materialId)","hasPresetGraph(materialId)","listPresetIds()","listSubstancePresetIds()","listAnimatedPresetIds()","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MaterialNodePresets.js Pre built node graph recipes for all built in materials Each preset is a valid node graph using only standard MaterialNodeTypes nodes. These serve as demos showing users how to wire nodes to create materials. Graph structure: { nodes: [...], connections: [...], view: { panX, panY, zoom } } Node: { id, type, x, y, params } Connection: { fromNode, fromPort, toNode, toPort } Functions Get the preset node graph for a built in material. Parameters: (string) — No description in source JSDoc. Returns: Graph data { nodes, connections, view } or null Check if a material has a preset graph. Parameters: (string) — No description in source JSDoc. List all material IDs that have preset graphs. Get all substance linked preset IDs. Get all animated effect preset IDs (lava, water, hologram, etc.). Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"2e15fc123c15a108da18944e35bc20e0ceff274e8c8b5cb25887f396a832b1b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/MaterialNodeTypes.md::0000","path":"editor/reference/components/MaterialNodeTypes.md","title":"components/MaterialNodeTypes.js","description":"","kind":"reference","source":"editor/js/components/MaterialNodeTypes.js","updated":"","headings":["components/MaterialNodeTypes.js","Functions","defaultForType(type)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MaterialNodeTypes.js Node type definitions for the material graph editor Modeled after Substance Designer / Material Maker / Unreal Material Editor. Each node type defines inputs, outputs, defaults, and an evaluate function. Port types: 'float', 'vec2', 'vec3', 'vec4', 'color', 'texture' Functions Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"8f41fe770fe714998c68d5884b8403488f56c7958fe80a44ff0834e894058783"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/MaterialPanel.md::0000","path":"editor/reference/components/MaterialPanel.md","title":"components/MaterialPanel.js","description":"","kind":"reference","source":"editor/js/components/MaterialPanel.js","updated":"","headings":["components/MaterialPanel.js","Functions","createMaterialPanel(container, options = {})","destroyMaterialPanel(panel)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MaterialPanel.js Material Studio Panel Composes Library + PBR Inspector + 3D Preview into an overlay panel. Follows the Sound Studio (AudioEditorPanel.js) architecture. Functions Create the material panel contents inside the overlay body. Parameters: (HTMLElement) — material studio body element (Object) — No description in source JSDoc. (Object) — MaterialLibrary instance (Object) — TextureManager instance (Object) — Editor reference for entity assignment Returns: Panel instance Destroy the material panel. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"603368791329e57773413199152a53b5ab628fad01493621939ab4f0cab383a2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/MaterialPatchGraphs.md::0000","path":"editor/reference/components/MaterialPatchGraphs.md","title":"components/MaterialPatchGraphs.js","description":"","kind":"reference","source":"editor/js/components/MaterialPatchGraphs.js","updated":"","headings":["components/MaterialPatchGraphs.js","Functions","getMaterialGraph(substanceId)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MaterialPatchGraphs.js High level node graph representations for ProceduralPatches.js These graphs provide design facing topology for each material family. They intentionally summarize synthesis layers so editor UX stays readable even when runtime patches contain deeper stochastic/detail layers. Functions Get the node graph for a substance. Returns a deep copy so edits don't mutate the template. Parameters: (string) — No description in source JSDoc. Returns: Patch graph or null Constants — Maps substance IDs to editor facing graph representations. Graphs are intentionally compact abstractions of runtime synthesis. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"5e61ccdd36adcdde5830f839307ac72ec80ea2ec143d776a3fbf2594983e7059"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/MaterialStrip.md::0000","path":"editor/reference/components/MaterialStrip.md","title":"components/MaterialStrip.js","description":"","kind":"reference","source":"editor/js/components/MaterialStrip.js","updated":"","headings":["components/MaterialStrip.js","Functions","createMaterialStrip(container, options = {})","destroyMaterialStrip(state)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MaterialStrip.js Compact material browser for bottom panel Horizontal scrollable strip of material thumbnails with preview sidebar. Designed to sit in the bottom panel alongside Console. Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"a352c97360b1be6d0a1f1ac1f4ec8b29ad67a6c9d12871777724ac1498ec0e57"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/ParticleEffectControls.md::0000","path":"editor/reference/components/ParticleEffectControls.md","title":"components/ParticleEffectControls.js","description":"","kind":"reference","source":"editor/js/components/ParticleEffectControls.js","updated":"","headings":["components/ParticleEffectControls.js","Classes","class ParticleEffectControls","Functions","createParticleEffectControls(options = {})","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleEffectControls.js Editor UI Controls for Custom Particle Effects Adds controls to the particle emitter inspector panel: Checkbox to enable custom effects Effect selector dropdown Edit button to open shader editor Parameter sliders for effect params Classes Method Signature Summary Initialize the controls Render controls into a container Render the controls UI Render effect options for dropdown Render parameter controls for an effect Convert vec3 to hex color Convert hex to vec3 Add styles Setup event listeners Update effect selector dropdown Open shader editor Create new effect Clone current effect Export current effect Import effect from file Notify parent of changes Get current emitter data Update emitter data Destroy controls Functions Create particle effect controls <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"ea72dfe0b14b24eb8a267a8f52675fcff3f81dc2333dfa8689f86e559065e73e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/components/ShaderCodeEditor.md::0000","path":"editor/reference/components/ShaderCodeEditor.md","title":"components/ShaderCodeEditor.js","description":"","kind":"reference","source":"editor/js/components/ShaderCodeEditor.js","updated":"","headings":["components/ShaderCodeEditor.js","Classes","class ShaderCodeEditor","Functions","openShaderCodeEditor(effect, options = {})","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ShaderCodeEditor.js In Editor WGSL Code Editor Popup A notepad style popup for editing custom particle effect shaders. Features: Syntax highlighting for WGSL Real time validation Live preview Template snippets Error display with line numbers Classes Method Signature Summary Open the editor with an effect Close the editor Check if editor is open Create the editor UI Add CSS styles Setup event listeners Switch between tabs Handle text input Handle special keys Toggle comment on current line Duplicate current line Sync scroll between textarea and highlight layer Update line numbers Update syntax highlighting Load a preset Insert a code snippet Validate the effect Save the effect Destroy the editor Functions Create and open a shader code editor <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"1a45997ea17fa458e57d4dfd24358a7fbf1be60dc674f2584c84371201c03efb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/loader-guard.md::0000","path":"editor/reference/loader-guard.md","title":"loader-guard.js","description":"","kind":"reference","source":"editor/js/loader-guard.js","updated":"","headings":["loader-guard.js","Exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Keep the loading veil's context menu suppression CSP safe and scoped to the short interval in which the veil can actually receive pointer input. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"656330291609690a57898506c800fa6c3c9d5e8db2d115b7360e8343347f3598"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/main.md::0000","path":"editor/reference/main.md","title":"main.js","description":"","kind":"reference","source":"editor/js/main.js","updated":"","headings":["main.js","Exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Main entry point for Game Editor Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"0809b4aaac209cbb5997fc426fefcf0c65c29afa0045fb8f3395dde207a98168"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/ColliderGenerators.md::0000","path":"editor/reference/modules/ColliderGenerators.md","title":"modules/ColliderGenerators.js","description":"","kind":"reference","source":"editor/js/modules/ColliderGenerators.js","updated":"","headings":["modules/ColliderGenerators.js","Functions","generateCollidersFromSDF(sdfFunc, bounds, resolution = 10, options = {})","generateConvexMeshFromSDF(sdfFunc, bounds, resolution = 16)","colliderVertexHash(vertices)","generateHollowTorusColliders(majorRadius, minorRadius, wallThickness, resolution = 12)","generateHollowConeColliders(angle, height, wallThickness, resolution = 12)","generateLineColliders(start, end, radius, resolution = 10)","generateCurveColliders(points, radius, resolution = 10, segments = 20)","generateCollidersFromNetwork(network, resolution = 8)","generateTreeColliders(options = {})","generateRootColliders(options = {})","generateTunnelColliders(options = {})","generatePipeNetworkColliders(nodes, connections, resolution = 8)","generateBezierColliders(p0, p1, p2, p3, radius, resolution = 10)","generateSplineColliders(controlPoints, radius, resolution = 10)","testSphereSphere(c1, r1, c2, r2)","testAABBAABB(min1, max1, min2, max2)","testSphereAABB(center, radius, aabbMin, aabbMax)","computeColliderAABB(colliders)","generateNoisyColliders(baseSdf, bounds, options = {})","generateRockySphereColliders(center, radius, roughness = 0.15, resolution = 12)","generateTerrainColliders(sizeX, sizeZ, height, resolution = 8, seed = 0)","generateCaveColliders(bounds, tunnelRadius = 1.5, resolution = 6, seed = 0)","initColliderSpatialHash(cellSize = 2.0)","addToSpatialHash(id, colliders, worldPosition = [0, 0, 0])","queryNearbyColliders(point, radius)","clearColliderSpatialHash()","computeBounce(velocity, normal, restitution = 0.5)","applyFriction(velocity, normal, friction, dt)","predictLanding(start, velocity, gravity = 9.81)","generateScatteredColliders(options = {})","generateRockFieldColliders(options = {})","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ColliderGenerators.js Procedural collider generation utilities Extracted from EditorPhysics.js for modularity Includes: SDF based collider generation with anti aliasing Line/curve to voxel colliders Network based colliders (trees, tunnels, pipes) Noise based procedural colliders Spatial hash for collider queries Functions Generate colliders from ANY SDF function with anti aliasing Generate a CONVEX MESH collider from SDF Generate hollow torus colliders Generate hollow cone/funnel colliders Generate voxel colliders along a line segment Generate voxel colliders along a curve Generate colliders from a LineNetwork Generate tree shaped colliders Generate root system colliders Generate tunnel/cave colliders Generate custom pipe/beam network colliders Generate colliders along a cubic Bezier curve Generate colliders along a Bezier spline Generate rocky/organic colliders using noise displaced SDF Generate rocky sphere collider Generate terrain chunk collider Generate cave/hollow rock colliders Re exports <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"4d7c4c21f29692503fb686b02edee7d4ea9973719bb9bdfc1c14de92c8a1eb03"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/CollisionDebugOverlay.md::0000","path":"editor/reference/modules/CollisionDebugOverlay.md","title":"modules/CollisionDebugOverlay.js","description":"","kind":"reference","source":"editor/js/modules/CollisionDebugOverlay.js","updated":"","headings":["modules/CollisionDebugOverlay.js","Functions","createCollisionDebugPanel(editor)","toggleCollisionDebugOverlay(editor)","dumpCollisionInfo(editor)","checkCollisionConflicts(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CollisionDebugOverlay.js Visual debug overlay for collision layers and modes Displays collision layer, mask, and mode information for selected entities and optionally renders debug visualizations for collision relationships. Functions Create collision debug overlay panel Toggle collision debug overlay Get collision debug info for all entities (for console debugging) Check for collision layer conflicts (entities that should collide but don't) <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"eff204d2fdf55d892a904a3441e90e01ee46f196672b39a06c4643df678710f8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorAI.md::0000","path":"editor/reference/modules/EditorAI.md","title":"modules/EditorAI.js","description":"","kind":"reference","source":"editor/js/modules/EditorAI.js","updated":"","headings":["modules/EditorAI.js","Functions","getOrCreateNavGrid(options = {})","findPath(start, goal, options = {})","updateNavGridFromColliders(colliders, walkable = false)","smoothPath(waypoints, smoothing = 0.5)","getPathSteering(currentPos, waypoints, lookahead = 1.0)","getNavGridVisualization()","createAIAgent(options = {})","updateAIAgent(agent, behaviors, dt)","createFlock(count, options = {})","updateFlock(agents, dt, options = {})","createPatrolBehavior(waypoints)","createChaseFleeBehavior(chaseRadius = 10, fleeHealth = 20)","tickBehaviorTree(tree, blackboard, dt)","createAIPerception(options = {})","canSee(perception, position, forward, targetPos)","canHear(perception, position, soundPos, soundVolume = 1)","updateAIPerception(perception, position, forward, entities, dt)","getLastKnownPosition(perception, entityId)","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorAI.js AI, Navigation, Steering, and Behavior Trees for Editor Extracted from EditorPhysics.js for modularity Functions Initialize or get the editor's navigation grid Parameters: (Object) — Grid options Returns: Navigation grid Find a path between two world positions Mark cells as blocked/walkable based on colliders Smooth a path using string pulling Get steering direction to follow a path Debug: visualize nav grid walkability Create an AI agent with steering behaviors Update AI agent with combined steering behaviors Create a flock of AI agents Update entire flock with flocking behavior Create a simple patrol behavior tree Create a chase/flee behavior tree Run a behavior tree tick Create an AI perception component Check if an entity can see a target Check if an entity can hear a sound Update perception detect nearby entities Get last known position of an entity Re exports , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"475b0cd60c5ec04031237013bff1d32fc93b37114587bf2b99fb5929d41355ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorAudio.md::0000","path":"editor/reference/modules/EditorAudio.md","title":"modules/EditorAudio.js","description":"","kind":"reference","source":"editor/js/modules/EditorAudio.js","updated":"","headings":["modules/EditorAudio.js","Functions","async startSimAudio(editor)","stopSimAudio()","pauseSimAudio()","async resumeSimAudio()","tickSimAudio(dt)","destroySimAudio()","getSimAudioEngine()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorAudio.js Simulation Audio Bridge for the Editor Manages the runtime AudioEngine lifecycle during play mode: Initializes AudioEngine on first play Ticks audio each frame while playing Stops all sim audio on stop/pause Bridges substance emitters → procedural audio Functions Called when user enters play mode. Initializes engine if needed and starts audio. Parameters: (Object) — EditorApp instance Called when user exits play mode (Stop). Stops all active sources with a short fade. Called when user pauses. Suspends the AudioContext (freezes all audio in place). Called when user resumes from pause. Tick the audio engine. Call once per frame while playing. Parameters: (number) — Frame delta in seconds Full cleanup. Call on editor close. Get the current engine instance (for external integration). <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"e0985dff4332a64147e08cff5ae03ab0ae3c33888d007a208b70d4fff0dd395c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorAudioFX.md::0000","path":"editor/reference/modules/EditorAudioFX.md","title":"modules/EditorAudioFX.js","description":"","kind":"reference","source":"editor/js/modules/EditorAudioFX.js","updated":"","headings":["modules/EditorAudioFX.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorAudioFX.js Procedural Editor Sound Effects All sounds are synthesized with Web Audio API oscillators & noise — no sample files. Provides: loading ambient pad, play/stop/pause chimes, UI clicks, error beeps. Usage: import { editorAudioFX } from './EditorAudioFX.js'; editorAudioFX.init(); // call once after first user gesture editorAudioFX.playChime(); // play mode enter editorAudioFX.stopChime(); // play mode exit editorAudioFX.pauseClick(); // pause toggle editorAudioFX.uiClick(); // generic button click editorAudioFX.uiHover(); // hover over interactive element editorAudioFX.errorBeep(); // error / invalid action editorAudioFX.startLoadingAmbient(); // loading screen ambient pad editorAudioFX.stopLoadingAmbient(); // fade out loading pad Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"44a0f80adc6521a9e63f827040a5cbca80d03efeedaecc1e21bca47e8fd51d41"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorCollab.md::0000","path":"editor/reference/modules/EditorCollab.md","title":"modules/EditorCollab.js","description":"","kind":"reference","source":"editor/js/modules/EditorCollab.js","updated":"","headings":["modules/EditorCollab.js","Functions","initEditorCollab(editor)","destroyEditorCollab(editor)","getCollabState(editor)","isCollabActive(editor)","isCollabConnected(editor)","getCollabPeers(editor)","getCollabPresenceList(editor)","getCollabInterpCamera(editor, peerId)","getCollabStats(editor)","getCollabRouterStats(editor)","getCollabInterpDelay(editor)","collabPresenceTick(editor)","exportCollabTimeline(editor)","collabTrackGrab(editor, entityId)","collabUntrackGrab(editor, entityId)","collabClaimSelected(editor, entityId)","collabReleaseEntity(editor, entityId)","getCollabEntityOwner(editor, entityId)","isCollabEntityLocallyOwned(editor, entityId)","getCollabGrabGlows(editor)","isCollabPlayAuthority(editor)","collabInterpolateFrame(editor)","hostRoom(editor, roomId, wordKey, numberKey)","setCollabRoom(editor, roomId, wordKey, numberKey, hostId, hostFingerprint)","setCollabRoomId(editor, roomId)","setAnonMode(editor, enabled)","leaveRoom(editor)","generateWordKey()","generateNumberKey()","encodeInviteCode(roomId, wordKey, numberKey, hostId, hostFingerprint)","decodeInviteCode(code)","setAutoMod(editor, enabled)","kickPeer(editor, peerId)","getSavedRoomCredentials()","clearRoomCredentials()","injectCollabStorageDeps(deps)","injectCollabHistoryHelpers(helpers)","editorCollabCompositeSuffix(raw)","buildEditorCollabCompositeId(roomId, wordKey, numberKey, hostId)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorCollab.js Editor side integration for the collab system. Mounts onto EditorApp and wires all hooks. Hooks wired: EditorHistory.pushAction → broadcast op to peers ProjectStorage.saveProject → broadcast snapshot PrefabLibrary.save/delete → broadcast prefab ops Viewport render loop → presence tick at 10 Hz EditorApp.enterPlayMode → broadcast play sync EditorApp.togglePause → broadcast pause sync EditorApp.exitPlayMode → broadcast stop sync Functions Initialize the collab system and attach it to the editor. Called from EditorApp.initialize() at the end. Destroy the collab system and remove all hooks. Get the current collab state from the editor. Get Hermite interpolated camera for a remote peer (smooth, per frame). Returns { pos: [x,y,z], target: [x,y,z] } or null. Get collab camera interpolation + connection stats for UI display. Get message router stats for bandwidth monitoring. Returns { sent, dropped, coalesced, bytesSent, backpressureFrames, rateMultiplier } Get the current adaptive interpolation delay (ms). On LAN: 20ms. On jittery connections: up to 150ms. Auto adjusts each frame. Called from Viewport render loop to send presence at 10 Hz. Export local timeline as JSON download. Notify collab that local user started grabbing an entity (play mode). Claims per entity ownership at GRABBED priority so our transforms are authoritative. Notify collab that local user released a grabbed entity. Releases per entity ownership so default authority resumes. Claim ownership of an entity at SELECTED priority (inspector editing). Release ownership of an entity (selected or grabbed). Get the current owner of an entity. Returns { ownerId, priority } or null. Check if the local peer owns","contentHash":"d51ff1b2271b715af464efce111487da0e19b8249408e94554106a9082b51a47"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorCollab.md::0001","path":"editor/reference/modules/EditorCollab.md","title":"modules/EditorCollab.js","description":"","kind":"reference","source":"editor/js/modules/EditorCollab.js","updated":"","headings":["modules/EditorCollab.js","Functions","initEditorCollab(editor)","destroyEditorCollab(editor)","getCollabState(editor)","isCollabActive(editor)","isCollabConnected(editor)","getCollabPeers(editor)","getCollabPresenceList(editor)","getCollabInterpCamera(editor, peerId)","getCollabStats(editor)","getCollabRouterStats(editor)","getCollabInterpDelay(editor)","collabPresenceTick(editor)","exportCollabTimeline(editor)","collabTrackGrab(editor, entityId)","collabUntrackGrab(editor, entityId)","collabClaimSelected(editor, entityId)","collabReleaseEntity(editor, entityId)","getCollabEntityOwner(editor, entityId)","isCollabEntityLocallyOwned(editor, entityId)","getCollabGrabGlows(editor)","isCollabPlayAuthority(editor)","collabInterpolateFrame(editor)","hostRoom(editor, roomId, wordKey, numberKey)","setCollabRoom(editor, roomId, wordKey, numberKey, hostId, hostFingerprint)","setCollabRoomId(editor, roomId)","setAnonMode(editor, enabled)","leaveRoom(editor)","generateWordKey()","generateNumberKey()","encodeInviteCode(roomId, wordKey, numberKey, hostId, hostFingerprint)","decodeInviteCode(code)","setAutoMod(editor, enabled)","kickPeer(editor, peerId)","getSavedRoomCredentials()","clearRoomCredentials()","injectCollabStorageDeps(deps)","injectCollabHistoryHelpers(helpers)","editorCollabCompositeSuffix(raw)","buildEditorCollabCompositeId(roomId, wordKey, numberKey, hostId)","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":3,"text":"Release ownership of an entity (selected or grabbed). Get the current owner of an entity. Returns { ownerId, priority } or null. Check if the local peer owns an entity. Get map of entityId → color hex for entities being grabbed by remote peers. Used by Viewport to render grab glow. Returns true if this peer is the physics authority during play mode. Non authority peers should skip local physics stepping and instead receive transforms from the authority. Interpolate buffered remote transforms. Call every render frame on non authority peers. Smoothly tweens entity positions between received keyframes with a 100ms render delay. Host a room. Auto generates word key and number key if not provided. Starts signaling so peers can discover this host. Join a room with dual key authentication (all 3 must match the host). Legacy alias: setCollabRoomId calls this. Toggle anonymous mode. Must be called BEFORE hostRoom/joinRoom. When enabled: Peers get random anonymous IDs (different each session) Real peer IDs are stripped from all ops TURN only relay hides IP addresses Garlic encryption prevents relay from reading message content Parameters: (Object) — No description in source JSDoc. (boolean) — No description in source JSDoc. Leave the current room. Stops signaling and clears peer state. Does NOT destroy the collab system — user can Host/Join again. Generate a random word key (two words joined by a dash). 120 words × 120 words = 14,400 combinations per word pair. Generate a random 6 digit number key. 900,000 combinations (100000 999999). Total key space with words: 120×120×900000 ≈ 12.96 billion combinations. Encode room credentials into a single invite code string. Format: PE <base64url(roomId § wordKey § numberKey § hostId § hostFingerprint) The hostFingerprint (16 hex chars)","contentHash":"fc5797dc1749494fd484255aaef3ef61679904845bd2bd9147a6821c5a2738c3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorCollab.md::0002","path":"editor/reference/modules/EditorCollab.md","title":"modules/EditorCollab.js","description":"","kind":"reference","source":"editor/js/modules/EditorCollab.js","updated":"","headings":["modules/EditorCollab.js","Functions","initEditorCollab(editor)","destroyEditorCollab(editor)","getCollabState(editor)","isCollabActive(editor)","isCollabConnected(editor)","getCollabPeers(editor)","getCollabPresenceList(editor)","getCollabInterpCamera(editor, peerId)","getCollabStats(editor)","getCollabRouterStats(editor)","getCollabInterpDelay(editor)","collabPresenceTick(editor)","exportCollabTimeline(editor)","collabTrackGrab(editor, entityId)","collabUntrackGrab(editor, entityId)","collabClaimSelected(editor, entityId)","collabReleaseEntity(editor, entityId)","getCollabEntityOwner(editor, entityId)","isCollabEntityLocallyOwned(editor, entityId)","getCollabGrabGlows(editor)","isCollabPlayAuthority(editor)","collabInterpolateFrame(editor)","hostRoom(editor, roomId, wordKey, numberKey)","setCollabRoom(editor, roomId, wordKey, numberKey, hostId, hostFingerprint)","setCollabRoomId(editor, roomId)","setAnonMode(editor, enabled)","leaveRoom(editor)","generateWordKey()","generateNumberKey()","encodeInviteCode(roomId, wordKey, numberKey, hostId, hostFingerprint)","decodeInviteCode(code)","setAutoMod(editor, enabled)","kickPeer(editor, peerId)","getSavedRoomCredentials()","clearRoomCredentials()","injectCollabStorageDeps(deps)","injectCollabHistoryHelpers(helpers)","editorCollabCompositeSuffix(raw)","buildEditorCollabCompositeId(roomId, wordKey, numberKey, hostId)","Notes & Examples","Editor Extension System"],"chunkIndex":2,"chunkCount":3,"text":"credentials into a single invite code string. Format: PE <base64url(roomId § wordKey § numberKey § hostId § hostFingerprint) The hostFingerprint (16 hex chars) allows joiners to verify host identity. Returns: invite code Decode an invite code back to { roomId, wordKey, numberKey, hostId, hostFingerprint }. Returns null if the code is invalid. Toggle auto moderation (auto kick, mute, throttle from integrity violations). Only the host can enable/disable. Off by default. Returns: new state Kick a peer from the room. Only the host (first connected) should call this. Broadcasts a kick op, then the kicked peer clears its stored credentials. Get saved room credentials from localStorage. Returns: null} Clear saved room","contentHash":"b79e301ef59c2d5ca6ee88356e179721dc6e22e1243a31f552fd016059e00329"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorGuide.md::0000","path":"editor/reference/modules/EditorGuide.md","title":"modules/EditorGuide.js","description":"","kind":"reference","source":"editor/js/modules/EditorGuide.js","updated":"","headings":["modules/EditorGuide.js","Functions","show(sectionId)","hide()","toggle()","isVisible()","checkFirstLaunch()","checkHashLink()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorGuide.js — Fullscreen interactive guide overlay Future proof feature list: ARIA accessibility (role=dialog, aria modal, focus trap) Keyboard nav (Arrow keys sidebar, Tab sections, ? global shortcut) Search / filter across all section text localStorage progress tracking with completion badges First launch auto show Guide versioning — \"what's new\" badge on updates Deep linking via URL hash ( guide camera) Scroll progress bar Reading time estimates per section Interactive demo placeholder canvases (ready for engine runtime) Print friendly CSS (@media print) Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f44fe01ea3a71ddcce01a52f212b3f00879b1b1ce82ec0a1ecf49fef10546ced"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorHistory.md::0000","path":"editor/reference/modules/EditorHistory.md","title":"modules/EditorHistory.js","description":"","kind":"reference","source":"editor/js/modules/EditorHistory.js","updated":"","headings":["modules/EditorHistory.js","Functions","setCollabBroadcastHook(fn)","setCollabReplayFlag(v)","initHistory(editor)","selectAll()","pushAction(action)","recordTransform(entityId, beforePos, beforeRot, beforeScale, afterPos, afterRot, afterScale)","flushPendingTransform()","recordCreate(entityId, entityData)","recordDelete(entityId, entityData)","recordProperty(entityId, componentName, propertyName, beforeValue, afterValue)","recordModelAnimation(entityId, beforeValue, afterValue)","recordModelMorphWeights(entityId, beforeValue, afterValue)","recordRename(entityId, beforeName, afterName)","recordReparent(entityId, beforeFolderId, afterFolderId)","recordFolderCreate(folderId, folderData)","recordFolderDelete(folderId, folderData, childEntities)","recordFolderRename(folderId, beforeName, afterName)","recordComponentAdd(entityId, componentName, componentData)","recordComponentRemove(entityId, componentName, componentData)","recordSelectionChange(beforeSelection, afterSelection)","undo()","redo()","copy()","cut()","async paste()","async duplicate()","deleteSelected()","clearHistory()","getHistoryState()","canUndo()","canRedo()","hasClipboard()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorHistory Undo/Redo System with Clipboard Support Action types: transform: Entity position/rotation/scale change create: Entity creation delete: Entity deletion delete multi: Multiple entity deletion property: Component property change model animation: Imported model clip/playback state change model morph weights: Imported model morph ownership/weight change rename: Entity rename reparent: Entity moved to different folder paste: Paste operation (multiple entities) folder create: Folder creation folder delete: Folder deletion folder rename: Folder rename component add: Component added to entity component remove: Component removed from entity selection: Selection change (for group operations) Memory optimizations: Transform actions use quantized floats (0.001 precision for position) Batches rapid transform changes into single action Component capture: All ECS components listed in TRACKED COMPONENTS are captured Add new component types to TRACKED COMPONENTS as they're added to engine Functions Initialize history system with editor reference Select all entities Push an action to the undo stack Parameters: (Object) — Action to record Record a transform change (with batching and compression) Force commit any pending transform (call before other operations) Record entity creation Record entity deletion Record property change Record rename Record entity reparent (move to different folder) Record folder creation Record folder deletion Record folder rename Record component added to entity Record component removed from entity Record selection change (for group operations) Undo last action Redo last undone action Copy selected entities to clipboard Cut selected entities (copy + delete)","contentHash":"7ed8e0f2024e6350b570cfb226067243d0bde48461ba05e1ffb541e31191dfe8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorHistory.md::0001","path":"editor/reference/modules/EditorHistory.md","title":"modules/EditorHistory.js","description":"","kind":"reference","source":"editor/js/modules/EditorHistory.js","updated":"","headings":["modules/EditorHistory.js","Functions","setCollabBroadcastHook(fn)","setCollabReplayFlag(v)","initHistory(editor)","selectAll()","pushAction(action)","recordTransform(entityId, beforePos, beforeRot, beforeScale, afterPos, afterRot, afterScale)","flushPendingTransform()","recordCreate(entityId, entityData)","recordDelete(entityId, entityData)","recordProperty(entityId, componentName, propertyName, beforeValue, afterValue)","recordModelAnimation(entityId, beforeValue, afterValue)","recordModelMorphWeights(entityId, beforeValue, afterValue)","recordRename(entityId, beforeName, afterName)","recordReparent(entityId, beforeFolderId, afterFolderId)","recordFolderCreate(folderId, folderData)","recordFolderDelete(folderId, folderData, childEntities)","recordFolderRename(folderId, beforeName, afterName)","recordComponentAdd(entityId, componentName, componentData)","recordComponentRemove(entityId, componentName, componentData)","recordSelectionChange(beforeSelection, afterSelection)","undo()","redo()","copy()","cut()","async paste()","async duplicate()","deleteSelected()","clearHistory()","getHistoryState()","canUndo()","canRedo()","hasClipboard()","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"selection change (for group operations) Undo last action Redo last undone action Copy selected entities to clipboard Cut selected entities (copy + delete) Paste from clipboard Duplicate selected entities Delete selected entities Clear all history Get history state for debugging <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"d3ca602ffeeed7d75a646dfdea4e0f970e7e936d9f3ac50639e03b47e2f90780"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorMeshConversions.md::0000","path":"editor/reference/modules/EditorMeshConversions.md","title":"modules/EditorMeshConversions.js","description":"","kind":"reference","source":"editor/js/modules/EditorMeshConversions.js","updated":"","headings":["modules/EditorMeshConversions.js","Functions","async meshToVoxel(editor, entityId, opts = {})","async meshToPoints(editor, entityId, opts = {})","async meshToSoftBody(editor, entityId, opts = {})","async pointsToMesh(editor, entityId, opts = {})","async sdfToMesh(sdfFn, opts = {})","async exportMesh(editor, entityId, format = 'obj')","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ EditorMeshConversions.js — Mesh conversion operations for editor entities Bridges Kaolin conversion modules to the editor: Mesh → Voxel grid (MeshToVoxel) Mesh → Point cloud (MeshToPoints) Mesh → Soft Body (AutoTetMesh → PBD sim) Points → Mesh (PointsToMesh) SDF → Mesh (SDFToMesh) Export mesh as OBJ/PLY/STL (MeshIO) ============================================================================ Functions Voxelize an entity's mesh and spawn a new entity with the voxel data. Parameters: (Object) — No description in source JSDoc. (number) — Source mesh entity (Object) — No description in source JSDoc. (number) — Grid resolution (default 32) Returns: null } Sample points from an entity's mesh and spawn a point cloud entity. Parameters: (Object) — No description in source JSDoc. (number) — Source mesh entity (Object) — No description in source JSDoc. (number) — Number of points to sample (default 5000) (string) — 'uniform' 'poisson' 'farthest' (default 'uniform') Returns: New point cloud entity ID Convert an entity's mesh to a soft body using AutoTetMesh. Parameters: (Object) — No description in source JSDoc. (number) — Source mesh entity (Object) — No description in source JSDoc. (string) — 'preview' 'balanced' 'quality' (default 'balanced') Reconstruct a mesh from a point cloud entity. Parameters: (Object) — No description in source JSDoc. (number) — Point cloud entity (Object) — No description in source JSDoc. (string) — 'bpa' 'alpha' 'convex' (default 'bpa') Returns: New mesh entity ID Generate a mesh from an SDF function. Parameters: (Function) — (x,y,z) = distance (Object) — No description in source JSDoc.","contentHash":"c3e6e9fc2f4fa40f790637227cae483d61c61c81ea40e0836adc11b49a7161c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorMeshConversions.md::0001","path":"editor/reference/modules/EditorMeshConversions.md","title":"modules/EditorMeshConversions.js","description":"","kind":"reference","source":"editor/js/modules/EditorMeshConversions.js","updated":"","headings":["modules/EditorMeshConversions.js","Functions","async meshToVoxel(editor, entityId, opts = {})","async meshToPoints(editor, entityId, opts = {})","async meshToSoftBody(editor, entityId, opts = {})","async pointsToMesh(editor, entityId, opts = {})","async sdfToMesh(sdfFn, opts = {})","async exportMesh(editor, entityId, format = 'obj')","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"'bpa') Returns: New mesh entity ID Generate a mesh from an SDF function. Parameters: (Function) — (x,y,z) = distance (Object) — No description in source JSDoc. (number[]) — [x,y,z] bounding box min (default [ 1, 1, 1]) (number[]) — [x,y,z] bounding box max (default [1,1,1]) (number) — Grid resolution (default 32) Returns: } Export an entity's mesh as a downloadable file. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (string) — 'obj' 'ply' 'stl' <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"3df0eb23abbab025ada4125a6e3adc99bb370fdc5bb0a4cef2f534112207411a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorMeshOps.md::0000","path":"editor/reference/modules/EditorMeshOps.md","title":"modules/EditorMeshOps.js","description":"","kind":"reference","source":"editor/js/modules/EditorMeshOps.js","updated":"","headings":["modules/EditorMeshOps.js","Functions","getMeshDataForEntity(editor, entityId)","async applyMeshOp(editor, entityId, opName, params = {})","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ EditorMeshOps.js — Mesh operations for editor entities Exposes Kaolin mesh ops (subdivide, smooth, normals, validate, flip) on selected entities. Each op clones the mesh, runs the Kaolin function, re registers with CustomMeshRegistry + EntityMeshRenderer, and pushes an undo snapshot (hybrid: auto for <50k tris, confirm dialog for larger). ============================================================================ Functions Get mesh geometry data for an entity. Checks CustomMeshRegistry first, then EntityMeshRenderer cache. Parameters: (Object) — EditorApp instance (number) — No description in source JSDoc. Returns: null} Apply a mesh operation to an entity. Pipeline: get mesh → optional undo snapshot → run op → re register → update entity. Parameters: (Object) — EditorApp instance (number) — Target entity (string) — Operation identifier (Object) — Operation specific parameters Returns: true if operation succeeded <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"ce2aef2fd647ef133ea6f5bf0ab68f9636084f117154b9d205cb2455515620b9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorMetrics.md::0000","path":"editor/reference/modules/EditorMetrics.md","title":"modules/EditorMetrics.js","description":"","kind":"reference","source":"editor/js/modules/EditorMetrics.js","updated":"","headings":["modules/EditorMetrics.js","Functions","setupMetricsCommands(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ EditorMetrics.js — 3D mesh comparison metrics for the editor console Exposes Kaolin metrics (Chamfer Distance, Hausdorff, Volumetric IoU) as editor commands for comparing mesh entities. Usage (from editor console or script): editor.compareMeshes(entityA, entityB) editor.meshMetrics(entityA, entityB, 'chamfer') ============================================================================ Functions Setup mesh metrics commands on the editor instance. Call once during editor initialization. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"dc816fc9b1985af1f9ddb0a5719529b1f8400ddd99038635f68a87606711f090"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorParticleSkinning.md::0000","path":"editor/reference/modules/EditorParticleSkinning.md","title":"modules/EditorParticleSkinning.js","description":"","kind":"reference","source":"editor/js/modules/EditorParticleSkinning.js","updated":"","headings":["modules/EditorParticleSkinning.js","Functions","setupSkinningCommands(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ EditorParticleSkinning.js — Editor bridge for learned deformation skinning Connects Kaolin's ParticleSkinning pipeline to the editor: 1. Capture deformation snapshots from a running soft body sim 2. Extract PCA deformation modes 3. Compute skinning weights 4. Bake to animation keyframes for replay without physics 5. Runtime preview via skinning evaluator Usage (from editor console or context menu): editor.skinning.startCapture(entityId) editor.skinning.stopCapture(entityId) editor.skinning.train(entityId, { numModes: 8 }) editor.skinning.bake(entityId, { fps: 60 }) editor.skinning.playBaked(entityId) ============================================================================ Functions Set up particle skinning commands on the editor instance. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"3d7244ef9069859017452902964139dc316ac0c2391f78a63452ceca69b8f15c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorParticles.md::0000","path":"editor/reference/modules/EditorParticles.md","title":"modules/EditorParticles.js","description":"","kind":"reference","source":"editor/js/modules/EditorParticles.js","updated":"","headings":["modules/EditorParticles.js","Functions","applyParticleTimelineSettings(editor)","async initParticleSystem(editor, device, format)","stopParticleAudio()","destroyParticleSystem()","syncWorldSystemsToEmitters()","registerEmitter(entityId, config)","unregisterEmitter(entityId)","createComposedSpellEffect(editor, sourceEntityId, elements, baseConfig)","updateEmitter(entityId, config)","enableEmitter(entityId)","disableEmitter(entityId)","toggleEmitter(entityId)","isEmitterEnabled(entityId)","getEmitter(entityId)","hasEmitter(entityId)","saveEmitterToECS(editor, entityId)","seedParticleRng(seed, tick = 0)","saveAllEmittersToECS(editor)","updateParticleQuality(editor, frameDt, cameraPosition = null)","getParticleQualityStackStatus()","stepParticles(editor, dt)","async prepareDebugRenderer(mode)","isDebugRendererReady(mode)","renderParticlesDepth(pass, camera)","renderParticlesNormals(pass, camera)","renderParticlesAlbedo(pass, camera)","renderParticlesLighting(pass, camera)","renderParticlesVelocity(pass, camera)","renderParticlesAge(pass, camera)","renderParticlesEmissive(pass, camera)","renderParticlesSize(pass, camera)","renderParticlesThermal(pass, camera)","setThermalEnabled(enabled)","isThermalEnabled()","renderParticles(pass, camera, depthTextureView, depthScale)","getParticleCount()","clearParticles()","getParticleDecals()","getDecalSpawner()","getExtractedParticleLights()","getParticleLightSystem()","getDistortionRenderer(width, height, sceneFormat)","initDistortion(sceneColorView)","executeDistortionPass(encoder, frameData)","executeDistortionComposite(pass)","resizeDistortion(width, height)","getTrailHistorySystem()","renderTrailHistoryPass(pass, viewProj, cameraPos, time)","getBeamRenderer(format)","renderBeamPass(pass, viewProj, viewRight, viewUp, time, segmentCount)","getBeamSegmentCount()","updateBeamParams(params)","getExistingMeshRenderer()","getMeshRenderer(format, meshConfig)","setParticleMeshGeometry(mesh)","renderMeshPass(pass, viewProj, cameraPos, time, instanceCount)","hasLiquidEmitters()","getLiquidSurfaceTint()","getSPHSurfaceRendererHandle(format, width, height)","setSPHSurfaceTintColor(tint)","initSPHComposite(sceneColorView)","renderSPHSurfacePass(encoder, options)","compositeSPHSurfacePass(pass)","getBondRenderer(format)","computeAndUploadVisualBonds()","renderBondPass(pass, viewProj, cameraPos, viewRight, viewUp)","setBondVisualsEnabled(enabled)","setBondRadius(radius)","getFieldRenderer(format)","updateFieldVisualization(chargedParticles, gridConfig)","renderFieldPass(pass, viewProj, cameraPos, viewRight, viewUp)","getOrbitalRenderer(format)","renderOrbitalPass(pass, viewProj, cameraPos, viewRight, viewUp, instanceCount)","isReady()","getActiveEmitters()","clearAllEmitters()","spawnBurst(position, preset = 'explosion', count = 50)","spawnDustPuff(position, color, intensity = 0.5, normal)","getParticleSettings()","getParticles()","setParticleSettings(settings)","getParticlePerformanceStats()","startParticleRewind()","stopParticleRewind()","seekParticleTime(timeMs)","setParticleRewindSpeed(speed)","getParticleRewindInfo()","isParticleRewinding()","clearParticleSnapshots()","truncateParticleSnapshotsAfterTime(timeMs)","setParticleEasing(easingType)","setAdvancedInterpolation(enabled)","getInterpolationMode()","getParticleEasingTypes()","initAdvancedFeatures(options = {})","resetQualityScale()","updateVolumeSystem(encoder, camera)","renderVolumeSystem(pass, sceneColorTexture, sceneDepthTexture)","setVolumeMode(mode)","setVolumeEnabled(enabled)","toggleVolumeRendering()","isVolumeReady()","getVolumeStats()","setVolumeBounds(min, max)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Initialize the particle system for the editor Parameters: (Object) — Editor instance (GPUDevice) — WebGPU device (string) — Swap chain format Immediately stop all particle audio (impacts + ambients). Called when exiting play mode (Stop button). Destroy the particle system Scan all active emitters' physics profiles and ensure required world systems are initialized. Call this after registering emitters or when emitter substances change. Register an emitter entity Parameters: (number) — Entity ID (Object) — Emitter configuration (type, enabled, position, and all saved settings) Unregister an emitter entity Parameters: (number) — Entity ID === AUTO BLENDING SPELL EFFECT COMPOSER === Applies composed spell effect properties directly to the source emitter. Does NOT create child entities — modifies the source emitter's visual properties based on the element mix to produce a richer, more layered look. The composer analyzes the element combination and applies: Optimized color derived from element combo Adjusted emit rate, size, lifetime for a \"spell like\" feel Temperature and material properties from element chemistry Called by \"Create Spell From This\" button in EmitterInspectorCard.js. Parameters: (Object) — Editor instance (number) — Entity ID of the source emitter (Array) — Active element layers [{id, power, enabled}] (Object) — Base emitter config (rate, size, lifetime, etc.) Returns: True if spell properties were applied Update emitter configuration Parameters: (number) — Entity ID (Object) — New configuration Enable an emitter Parameters: (number) — Entity ID Disable an","contentHash":"7257a861078f19f8d546331dacd9af14c7af2cafda63639fd107773788d338e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorParticles.md::0001","path":"editor/reference/modules/EditorParticles.md","title":"modules/EditorParticles.js","description":"","kind":"reference","source":"editor/js/modules/EditorParticles.js","updated":"","headings":["modules/EditorParticles.js","Functions","applyParticleTimelineSettings(editor)","async initParticleSystem(editor, device, format)","stopParticleAudio()","destroyParticleSystem()","syncWorldSystemsToEmitters()","registerEmitter(entityId, config)","unregisterEmitter(entityId)","createComposedSpellEffect(editor, sourceEntityId, elements, baseConfig)","updateEmitter(entityId, config)","enableEmitter(entityId)","disableEmitter(entityId)","toggleEmitter(entityId)","isEmitterEnabled(entityId)","getEmitter(entityId)","hasEmitter(entityId)","saveEmitterToECS(editor, entityId)","seedParticleRng(seed, tick = 0)","saveAllEmittersToECS(editor)","updateParticleQuality(editor, frameDt, cameraPosition = null)","getParticleQualityStackStatus()","stepParticles(editor, dt)","async prepareDebugRenderer(mode)","isDebugRendererReady(mode)","renderParticlesDepth(pass, camera)","renderParticlesNormals(pass, camera)","renderParticlesAlbedo(pass, camera)","renderParticlesLighting(pass, camera)","renderParticlesVelocity(pass, camera)","renderParticlesAge(pass, camera)","renderParticlesEmissive(pass, camera)","renderParticlesSize(pass, camera)","renderParticlesThermal(pass, camera)","setThermalEnabled(enabled)","isThermalEnabled()","renderParticles(pass, camera, depthTextureView, depthScale)","getParticleCount()","clearParticles()","getParticleDecals()","getDecalSpawner()","getExtractedParticleLights()","getParticleLightSystem()","getDistortionRenderer(width, height, sceneFormat)","initDistortion(sceneColorView)","executeDistortionPass(encoder, frameData)","executeDistortionComposite(pass)","resizeDistortion(width, height)","getTrailHistorySystem()","renderTrailHistoryPass(pass, viewProj, cameraPos, time)","getBeamRenderer(format)","renderBeamPass(pass, viewProj, viewRight, viewUp, time, segmentCount)","getBeamSegmentCount()","updateBeamParams(params)","getExistingMeshRenderer()","getMeshRenderer(format, meshConfig)","setParticleMeshGeometry(mesh)","renderMeshPass(pass, viewProj, cameraPos, time, instanceCount)","hasLiquidEmitters()","getLiquidSurfaceTint()","getSPHSurfaceRendererHandle(format, width, height)","setSPHSurfaceTintColor(tint)","initSPHComposite(sceneColorView)","renderSPHSurfacePass(encoder, options)","compositeSPHSurfacePass(pass)","getBondRenderer(format)","computeAndUploadVisualBonds()","renderBondPass(pass, viewProj, cameraPos, viewRight, viewUp)","setBondVisualsEnabled(enabled)","setBondRadius(radius)","getFieldRenderer(format)","updateFieldVisualization(chargedParticles, gridConfig)","renderFieldPass(pass, viewProj, cameraPos, viewRight, viewUp)","getOrbitalRenderer(format)","renderOrbitalPass(pass, viewProj, cameraPos, viewRight, viewUp, instanceCount)","isReady()","getActiveEmitters()","clearAllEmitters()","spawnBurst(position, preset = 'explosion', count = 50)","spawnDustPuff(position, color, intensity = 0.5, normal)","getParticleSettings()","getParticles()","setParticleSettings(settings)","getParticlePerformanceStats()","startParticleRewind()","stopParticleRewind()","seekParticleTime(timeMs)","setParticleRewindSpeed(speed)","getParticleRewindInfo()","isParticleRewinding()","clearParticleSnapshots()","truncateParticleSnapshotsAfterTime(timeMs)","setParticleEasing(easingType)","setAdvancedInterpolation(enabled)","getInterpolationMode()","getParticleEasingTypes()","initAdvancedFeatures(options = {})","resetQualityScale()","updateVolumeSystem(encoder, camera)","renderVolumeSystem(pass, sceneColorTexture, sceneDepthTexture)","setVolumeMode(mode)","setVolumeEnabled(enabled)","toggleVolumeRendering()","isVolumeReady()","getVolumeStats()","setVolumeBounds(min, max)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":3,"text":"Update emitter configuration Parameters: (number) — Entity ID (Object) — New configuration Enable an emitter Parameters: (number) — Entity ID Disable an emitter Parameters: (number) — Entity ID Toggle emitter on/off Parameters: (number) — Entity ID Returns: New enabled state Check if emitter is enabled Parameters: (number) — Entity ID Returns: Enabled state Get emitter by entity ID (for inspector UI binding) Parameters: (number) — Entity ID Returns: Emitter object or null Check if an entity has an emitter Parameters: (number) — Entity ID Returns: True if entity has an emitter Save emitter config to entity metadata for serialization Parameters: (Object) — Editor instance with scene.entities (number) — Entity ID Returns: True if saved successfully Seed the particle RNG with a shared collab seed. Call at play start so all peers produce identical particle sequences. Parameters: (number) — Shared 32 bit seed from collab play sync (number) — Starting tick (0 at play start) Feed the quality stack once per displayed frame using measured wall clock time. Fixed simulation ticks must not drive this API because a constant 16.67 ms input hides real render pressure and prevents adaptive quality from reacting. Return a serializable, truthful snapshot of every active particle quality layer. Prepare a debug renderer for use (call before switching to debug mode) Parameters: (string) — Debug mode name Returns: True if ready Check if a debug renderer is ready Parameters: (string) — Debug mode name Render particles to depth texture Parameters: (GPURenderPassEncoder) — Render pass (Object) — Camera data with viewProj matrix Render particles normals to texture Render particles albedo to texture Render particles lighting to texture Render particles velocity to texture Render particles age to","contentHash":"79d514c30eaf3b34f515b39f8bb5a4c7042488acb235988c1fd56e564a005e6b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorParticles.md::0002","path":"editor/reference/modules/EditorParticles.md","title":"modules/EditorParticles.js","description":"","kind":"reference","source":"editor/js/modules/EditorParticles.js","updated":"","headings":["modules/EditorParticles.js","Functions","applyParticleTimelineSettings(editor)","async initParticleSystem(editor, device, format)","stopParticleAudio()","destroyParticleSystem()","syncWorldSystemsToEmitters()","registerEmitter(entityId, config)","unregisterEmitter(entityId)","createComposedSpellEffect(editor, sourceEntityId, elements, baseConfig)","updateEmitter(entityId, config)","enableEmitter(entityId)","disableEmitter(entityId)","toggleEmitter(entityId)","isEmitterEnabled(entityId)","getEmitter(entityId)","hasEmitter(entityId)","saveEmitterToECS(editor, entityId)","seedParticleRng(seed, tick = 0)","saveAllEmittersToECS(editor)","updateParticleQuality(editor, frameDt, cameraPosition = null)","getParticleQualityStackStatus()","stepParticles(editor, dt)","async prepareDebugRenderer(mode)","isDebugRendererReady(mode)","renderParticlesDepth(pass, camera)","renderParticlesNormals(pass, camera)","renderParticlesAlbedo(pass, camera)","renderParticlesLighting(pass, camera)","renderParticlesVelocity(pass, camera)","renderParticlesAge(pass, camera)","renderParticlesEmissive(pass, camera)","renderParticlesSize(pass, camera)","renderParticlesThermal(pass, camera)","setThermalEnabled(enabled)","isThermalEnabled()","renderParticles(pass, camera, depthTextureView, depthScale)","getParticleCount()","clearParticles()","getParticleDecals()","getDecalSpawner()","getExtractedParticleLights()","getParticleLightSystem()","getDistortionRenderer(width, height, sceneFormat)","initDistortion(sceneColorView)","executeDistortionPass(encoder, frameData)","executeDistortionComposite(pass)","resizeDistortion(width, height)","getTrailHistorySystem()","renderTrailHistoryPass(pass, viewProj, cameraPos, time)","getBeamRenderer(format)","renderBeamPass(pass, viewProj, viewRight, viewUp, time, segmentCount)","getBeamSegmentCount()","updateBeamParams(params)","getExistingMeshRenderer()","getMeshRenderer(format, meshConfig)","setParticleMeshGeometry(mesh)","renderMeshPass(pass, viewProj, cameraPos, time, instanceCount)","hasLiquidEmitters()","getLiquidSurfaceTint()","getSPHSurfaceRendererHandle(format, width, height)","setSPHSurfaceTintColor(tint)","initSPHComposite(sceneColorView)","renderSPHSurfacePass(encoder, options)","compositeSPHSurfacePass(pass)","getBondRenderer(format)","computeAndUploadVisualBonds()","renderBondPass(pass, viewProj, cameraPos, viewRight, viewUp)","setBondVisualsEnabled(enabled)","setBondRadius(radius)","getFieldRenderer(format)","updateFieldVisualization(chargedParticles, gridConfig)","renderFieldPass(pass, viewProj, cameraPos, viewRight, viewUp)","getOrbitalRenderer(format)","renderOrbitalPass(pass, viewProj, cameraPos, viewRight, viewUp, instanceCount)","isReady()","getActiveEmitters()","clearAllEmitters()","spawnBurst(position, preset = 'explosion', count = 50)","spawnDustPuff(position, color, intensity = 0.5, normal)","getParticleSettings()","getParticles()","setParticleSettings(settings)","getParticlePerformanceStats()","startParticleRewind()","stopParticleRewind()","seekParticleTime(timeMs)","setParticleRewindSpeed(speed)","getParticleRewindInfo()","isParticleRewinding()","clearParticleSnapshots()","truncateParticleSnapshotsAfterTime(timeMs)","setParticleEasing(easingType)","setAdvancedInterpolation(enabled)","getInterpolationMode()","getParticleEasingTypes()","initAdvancedFeatures(options = {})","resetQualityScale()","updateVolumeSystem(encoder, camera)","renderVolumeSystem(pass, sceneColorTexture, sceneDepthTexture)","setVolumeMode(mode)","setVolumeEnabled(enabled)","toggleVolumeRendering()","isVolumeReady()","getVolumeStats()","setVolumeBounds(min, max)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":2,"chunkCount":3,"text":"normals to texture Render particles albedo to texture Render particles lighting to texture Render particles velocity to texture Render particles age to texture Render particles emissive to texture Render particles size to texture Render particles thermal/blackbody to texture Enable/disable blackbody thermal coloring in the main SDF render. When disabled (default), particles render with base colors only. Use the Thermal debug pass to visualize temperature separately. Parameters: (boolean) — No description in source JSDoc. Returns: Whether blackbody thermal coloring is enabled in the main render. Render particles to the current render pass Parameters: (GPURenderPassEncoder) — Render pass (Object) — Cam","contentHash":"ff62b9a920a14dcdb41ec82b90a5739cc715a8333917bb6a0253902958a852f6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorPhysicalMaterial.md::0000","path":"editor/reference/modules/EditorPhysicalMaterial.md","title":"modules/EditorPhysicalMaterial.js","description":"","kind":"reference","source":"editor/js/modules/EditorPhysicalMaterial.js","updated":"","headings":["modules/EditorPhysicalMaterial.js","Functions","clearPlayState()","setupPhysicalMaterialBridge(editor)","handleCollision(editor, entityIdA, entityIdB, impactForce, contactPoint, contactNormal, massA, massB)","applyDamage(editor, entityId, amount)","resetDamage(editor, entityId)","async convertToSoftBody(editor, entityId)","async deformAtImpact(editor, entityId, contactPoint, contactNormal, normalizedForce)","async fractureEntity(editor, entityId, contactPoint, contactNormal, impactForce, normalizedForce)","updateDebris(editor)","syncColliderFromMaterial(editor, entityId)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ EditorPhysicalMaterial.js — Runtime bridge for physical material simulation Connects PhysicalMaterial ECS component to existing physics systems: Collision → damage accumulation Damage exceeds threshold → deform (voxel crater) or fracture (Voronoi) Fracture spawns real ECS entities with Renderable + PhysicsBody + Collider Material specific debris FX (dust, sparks, splinters) Fragment count scales with impact energy Brittleness determines shatter vs bend behavior Lazy loads heavy modules (VoronoiFracture, AutoTetMesh) only when triggered. ============================================================================ Functions Clear all play session state. Must be called when exiting play mode so that damage/fracture/deformation caches don't persist into the next session. Handle a collision between two entities. Called from EditorPhysics.js contact callback. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — — magnitude of collision impulse (number[]) — — [x, y, z] world space contact (number[]) — — [nx, ny, nz] collision normal Apply direct damage to an entity (e.g., from explosions, scripts). Reset damage on an entity. Convert a rigid entity to a soft body on the fly. Uses AutoTetMesh to generate tet volume, then PBD solver. Deform mesh at impact point by carving a crater via voxel subtraction. If the carve disconnects pieces, broken off pieces become fragment entities. Fracture an entity into visible fragment ECS entities using VoronoiFracture. Each fragment gets its own Renderable, PhysicsBody, and","contentHash":"7c03ee1def17731b24949361ede776e335f5371202a5f0a4a0f17ea1bb02edc0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorPhysicalMaterial.md::0001","path":"editor/reference/modules/EditorPhysicalMaterial.md","title":"modules/EditorPhysicalMaterial.js","description":"","kind":"reference","source":"editor/js/modules/EditorPhysicalMaterial.js","updated":"","headings":["modules/EditorPhysicalMaterial.js","Functions","clearPlayState()","setupPhysicalMaterialBridge(editor)","handleCollision(editor, entityIdA, entityIdB, impactForce, contactPoint, contactNormal, massA, massB)","applyDamage(editor, entityId, amount)","resetDamage(editor, entityId)","async convertToSoftBody(editor, entityId)","async deformAtImpact(editor, entityId, contactPoint, contactNormal, normalizedForce)","async fractureEntity(editor, entityId, contactPoint, contactNormal, impactForce, normalizedForce)","updateDebris(editor)","syncColliderFromMaterial(editor, entityId)","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"become fragment entities. Fracture an entity into visible fragment ECS entities using VoronoiFracture. Each fragment gets its own Renderable, PhysicsBody, and Collider. Fragment count scales with impact energy (Phase D). Update debris lifecycle — call from physics step. Removes expired debris entities. Sync collider friction/restitution from material properties. Call after material changes. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"22f5cc4ebd333b3d799666f6209260cc039587653d32d37f4ecfaacc6bdd805d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorPhysics.md::0000","path":"editor/reference/modules/EditorPhysics.md","title":"modules/EditorPhysics.js","description":"","kind":"reference","source":"editor/js/modules/EditorPhysics.js","updated":"","headings":["modules/EditorPhysics.js","Functions","async initializePhysicsWorld(editor)","debugVerifyCollisions(editor)","destroyPhysicsWorld(editor)","stepPhysics(editor, dt)","createHingeJoint(world, bodyA, bodyB, options = {})","createBallJoint(world, bodyA, bodyB, options = {})","createSpringJoint(world, bodyA, bodyB, options = {})","createParticleChain(options = {})","createChain(world, options = {})","createSoftBody(device, options = {})","generateSoftBodyParticles(sdfFunc, bounds, density = 100)","initFractureSystem(device)","preFractureMesh(mesh, options = {})","generateFragmentColliders(fragments, resolution = 6)","createBreakableCollider(options = {})","raycast(world, origin, direction, maxDistance = 1000)","raycastCone(world, origin, direction, coneAngle, rayCount = 8, maxDistance = 100)","createTriggerZone(shape, size, position = [0, 0, 0])","pointInTrigger(point, trigger)","overlapSphere(center, radius, entities)","overlapBox(center, halfExtents, entities)","getColliderForType(editor, type)","getGeometryForType(type)","addSimTime(editor, dt)","recordHistorySnapshot(editor)","seekToTime(editor, targetTime)","async registerPhysicsSystem(editor)","async createGroundPlane(editor)","async updatePhysicsWorld(editor)","createMeshColliderDecomposed(vertices, indices, options = {})","createSDFCollider(sdfFunc, bounds, options = {})","createVoxelCollider(voxels, sizeX, sizeY, sizeZ, voxelSize = 0.1)","createSDFGridFromFunction(sdfFunc, bounds, resolution = 32)","checkSDFCollision(grid, point, radius = 0)","async createPhysicsChain(editor, startPos, endPos, options = {})","enableSpeculativeCCDForAll(editor)","createBroadPhaseGrid(cellSize = 1.0)","updateBroadPhaseGrid(editor, grid)","getBroadPhasePairs(grid)","Constants","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Public API to manually verify collision state (useful for debugging) Create a hinge joint between two bodies Parameters: (Object) — PhysX world (Object) — First body (anchor) (Object) — Second body (swings) (Object) — Joint options Create a ball socket joint (spherical) Create a spring/distance joint Create a particle chain using PBD (Position Based Dynamics) Parameters: (Object) — Chain configuration Returns: Chain simulation object Create a chain of rigid body links Create a soft body simulation Parameters: (Object) — Soft body config Generate particles for a soft body in a shape Parameters: (Function) — SDF defining the shape (Object) — Bounding box (number) — Particles per unit volume Initialize fracture system Pre fracture a mesh into fragments Parameters: (Object) — Mesh to fracture { positions, indices } (Object) — Fracture options Generate colliders for each fragment Create breakable compound collider that fractures on impact Cast a ray into the physics world Parameters: (Object) — PhysX world (number[]) — Ray start [x,y,z] (number[]) — Ray direction (will be normalized) (number) — Maximum ray length Returns: Hit info { hit, distance, position, normal, entityId } or null Cast multiple rays in a cone pattern (for shotgun spread, vision cone, etc.) Parameters: (Object) — PhysX world (number[]) — Ray start (number[]) — Center direction (number) — Spread angle in radians (number) — Number of rays (number) — Max ray length Returns: Array of hit results Create a trigger zone collider config Parameters: (string) — 'box' or 'sphere' (Object) — { halfExtents } for box, {","contentHash":"b7b0a4e2c65582af4059ad13efb4d045fbee44226240ed8fc3139eef26c9a46a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorPhysics.md::0001","path":"editor/reference/modules/EditorPhysics.md","title":"modules/EditorPhysics.js","description":"","kind":"reference","source":"editor/js/modules/EditorPhysics.js","updated":"","headings":["modules/EditorPhysics.js","Functions","async initializePhysicsWorld(editor)","debugVerifyCollisions(editor)","destroyPhysicsWorld(editor)","stepPhysics(editor, dt)","createHingeJoint(world, bodyA, bodyB, options = {})","createBallJoint(world, bodyA, bodyB, options = {})","createSpringJoint(world, bodyA, bodyB, options = {})","createParticleChain(options = {})","createChain(world, options = {})","createSoftBody(device, options = {})","generateSoftBodyParticles(sdfFunc, bounds, density = 100)","initFractureSystem(device)","preFractureMesh(mesh, options = {})","generateFragmentColliders(fragments, resolution = 6)","createBreakableCollider(options = {})","raycast(world, origin, direction, maxDistance = 1000)","raycastCone(world, origin, direction, coneAngle, rayCount = 8, maxDistance = 100)","createTriggerZone(shape, size, position = [0, 0, 0])","pointInTrigger(point, trigger)","overlapSphere(center, radius, entities)","overlapBox(center, halfExtents, entities)","getColliderForType(editor, type)","getGeometryForType(type)","addSimTime(editor, dt)","recordHistorySnapshot(editor)","seekToTime(editor, targetTime)","async registerPhysicsSystem(editor)","async createGroundPlane(editor)","async updatePhysicsWorld(editor)","createMeshColliderDecomposed(vertices, indices, options = {})","createSDFCollider(sdfFunc, bounds, options = {})","createVoxelCollider(voxels, sizeX, sizeY, sizeZ, voxelSize = 0.1)","createSDFGridFromFunction(sdfFunc, bounds, resolution = 32)","checkSDFCollision(grid, point, radius = 0)","async createPhysicsChain(editor, startPos, endPos, options = {})","enableSpeculativeCCDForAll(editor)","createBroadPhaseGrid(cellSize = 1.0)","updateBroadPhaseGrid(editor, grid)","getBroadPhasePairs(grid)","Constants","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":3,"text":"ray length Returns: Array of hit results Create a trigger zone collider config Parameters: (string) — 'box' or 'sphere' (Object) — { halfExtents } for box, { radius } for sphere (number[]) — Local offset [x,y,z] Returns: Collider config with isTrigger=true Check if a point is inside a trigger zone Parameters: (number[]) — Point to test [x,y,z] (Object) — Trigger config with shape, position, size Find all entities within a sphere (using spatial hash if available) Parameters: (number[]) — Sphere center [x,y,z] (number) — Search radius (Array) — Array of entities with position Returns: Entities within radius Find all entities within a box Create a mesh collider with automatic convex decomposition for complex shapes. Use this when you have a mesh that's too complex for a single convex hull. Parameters: (Float32Array) — Mesh vertex positions (Uint32Array) — Triangle indices (optional) (Object) — Decomposition options Returns: Compound collider config Create a collider from an SDF function with automatic voxelization. Use this for procedural or mathematical shapes. Parameters: (Function) — SDF function (x, y, z) = distance (negative = inside) (Object) — { min: [x,y,z], max: [x,y,z] } (Object) — { resolution, samples, threshold } Returns: Compound collider config Create a collider grid from a 3D voxel array. Use this when you already have voxel data. Parameters: (Uint8Array) — 3D voxel data (1 = solid, 0 = empty) (number) — Grid size X (number) — Grid size Y (number) — Grid size Z (number) — Size of each voxel in world units Returns: Compound collider config Create an SDF grid for collision detection with complex shapes. Useful for soft body or particle interactions. Parameters: (Function) — SDF function (Object) — Bounding box (number) — Grid resolution Returns: SDF grid for","contentHash":"7e5119ae771ddd056bfe8b44a8a16d250906da423ff0a57a18c177f78d999fbf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorPhysics.md::0002","path":"editor/reference/modules/EditorPhysics.md","title":"modules/EditorPhysics.js","description":"","kind":"reference","source":"editor/js/modules/EditorPhysics.js","updated":"","headings":["modules/EditorPhysics.js","Functions","async initializePhysicsWorld(editor)","debugVerifyCollisions(editor)","destroyPhysicsWorld(editor)","stepPhysics(editor, dt)","createHingeJoint(world, bodyA, bodyB, options = {})","createBallJoint(world, bodyA, bodyB, options = {})","createSpringJoint(world, bodyA, bodyB, options = {})","createParticleChain(options = {})","createChain(world, options = {})","createSoftBody(device, options = {})","generateSoftBodyParticles(sdfFunc, bounds, density = 100)","initFractureSystem(device)","preFractureMesh(mesh, options = {})","generateFragmentColliders(fragments, resolution = 6)","createBreakableCollider(options = {})","raycast(world, origin, direction, maxDistance = 1000)","raycastCone(world, origin, direction, coneAngle, rayCount = 8, maxDistance = 100)","createTriggerZone(shape, size, position = [0, 0, 0])","pointInTrigger(point, trigger)","overlapSphere(center, radius, entities)","overlapBox(center, halfExtents, entities)","getColliderForType(editor, type)","getGeometryForType(type)","addSimTime(editor, dt)","recordHistorySnapshot(editor)","seekToTime(editor, targetTime)","async registerPhysicsSystem(editor)","async createGroundPlane(editor)","async updatePhysicsWorld(editor)","createMeshColliderDecomposed(vertices, indices, options = {})","createSDFCollider(sdfFunc, bounds, options = {})","createVoxelCollider(voxels, sizeX, sizeY, sizeZ, voxelSize = 0.1)","createSDFGridFromFunction(sdfFunc, bounds, resolution = 32)","checkSDFCollision(grid, point, radius = 0)","async createPhysicsChain(editor, startPos, endPos, options = {})","enableSpeculativeCCDForAll(editor)","createBroadPhaseGrid(cellSize = 1.0)","updateBroadPhaseGrid(editor, grid)","getBroadPhasePairs(grid)","Constants","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":2,"chunkCount":3,"text":"Useful for soft body or particle interactions. Parameters: (Function) — SDF function (Object) — Bounding box (number) — Grid resolution Returns: SDF grid for collision queries Check if a point or sphere collides with an SDF grid. Parameters: (SDFGrid) — SDF grid (Array) — Point position [x, y, z] (number) — Collision radius (0 for point) Returns: Collision info or null Create articulated chain between two points. Use for physics based chains, ropes, cables. Parameters: (Object) — Editor instance (Array) — Start position [x, y, z] (Array) — End position [x, y, z] (Object) — Chain options Returns: Articulation handle Enable speculative CCD on all dynamic bodies in the physics world. Helps prevent fast moving","contentHash":"4828e6428bc6e4f53b63df4075a59fd9ffe5122efed674a6eafc4f759bf8d123"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorPhysicsSim.md::0000","path":"editor/reference/modules/EditorPhysicsSim.md","title":"modules/EditorPhysicsSim.js","description":"","kind":"reference","source":"editor/js/modules/EditorPhysicsSim.js","updated":"","headings":["modules/EditorPhysicsSim.js","Functions","initRopeSimulation(editor, entityId, position, opts)","initRopeSimulationBetweenPoints(editor, entityId, startPos, endPos, opts)","initRopeSimulationFromComponent(editor, entityId)","initPhysXRopeSimulation(editor, entityId, startPos, endPos, opts)","initGPURopeSimulation(editor, entityId, startPos, endPos, opts)","initWireSimulation(editor, entityId, position, opts)","initHairSimulation(editor, entityId, position, opts)","initChainSimulation(editor, entityId, position, opts)","async initClothSimulation(editor, entityId, position, opts)","initSoftBodySimulation(editor, entityId, position, opts)","async initSoftBodyFromMesh(editor, entityId, meshPositions, meshIndices, opts = {})","initBalloonSimulation(editor, entityId, position, opts)","initFluidSimulation(editor, entityId, position, opts)","stepPhysicsSimulations(editor, dt)","syncSimulationsToComponents(editor)","initTwistedRopeSimulation(editor, entityId, startPos, endPos, opts = {})","destroyPhysicsSimulation(editor, entityId, options = {})","updateRopeForAnchorMove(editor, ropeEntityId)","updateRopesForEntityMove(editor, movedEntityId)","setupPhysicsSim(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorPhysicsSim.js Physics Simulation Management for Editor Manages rope, wire, hair, cloth, and soft body simulations in the editor. Uses PBD solver with OGC contact model for penetration free simulation. Functions Initialize rope simulation for an entity Initialize rope simulation between two points (for tool created ropes) Initialize PhysX articulation based rope simulation Uses NVIDIA PhysX for more stable, unified physics simulation Initialize GPU based rope simulation using unified particle system Uses GPU constraint solver for native rope physics (Phase 2) Initialize a soft body from an arbitrary surface mesh using AutoTetMesh. Converts the surface mesh to a tetrahedral volume mesh, then creates PBD particles and constraints from the tet nodes. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (Float32Array) — Surface mesh positions (stride 3) (Uint32Array) — Surface mesh indices (stride 3) (Object) — No description in source JSDoc. (string) — 'preview' 'balanced' 'quality' (number) — Override grid resolution (number) — Distance constraint stiffness (0 1) (number) — Velocity damping (0 1) (number) — Gravity (negative = down) (number) — Total mass (string) — 'none' 'bottom' 'top' (auto pin nodes) Returns: PBD solver or null on failure Initialize balloon simulation (pressure based soft body) Initialize fluid simulation (SPH density based) Step all physics simulations Sync all active simulation particle data to ECS components. Call this before saving the scene to ensure particles are persisted. Initialize a twisted rope simulation with multiple threads Creates helical thread arrangement that twists together like real rope","contentHash":"a56c52c0f833a6bc06147d0cb6b08e3b41b708a84e330e39b33589590a1d8bc4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorPhysicsSim.md::0001","path":"editor/reference/modules/EditorPhysicsSim.md","title":"modules/EditorPhysicsSim.js","description":"","kind":"reference","source":"editor/js/modules/EditorPhysicsSim.js","updated":"","headings":["modules/EditorPhysicsSim.js","Functions","initRopeSimulation(editor, entityId, position, opts)","initRopeSimulationBetweenPoints(editor, entityId, startPos, endPos, opts)","initRopeSimulationFromComponent(editor, entityId)","initPhysXRopeSimulation(editor, entityId, startPos, endPos, opts)","initGPURopeSimulation(editor, entityId, startPos, endPos, opts)","initWireSimulation(editor, entityId, position, opts)","initHairSimulation(editor, entityId, position, opts)","initChainSimulation(editor, entityId, position, opts)","async initClothSimulation(editor, entityId, position, opts)","initSoftBodySimulation(editor, entityId, position, opts)","async initSoftBodyFromMesh(editor, entityId, meshPositions, meshIndices, opts = {})","initBalloonSimulation(editor, entityId, position, opts)","initFluidSimulation(editor, entityId, position, opts)","stepPhysicsSimulations(editor, dt)","syncSimulationsToComponents(editor)","initTwistedRopeSimulation(editor, entityId, startPos, endPos, opts = {})","destroyPhysicsSimulation(editor, entityId, options = {})","updateRopeForAnchorMove(editor, ropeEntityId)","updateRopesForEntityMove(editor, movedEntityId)","setupPhysicsSim(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"particles are persisted. Initialize a twisted rope simulation with multiple threads Creates helical thread arrangement that twists together like real rope fibers Parameters: (Object) — Editor instance (number) — Entity ID (Array) — Start position [x, y, z] (Array) — End position [x, y, z] (Object) — Options from TwistedRope component Returns: The solver instance Destroy a physics simulation. Parameters: (Object) — Editor instance (number) — Entity ID (Object) — Options (boolean) — If true, don't sync particles to component (used when exiting play mode) Check all ropes that are attached to a given entity and update them. Call this when an entity's transform changes in edit mode. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"93a0af5b47512e123d1ef02cfc66c23a77fe90899943e53336cbff24d19d065e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorPointCloud.md::0000","path":"editor/reference/modules/EditorPointCloud.md","title":"modules/EditorPointCloud.js","description":"","kind":"reference","source":"editor/js/modules/EditorPointCloud.js","updated":"","headings":["modules/EditorPointCloud.js","Functions","async spawnPointCloudAsset(editor, asset)","spawnPointCloudEntity(editor, pcData, opts = {})","unregisterPointCloud(editor, entityId)","getPointCloudData(editor, entityId)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ EditorPointCloud.js — Point cloud entity management Handles spawning point cloud entities from asset files (PLY/PCD/XYZ), managing the PointCloud component, and bridging to the EntityMeshRenderer point sprite render pass. ============================================================================ Functions Load a point cloud asset, parse it, and create an entity in the scene. Parameters: (Object) — EditorApp instance (Object) — Asset entry from AssetRegistry Create a point cloud entity from raw point data. Parameters: (Object) — EditorApp instance (Object) — No description in source JSDoc. (string) — Entity name (string) — Source asset UUID (optional) (number) — Point radius in world units (number[]) — Fallback RGBA color [r,g,b,a] 0 1 Returns: entityId Unregister a point cloud entity from the renderer. Get point cloud data for an entity (reads PointCloud component). Returns: null} <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"4536463c850b625001529a39094c70a9223272474f00cc7181ede6be869cfd98"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorScene.md::0000","path":"editor/reference/modules/EditorScene.md","title":"modules/EditorScene.js","description":"","kind":"reference","source":"editor/js/modules/EditorScene.js","updated":"","headings":["modules/EditorScene.js","Functions","createEntity(editor, name = 'Entity', options = {})","selectEntity(editor, entityId)","getWeldedGroup(editor, entityId)","async deleteEntity(editor, entityId)","createFolder(editor, name = 'New Folder', parentId = null)","setFolderParent(editor, folderId, parentId)","renameEntity(editor, entityId, newName)","renameFolder(editor, folderId, newName)","deleteFolder(editor, folderId)","setEntityParent(editor, entityId, parentId)","moveEntityToFolder(editor, entityId, folderId)","captureWorldSnapshot(editor)","captureWorldSnapshotDelta(editor)","restoreWorldSnapshot(editor, snapshot)","async loadScene(editor, scenePath)","async saveScene(editor)","cleanupInvalidEntities(editor, intervalMs = 1000)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get all entities in a welded group (parent + all children) If the entity is a child, finds its parent and returns the whole group If the entity is a parent, returns itself + all children If not welded, returns just the entity <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"ff594c5e0ae9d6119b98b6679453f0a4f25db4ec4982603fd21fdda57bff0e34"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorSettings.md::0000","path":"editor/reference/modules/EditorSettings.md","title":"modules/EditorSettings.js","description":"","kind":"reference","source":"editor/js/modules/EditorSettings.js","updated":"","headings":["modules/EditorSettings.js","Functions","showSettingsDialog()","Constants","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorSettings.js Global Editor Settings with Persistence Features: Centralized settings management localStorage persistence Settings UI with categories/tabs Live preview of changes Functions Constants Re exports , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"8d5fb2833098fbcaa5ea3dabae3ddb35b95413b76574347ceff87df4df01d75d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorSpawnMenu.md::0000","path":"editor/reference/modules/EditorSpawnMenu.md","title":"modules/EditorSpawnMenu.js","description":"","kind":"reference","source":"editor/js/modules/EditorSpawnMenu.js","updated":"","headings":["modules/EditorSpawnMenu.js","Functions","setupSpawnMenu(editor)","renderSpawnCategories(editor)","renderSpawnGrid(editor)","spawnFromMenu(editor, item)","createEmitter(editor, markerEntityId, type = 'gas')","getEmitterColor(type)","toggleSpawnMenu(editor)","openSpawnMenu(editor)","closeSpawnMenu(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"7cb9b67c34a31e0552866d60729586fd45b7813fb581d02dcdb2cb82d65d1eeb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorTools.md::0000","path":"editor/reference/modules/EditorTools.md","title":"modules/EditorTools.js","description":"","kind":"reference","source":"editor/js/modules/EditorTools.js","updated":"","headings":["modules/EditorTools.js","Classes","class ToolManager","Functions","setupTools(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorTools.js GMod style Tool System Manages interactive tools like chain tool, weld tool, constraint tool. Tools are activated from spawn menu and handle click events in viewport. Classes Method Signature Summary Activate a tool Deactivate current tool Handle right click to cancel/deselect tool Handle viewport click while tool is active Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"6df2667e68361dfbcb24db2d8f0ba4e1dbce50ea83b7a523c9df4864fca74dd5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorTransitions.md::0000","path":"editor/reference/modules/EditorTransitions.md","title":"modules/EditorTransitions.js","description":"","kind":"reference","source":"editor/js/modules/EditorTransitions.js","updated":"","headings":["modules/EditorTransitions.js","Constants","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorTransitions.js Transition Effects System Features: Multiple transition effects (fade, dissolve, pixelate, wipe, zoom, etc.) Canvas based effects for complex transitions Random effect selection Configurable duration and easing Can be used for dialogs, scenes, or any UI element Constants Re exports , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"6d4cbe816d9566e8db64757b598a9400cbb855f6e9cfc7f0a8b273dbf8b32df7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorUI.md::0000","path":"editor/reference/modules/EditorUI.md","title":"modules/EditorUI.js","description":"","kind":"reference","source":"editor/js/modules/EditorUI.js","updated":"","headings":["modules/EditorUI.js","Functions","showPrompt(title, message, defaultValue = '')","showConfirm(title, message, options = {})","showAlert(title, message)","setupInspectorTabs(editor)","setupResizablePanels(editor)","setupConsoleResize(editor, saveSizes)","setupToolbar(editor)","setupSceneSelector(editor)","async refreshSceneSelector(editor)","setupViewportToolbar(editor)","updateToolbarState(editor)","async handleMenuAction(editor, action)","setupTimelineScrubbing(editor)","updateTimelineUI(editor, skipMarkers = false)","setupBottomTabs(editor)","setupConsole(editor)","addConsoleLine(editor, type, text)","isTypingInUi()","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ EditorUI.js UI Setup and Menu Handling ============================================================================ Functions Show a custom prompt dialog Parameters: (string) — Dialog title (string) — Dialog message (string) — Default input value Returns: User input or null if cancelled Show a custom confirm dialog Parameters: (string) — Dialog title (string) — Dialog message (Object) — Button options Returns: True if confirmed, false if cancelled Show a custom alert dialog Parameters: (string) — Dialog title (string) — Dialog message Setup scene selector dropdown in viewport header Refresh scene selector with available scenes Re exports , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"af5710915ab2bdc1ec69a6240dbb00f659a2b0e9e027bd0fc8723d4405e9d448"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorUIComponents.md::0000","path":"editor/reference/modules/EditorUIComponents.md","title":"modules/EditorUIComponents.js","description":"","kind":"reference","source":"editor/js/modules/EditorUIComponents.js","updated":"","headings":["modules/EditorUIComponents.js","Functions","showToast(message, options = {})","setTheme(themeName)","getCurrentTheme()","getThemes()","initTheme()","showThemePicker()","showContextMenu(event, items)","hideContextMenu()","initTooltips()","showShortcutsHelp()","initUIComponents()","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Show a toast notification Parameters: (string) — Message to display (Object) — Toast options (string) — 'info' 'success' 'warning' 'error' (number) — Auto dismiss time in ms (0 = persistent) (string) — Optional action button text (Function) — Action button callback Apply a theme by name delegates to themeManager Get current theme name Get all available themes Initialize theme from localStorage Show theme picker dialog with categories Show a custom context menu Parameters: (MouseEvent) — The right click event (Array) — Menu items [{label, icon?, action?, separator?, disabled?, submenu?}] Initialize tooltip system Show keyboard shortcuts overlay Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"b73e1d6f690d742ca73b974458288e5b223b793af98e29e5ec809cbd0801e944"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorWelding.md::0000","path":"editor/reference/modules/EditorWelding.md","title":"modules/EditorWelding.js","description":"","kind":"reference","source":"editor/js/modules/EditorWelding.js","updated":"","headings":["modules/EditorWelding.js","Functions","createFixedJoint(editor, bodyA, bodyB, entityB)","restoreWeldsFromComponents(editor)","performInitialWelding(editor)","setAutoWeld(editor, enabled)","processWeldContacts(editor)","clearAllWelds(editor)","preScanEmitterWelds(editor)","detectWeldGroups(editor)","buildWeldGroupMeshes(editor, entityMeshRenderer, inferMeshTypeFn)","syncWeldedEntities(editor, rotateVectorByQuatFn)","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EditorWelding.js Auto weld system for physics bodies Extracted from EditorPhysics.js for modularity Features: Auto weld colliding bodies into rigid compounds D6 joint based welding with PhysX optimizations ECS component persistence for scene save/load Emitter weld pre scanning Functions Create a fixed joint between two bodies Uses D6 joint locked in all axes with PhysX optimizations Restore welds from WeldConstraint components (for scene load) Perform initial welding of nearby bodies before simulation starts. Graph based approach: 1. Filter eligible entities (skip ragdolls, skinned meshes, spheres/capsules) 2. Find all directly touching pairs via AABB overlap 3. Create joints for each touching pair 4. detectWeldGroups (called after) finds connected components from joints Spheres and capsules are excluded because they are projectiles/characters, not structural elements. Only box/convexMesh entities form weldable structures. Enable/disable auto welding of colliding bodies Process potential welds by checking body proximity (runtime) Break all welds and reset Pre scan to detect which emitters should be welded based on AABB surface proximity. Uses entity scale and physics body extents to compute surface to surface distance, so emitters touching any face of a large/tall object get welded correctly. Detect connected components of welded entities (weld groups). Runs AFTER performInitialWelding — uses editor.weldParentChildren + weldJoints. Outputs stored on editor: weldGroups: Map<rootEntityId, Set<memberEntityIds (root included in set) weldChildToRoot: Map<childEntityId, rootEntityId (O(1) render skip) weldGroupLocalTransforms: Map<entityId, {localPos, localRot, localScale} Build merged","contentHash":"b0d7f4481eddf1713bcaadbd1bbe68c60038062c2a08c08546b560fc758f874d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EditorWelding.md::0001","path":"editor/reference/modules/EditorWelding.md","title":"modules/EditorWelding.js","description":"","kind":"reference","source":"editor/js/modules/EditorWelding.js","updated":"","headings":["modules/EditorWelding.js","Functions","createFixedJoint(editor, bodyA, bodyB, entityB)","restoreWeldsFromComponents(editor)","performInitialWelding(editor)","setAutoWeld(editor, enabled)","processWeldContacts(editor)","clearAllWelds(editor)","preScanEmitterWelds(editor)","detectWeldGroups(editor)","buildWeldGroupMeshes(editor, entityMeshRenderer, inferMeshTypeFn)","syncWeldedEntities(editor, rotateVectorByQuatFn)","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"set) weldChildToRoot: Map<childEntityId, rootEntityId (O(1) render skip) weldGroupLocalTransforms: Map<entityId, {localPos, localRot, localScale} Build merged meshes for each weld group and register them with EntityMeshRenderer. Follows Unity CombineMeshes pattern: transform child vertices into root's local space. Also stores per member mesh segment info for per frame vertex updates. Parameters: (Object) — No description in source JSDoc. (Object) — EntityMeshRenderer instance (needs getMeshData, registerCustomMesh) (Function) — (entityMeta) = { meshType } Sync welded child entity transforms to their parent bodies Called from stepPhysics loop Re exports <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"5af59dd1b54f90e928c61ba69379a5a88f1f7c9afc40833711813a61e72a2446"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/EntitySchema.md::0000","path":"editor/reference/modules/EntitySchema.md","title":"modules/EntitySchema.js","description":"","kind":"reference","source":"editor/js/modules/EntitySchema.js","updated":"","headings":["modules/EntitySchema.js","Functions","generateEntitySchema(editor, entityId)","generateSceneSchema(editor)","exportSceneToJSON(editor, pretty = true)","debugEntitySchema(editor, entityId)","debugSceneSchema(editor)","getRelationshipSummary(editor, entityId)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Generate a full JSON schema for an entity Parameters: (Object) — Editor instance (number) — Entity ID Returns: Complete entity schema Generate schemas for all entities in the scene Parameters: (Object) — Editor instance Returns: Scene schema with all entities Export scene schema to JSON string Print entity schema to console (for debugging) Print full scene schema to console (for debugging) Get a summary of entity relationships <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"e80feca8b462eaae91925dda23208c9af6d825c579f136f3550c753976a5133a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/GeometryBuilders.md::0000","path":"editor/reference/modules/GeometryBuilders.md","title":"modules/GeometryBuilders.js","description":"","kind":"reference","source":"editor/js/modules/GeometryBuilders.js","updated":"","headings":["modules/GeometryBuilders.js","Functions","createWedgeGeometry()","createPrismGeometry()","createStairsGeometry()","createArchGeometry()","createHelixGeometry()","createGearGeometry()","createStarGeometry()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GeometryBuilders.js Procedural geometry generation for physics colliders Extracted from EditorPhysics.js for modularity Functions Create wedge/ramp geometry flat bottom, sloped top Create hexagonal prism geometry Create stairs geometry (4 steps) Create arch geometry with legs and curved top Create helix/spring geometry Create gear geometry with teeth Create 5 point star geometry <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"0ed92deb6bf02cd31b652a7204a01cace60c23f706a6e10826da70022f9853f4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/HotkeyManager.md::0000","path":"editor/reference/modules/HotkeyManager.md","title":"modules/HotkeyManager.js","description":"","kind":"reference","source":"editor/js/modules/HotkeyManager.js","updated":"","headings":["modules/HotkeyManager.js","Functions","showHotkeyEditor()","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: HotkeyManager.js Centralized Hotkey System with YAML style Configuration Features: Centralized hotkey definitions Easy configuration via config object (YAML style) Runtime hotkey rebinding Hotkey editor UI localStorage persistence for custom bindings Conflict detection Functions Re exports , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"483ba1b5a773fb14b9f4beb59d1ce11db33cadab8cddaa9049435f388c72e244"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/LoadingManager.md::0000","path":"editor/reference/modules/LoadingManager.md","title":"modules/LoadingManager.js","description":"","kind":"reference","source":"editor/js/modules/LoadingManager.js","updated":"","headings":["modules/LoadingManager.js","Classes","class LoadingManager","Functions","getLoadingManager()","loadingStage(stageId, subtitle = '')","loadingProgress(progress)","loadingComplete(stageId)","loadingFinish()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: LoadingManager.js Advanced loading system with progress tracking Manages dynamic loading of editor components with real progress, stage tracking, and a polished loading screen UI. Classes LoadingManager Tracks and displays loading progress Method Signature Summary Define loading stages with weights Start the loading process and show overlay Take over the instant HTML loader and enhance it with progress tracking Begin a loading stage Update progress within current stage (0 1) Complete current stage Finish loading and hide overlay Start the smooth animation loop Stop the animation loop Update just the progress bar (called from animation loop) Update text elements (status, subtitle) called on stage change Get overall progress (0 1) Register callback Emit event Create loading overlay UI Inject CSS styles Update stage indicator dots Hide overlay with cinematic animation sequence Static helper to get singleton Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"39f4cc3a463f76aaf0901dca41a4f1ace3fa5d4fbc3870b07f732f519d4ecb0a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/ModelImporter.md::0000","path":"editor/reference/modules/ModelImporter.md","title":"modules/ModelImporter.js","description":"","kind":"reference","source":"editor/js/modules/ModelImporter.js","updated":"","headings":["modules/ModelImporter.js","Functions","async parseModelFile(file)","async parsePointCloudFile(file)","parseOBJ(text)","parseGLB(arrayBuffer, modelName)","parseGLTFJson(gltf, binBuffer, modelName)","extractGLTFNodeAnimationGraph(gltf)","collectGLTFNodeInstances(gltf, suppliedGraph = null)","createModelInstanceId()","createModelPartDescriptors(result, assetId, instanceId, existingParts = null)","computeModelBounds(result)","async registerModelRuntimeMaterials(editor, result, parts)","async registerModelRuntimeMeshes(editor, result, parts, modelInstanceId = null, modelAnimation = null, modelMorphWeights = null,)","async spawnModelAsset(editor, asset)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ ModelImporter.js OBJ / glTF / GLB parsers + entity spawning ============================================================================ Functions Parse a model File into geometry data. Parameters: (File) — No description in source JSDoc. Returns: , name:string } } Parse a point cloud file into point data. Parameters: (File) — No description in source JSDoc. Returns: } Parse Wavefront OBJ text into indexed geometry. Handles v, vn, vt, f directives. Triangulates quads. Parse a GLB (binary glTF 2.0) ArrayBuffer. Extracts all mesh primitives as flat position/normal/uv/index arrays. Parse glTF JSON + optional binary buffer into mesh geometries. Load a model asset, register its mesh, and create an entity in the scene. Parameters: (Object) — EditorApp instance (Object) — Asset entry from AssetRegistry <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"4914df011b6e05d1931af372a73970cd20635997a5f970e4adb6b728e4e6c634"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/PrefabLibrary.md::0000","path":"editor/reference/modules/PrefabLibrary.md","title":"modules/PrefabLibrary.js","description":"","kind":"reference","source":"editor/js/modules/PrefabLibrary.js","updated":"","headings":["modules/PrefabLibrary.js","Functions","exportFolderAsPrefab(editor, folderId)","setCollabPrefabHooks(onSave, onDelete)","async savePrefabToFile(editor, prefab)","async exportFolder(editor, folderId)","async listPrefabs(editor)","async loadPrefabFile(editor, fileName)","async loadPrefabByUUID(editor, uuid)","instantiatePrefab(editor, prefab, targetFolderId = null, offset = [0, 0, 0])","async importPrefab(editor, fileName, targetFolderId = null, offset = [0, 0, 0])","async deletePrefab(editor, fileName)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PrefabManager.js Folder based Prefab System (File based) Based on J:\\game2 implementation proper file persistence Every entity folder is a prefab that can be: Exported to Assets/Prefabs/ .prefab.json Imported/instantiated into any scene Updated (re export overwrites) Listed and browsed Functions Export a folder as a prefab data structure Save prefab to Assets/Prefabs/ directory Export folder and save to file (combined operation) List all available prefabs in Assets/Prefabs/ Load prefab from file Load prefab by UUID Instantiate a prefab in the scene Import prefab from file and instantiate Delete prefab file <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"dac9add3f5ac12faec5d4c9ff9b1ef96442a6beb1666f4eb6f1df0946b6c2f21"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/ProjectStorage.md::0000","path":"editor/reference/modules/ProjectStorage.md","title":"modules/ProjectStorage.js","description":"","kind":"reference","source":"editor/js/modules/ProjectStorage.js","updated":"","headings":["modules/ProjectStorage.js","Functions","setCollabSaveHook(fn)","async saveProject(project)","async loadProject(projectUuid)","async listProjects()","async deleteProject(projectUuid)","getLastProjectUuid()","createProject(name = 'New Project')","async exportProject(project, options = {})","async downloadProjectBackup(project)","async importProjectFromFile(file)","enableAutoSave(project, intervalMs = 60000)","disableAutoSave()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProjectManager Save/load/export projects (pure browser, no Node.js) Uses IndexedDB + File System Access API Functions Save project to IndexedDB Load project from IndexedDB List all projects Delete project Get last opened project UUID Create new project Export project to ZIP for distribution Strips editor only data and packs for runtime Download project as JSON file (backup) Import project from JSON file <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"250b34b52a9a86602c6cc3dab73fc1a8eec26186396ec2a1e9e77d7b3388d28c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/SubScene.md::0000","path":"editor/reference/modules/SubScene.md","title":"modules/SubScene.js","description":"","kind":"reference","source":"editor/js/modules/SubScene.js","updated":"","headings":["modules/SubScene.js","Classes","class SubScene","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ SubScene.js — Parallel scene layer for debris, fragments & world environment Lives alongside the editor scene but is NOT part of it. Objects here: Are NOT in editor.scene.entities Are NOT selectable, saveable, or undoable Have their own PhysX bodies for physics simulation Are rendered via EntityMeshRenderer in a dedicated pass Have automatic lifecycle (fade, expire, cleanup) Categories: 'debris' — tiny short lived particles (dust, sparks, splinters) 'fragment' — larger breakoff chunks from fractured meshes 'env' — persistent world environment objects (no auto expire) Usage: const sub = editor.subScene; sub.spawn({ category: 'debris', meshType: 'cube', position, velocity, ... }); sub.spawnFragment(parentEntityId, { meshType, position, ... }); sub.tick(dt); // called from stepPhysics sub.render(rp, vp, emr); // called from Viewport sub.clear(); // on play→edit transition ============================================================================ Classes Method Signature Summary Refresh references after physics world recreate (play mode re enter). Extract snapshot of all fragment & env items BEFORE clear(). Returns array of plain objects with current physics positions and all material/mesh data needed to promote them to real scene entities. Remove all items and their physics bodies. Spawn a SubScene object (debris, fragment, or env). Convenience: spawn a fragment from a parent entity. Same as spawn() with category='fragment' and parentEntityId set. Convenience: spawn N debris pieces in a burst around a point. Render all SubScene objects via EntityMeshRenderer. Uses the main solid render pipeline (not X","contentHash":"d25e2db0b8a6c61083c28c1829175df49677f7423051cfc897b1cf8da37c6e45"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/modules/SubScene.md::0001","path":"editor/reference/modules/SubScene.md","title":"modules/SubScene.js","description":"","kind":"reference","source":"editor/js/modules/SubScene.js","updated":"","headings":["modules/SubScene.js","Classes","class SubScene","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"Convenience: spawn N debris pieces in a burst around a point. Render all SubScene objects via EntityMeshRenderer. Uses the main solid render pipeline (not X ray). Find the nearest SubScene item intersected by a ray (AABB test). Used by the grab system to pick up fragments/debris. Apply a force to a SubScene item's physics body. Used by the grab system to move fragments. Get an item by its SubScene id. Settle a fragment: convert dynamic → kinematic, cancel lifetime, apply parent material, promote to 'env' category. The piece becomes a permanent static mesh in the world. Reverse a settle: convert kinematic → dynamic so forces/grab work again. Called when a settled fragment is grabbed or needs to respond to impacts. P6: Build compound box sub colliders for elongated fragments. Splits vertex positions along the longest axis into 2 halves, computes a tight AABB for each half, and returns compound collider configs. P7: Reduce vertex count via spatial hashing for PhysX 256 vertex convex hull limit. Merges nearby vertices into grid cells, keeping the vertex closest to each cell center. Returns a new Float32Array with reduced vertex count. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"ab47b7f753ec66ccdce2dc4023db4e3933d6bdcfdf25775f20561e33799b0a51"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/panels/AssetPanel.md::0000","path":"editor/reference/panels/AssetPanel.md","title":"panels/AssetPanel.js","description":"","kind":"reference","source":"editor/js/panels/AssetPanel.js","updated":"","headings":["panels/AssetPanel.js","Functions","setupAssetPanel(editor)","renderAssetGrid()","getSelectedAssetUuid()","refreshAssets()","sampleAssetAnimationTransforms(gltf, animIdx, time, binStart, buf)","base64ToArrayBuffer(base64)","async handleRemoteAssetImport(payload)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ AssetPanel.js Bottom panel asset browser (Unity/Unreal inspired) ============================================================================ Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"324d965ba8f00398acb7d33ef97b8d085ad16df78c560610dd47344eee6fb65c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/panels/Hierarchy.md::0000","path":"editor/reference/panels/Hierarchy.md","title":"panels/Hierarchy.js","description":"","kind":"reference","source":"editor/js/panels/Hierarchy.js","updated":"","headings":["panels/Hierarchy.js","Classes","class HierarchyPanel","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes HierarchyPanel Entity tree view Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"6345e46def1204807f7c4f6b1c8594c40921cd826c40087851d78beb638f94da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/panels/Inspector.md::0000","path":"editor/reference/panels/Inspector.md","title":"panels/Inspector.js","description":"","kind":"reference","source":"editor/js/panels/Inspector.js","updated":"","headings":["panels/Inspector.js","Classes","class InspectorPanel","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: InspectorPanel Component property editor Classes Method Signature Summary Update chain simulation with new parameters Reinitialize chain simulation when backend changes Create EntityFlags component widget HTML Setup event handlers for EntityFlags widget Create a \"Physical Material\" widget with preset dropdown and property sliders. Sync PhysicsBody mass from PhysicalMaterial density × collider volume. Create a \"Geometry\" widget for mesh entities with operation buttons. Update PhysX filter data when EntityFlags change <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"13c6d03dd0f6674f49fc409fc731d35c26ac26f141bbb5b741ab2657e54069a5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/panels/SpellGeneratorPanel.md::0000","path":"editor/reference/panels/SpellGeneratorPanel.md","title":"panels/SpellGeneratorPanel.js","description":"","kind":"reference","source":"editor/js/panels/SpellGeneratorPanel.js","updated":"","headings":["panels/SpellGeneratorPanel.js","Classes","class SpellGeneratorPanel","Functions","createSpellGeneratorPanel(options = {})","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SpellGeneratorPanel.js Spell Generator Editor UI A panel for procedurally generating spells in the editor. Features: Element selection (with combination preview) Spell type selection Modifier toggles Power level slider Live preview Save to spell library Classes Method Signature Summary Render the panel Build HTML structure Add styles Setup event listeners Toggle element selection Select spell type Toggle modifier Update modifier availability based on spell type Update combination preview Update preview Render animated preview on canvas Draw projectile style preview Draw AOE style preview Draw shield style preview Draw buff style preview Update spell info display Generate random spell Generate spell (same as preview but with notification) Save generated spell Get current generated spell Destroy panel Functions <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"6205dd15f0f3a2b4548ad63c3671f9e1d936df3658d43d0a34670d08d16a5570"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/panels/Viewport.md::0000","path":"editor/reference/panels/Viewport.md","title":"panels/Viewport.js","description":"","kind":"reference","source":"editor/js/panels/Viewport.js","updated":"","headings":["panels/Viewport.js","Classes","class ViewportPanel","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Update 3D labels for emitter entities Detect monitor refresh rate by measuring frame intervals Update all stats display elements Update the collab stats overlay (connection status, interp stats, router stats). Called at 1Hz from the render loop when collab is active. Get world position at a given distance from camera along pick ray Get a pick ray from screen coordinates Pick an entity at screen coordinates Ray ground plane intersection (horizontal plane at given Y) Calculate distance from ray to line segment (for rope picking) Returns { minDist, t } where minDist is closest distance and t is ray parameter Ray sphere intersection test Pre build raycast BVH for all entity mesh types in the scene. Call during play compile so first grab doesn't pay the SAH build cost. Get the physics authoritative position for an entity. In play mode, ragdoll entities keep their Transform at spawn origin while the actual body is elsewhere — this returns the real position. Get center position of all selected entities Get rope start/end positions for gizmo rendering Returns { startPos, endPos } or null if not a rope or positions unavailable Move all selected entities with arrow keys (with grid snap) Update grabbed entity position to follow mouse (with grid snap and axis constraint) Also moves all other selected entities by the same delta Update rope attachments when an entity they're attached to is moved Re interpolates ALL particles along the rope to maintain proper segment distribution Rotate a vector by a quaternion Find closest point on an axis line to a ray Physics","contentHash":"2e208d3ef58240b40a3bf36602fe01b48812e86713cf12397bde25210e451919"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/panels/Viewport.md::0001","path":"editor/reference/panels/Viewport.md","title":"panels/Viewport.js","description":"","kind":"reference","source":"editor/js/panels/Viewport.js","updated":"","headings":["panels/Viewport.js","Classes","class ViewportPanel","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":3,"text":"ALL particles along the rope to maintain proper segment distribution Rotate a vector by a quaternion Find closest point on an axis line to a ray Physics driven grab: update spring target and fatigue each frame. IMPORTANT: We do NOT set entity position directly. The spring damper in EditorPhysics (via PhysicsGrab.computeGrabForce) is the SOLE authority on where the object goes. This prevents the stretching / rubber banding that occurs when visual snap fights physics writeback. Best practice references: Garry's Mod: pure spring force, body stays dynamic Boneworks: PD controller, never teleport body UE4 PhysHandle: linear drive to target, no position override Orange Duck \"Spring It On\": frequency/damping ratio parameterization Create the enhanced grab indicator overlay. Inspired by: Garry's Mod physgun: glowing tether beam from gun → object Half Life Alyx: object glow halo, staged highlight feedback Control (Remedy): pulsing aura, floating debris particles Elements: 1. SVG tether line from screen center → entity (physgun beam) 2. Glow halo ring around the entity 3. Two shimmer gradient bars (strength + grip) with labels 4. Scale in bounce on grab start 5. Shake wobble when near grip break 6. Small mass label Project the grabbed entity position to screen space and update the grab indicator suite: bars, mass label. (Halo was removed — see comment in createGrabIndicator.) Hide all grab indicator elements (called on grip break / release). Create and show the fairy cursor at the given screen position. Update fairy position each frame with idle sway + fatigue fade. Also updates the 3D point light at the grab target world position. Hide and clean up the fairy cursor + its 3D point light. Apply throw momentum to physics body when elastic drag is released. Body stays dynamic","contentHash":"7e4033346412af7d0b12d5e401f2330703d7a0ac1dc433ba71a553d6aedbb5f8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/panels/Viewport.md::0002","path":"editor/reference/panels/Viewport.md","title":"panels/Viewport.js","description":"","kind":"reference","source":"editor/js/panels/Viewport.js","updated":"","headings":["panels/Viewport.js","Classes","class ViewportPanel","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":2,"chunkCount":3,"text":"world position. Hide and clean up the fairy cursor + its 3D point light. Apply throw momentum to physics body when elastic drag is released. Body stays dynamic throughout — no kinematic restore needed. Update rotation for selected entities when dragging rotation ring Rotate a point by a quaternion Multiply two quaternions: result = a b Set spawn preview at position Clear spawn preview Set hovered entity for cross panel highlighting Tick all skeletal animations and push skinned vertices to GPU. Uses GPU compute skinning when available, with CPU fallback. Called once per frame before entity rendering. Update spawn preview position from screen coordinates Check memory budget and trigger cleanup if needed Now incl","contentHash":"f126f39ccee104aa630d28362d7df914fe90ced7cfb946bccefffad5887e90fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/project/AssetRegistry.md::0000","path":"editor/reference/project/AssetRegistry.md","title":"project/AssetRegistry.js","description":"","kind":"reference","source":"editor/js/project/AssetRegistry.js","updated":"","headings":["project/AssetRegistry.js","Classes","class UnsupportedAssetIndexVersionError extends Error","class AssetRegistry","Functions","prepareAssetIndex(input)","getAssetTypeFromExtension(filename)","getAssetRegistry()","async initAssetRegistry(projectDir)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AssetRegistry.js UUID based asset management Adapted from J:\\game2 handles: Asset registration and UUID assignment Path ↔ UUID lookup Lazy loading of asset data Asset index persistence (Assets/index.json) Import and update operations Classes Method Signature Summary Method Signature Summary Initialize load or create asset index Save index to disk Import a file into the project Register existing file Scan Assets folder and register all files Functions Get asset type from file extension Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"af4c352fe9432cad7d07982c84ef11387ef5ea2fcb0157fa9d4955b8ed5fdbaa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/project/AutoSave.md::0000","path":"editor/reference/project/AutoSave.md","title":"project/AutoSave.js","description":"","kind":"reference","source":"editor/js/project/AutoSave.js","updated":"","headings":["project/AutoSave.js","Classes","class DirtyTracker","class AutoSaveManager","Functions","setupDirtyTracking(editor, autoSaveManager)","setupSaveShortcut(autoSaveManager)","setupNewSceneShortcut(editor)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Functions Wrap editor methods to track dirty state Setup Ctrl+S shortcut Setup Ctrl+N for new scene <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"9d63f15b5f53cc7910d8027b7eb83603567f16502c99ad102d20533f00abd309"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/project/ProjectCompatibility.md::0000","path":"editor/reference/project/ProjectCompatibility.md","title":"project/ProjectCompatibility.js","description":"","kind":"reference","source":"editor/js/project/ProjectCompatibility.js","updated":"","headings":["project/ProjectCompatibility.js","Functions","prepareProjectSettings(input)","prepareProjectRecord(input, { deserializeMaps = true } = {})","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Normalize a persisted/imported project without mutating the source object. Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"62f3f28a172c5347051f380f7ac6b820bf8df0f9945f46d720876e4fd187d6c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/project/ProjectExporter.md::0000","path":"editor/reference/project/ProjectExporter.md","title":"project/ProjectExporter.js","description":"","kind":"reference","source":"editor/js/project/ProjectExporter.js","updated":"","headings":["project/ProjectExporter.js","Functions","packData(entries)","unpackData(buffer)","async exportScene(editor, sceneData)","async exportProject(editor, sceneDataList, options = {})","downloadZip(zipBuffer, filename = 'game-export.zip')","async exportAndDownload(editor, sceneDataList, options = {})","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Pack data into binary format Format: [magic:4][version:4][indexOffset:4][...blobs...][index] Unpack binary data (for runtime) Export a single scene to packed binary Export full project with multiple scenes Export and download project Re exports <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"2a762ee0fb7bf70efaaffaac156b6e030675da3ec86569de29c73973b56dd36f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/project/ProjectLauncher.md::0000","path":"editor/reference/project/ProjectLauncher.md","title":"project/ProjectLauncher.js","description":"","kind":"reference","source":"editor/js/project/ProjectLauncher.js","updated":"","headings":["project/ProjectLauncher.js","Functions","getRecentProjects()","addRecentProject(project)","removeRecentProject(projectName)","clearRecentProjects()","createLauncherUI()","renderRecentProjects(container)","injectLauncherStyles()","async showLauncher(onProjectSelected)","hideLauncher()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProjectLauncher.js Startup screen with recent projects Adapted from J:\\game2 Unity Hub / Godot style launcher: Recent projects list with thumbnails New project / Open project buttons Project templates (future) Functions Hide launcher (for when editor is already initialized) <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"c881b5ecefb1c5d3022f97ff4efba8f8ea11a0f21bf67116a2c5ac5f7ec4b506"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/project/SceneManager.md::0000","path":"editor/reference/project/SceneManager.md","title":"project/SceneManager.js","description":"","kind":"reference","source":"editor/js/project/SceneManager.js","updated":"","headings":["project/SceneManager.js","Functions","layerMask(...layers)","hasLayer(mask, layer)","prepareSceneForImport(input)","createSceneData(name = 'Untitled')","serializeScene(editor, sceneName = null)","async deserializeScene(editor, sceneData)","clearScene(editor)","async saveSceneToFile(editor, sceneName = null)","async loadSceneFromFile(editor, fileName)","async listScenes(editor)","async deleteSceneFile(editor, fileName)","newScene(editor, name = 'Untitled')","findEntitiesByLayer(editor, layer)","findEntitiesByLayerMask(editor, mask)","findEntitiesByTag(editor, tag)","findEntityByTag(editor, tag)","findEnabledEntities(editor)","findEntitiesByRenderFlags(editor, flags, matchAll = true)","findPrefabInstances(editor, prefabUuid = null)","getEntityConnections(editor, entityId)","addConnection(editor, fromEntity, signal, toEntity, method, flags = 0, binds = [])","removeConnection(editor, fromEntity, signal, toEntity, method)","setEntityLayer(editor, entityId, layer)","setEntityTag(editor, entityId, tag)","addEntityTag(editor, entityId, tag)","removeEntityTag(editor, entityId, tag)","setEntityRenderFlags(editor, entityId, flags)","setEntityEnabled(editor, entityId, enabled)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SceneManager.js Scene loading, saving, and management Handles: Scene file I/O (Scenes/ .scene.json) Scene serialization/deserialization Multi scene support Scene switching Functions Validate and fully normalize a serialized scene before touching live editor state. Missing schemaVersion is the legacy v1 format; future versions fail closed. Create empty scene data with full Unity/Godot style structure Serialize current editor scene to JSON compatible object Validate and stage a complete scene before replacing live editor state. If an unexpected runtime failure occurs while applying it, restore the previously serialized scene so callers never inherit a half loaded scene. Clear all entities and folders from scene Save scene to file system Load scene from file system List all scenes in project Delete scene file Create new scene (clears current and sets name) Find all entities on a specific layer Find all entities matching a layer mask Find all entities with a specific tag Find first entity with a specific tag Find all enabled entities (active in scene) Find all entities with specific render flags Find all prefab instances Get all connections for an entity (both incoming and outgoing) Add a signal connection between entities Remove a signal connection Set entity layer Set entity tag Add tag to entity's tags array Remove tag from entity's tags array Set entity render flags Set entity enabled state Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph,","contentHash":"5042d610fdbdb6112e50ce302d84532dacb59fb99ce93de5c86c0d97fffa3d00"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/project/SceneManager.md::0001","path":"editor/reference/project/SceneManager.md","title":"project/SceneManager.js","description":"","kind":"reference","source":"editor/js/project/SceneManager.js","updated":"","headings":["project/SceneManager.js","Functions","layerMask(...layers)","hasLayer(mask, layer)","prepareSceneForImport(input)","createSceneData(name = 'Untitled')","serializeScene(editor, sceneName = null)","async deserializeScene(editor, sceneData)","clearScene(editor)","async saveSceneToFile(editor, sceneName = null)","async loadSceneFromFile(editor, fileName)","async listScenes(editor)","async deleteSceneFile(editor, fileName)","newScene(editor, name = 'Untitled')","findEntitiesByLayer(editor, layer)","findEntitiesByLayerMask(editor, mask)","findEntitiesByTag(editor, tag)","findEntityByTag(editor, tag)","findEnabledEntities(editor)","findEntitiesByRenderFlags(editor, flags, matchAll = true)","findPrefabInstances(editor, prefabUuid = null)","getEntityConnections(editor, entityId)","addConnection(editor, fromEntity, signal, toEntity, method, flags = 0, binds = [])","removeConnection(editor, fromEntity, signal, toEntity, method)","setEntityLayer(editor, entityId, layer)","setEntityTag(editor, entityId, tag)","addEntityTag(editor, entityId, tag)","removeEntityTag(editor, entityId, tag)","setEntityRenderFlags(editor, entityId, flags)","setEntityEnabled(editor, entityId, enabled)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"dc437804248ef249a2bdd1e2b8508b9d06914a933ae5ebde9684bd6b2911491f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/project/index.md::0000","path":"editor/reference/project/index.md","title":"project/index.js","description":"","kind":"reference","source":"editor/js/project/index.js","updated":"","headings":["project/index.js","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"1fc1f29411d9cd48564b0f9dd20086fe0296104f64eb576613af5a444ae77384"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/SpawnableItem.md::0000","path":"editor/reference/spawnables/SpawnableItem.md","title":"spawnables/SpawnableItem.js","description":"","kind":"reference","source":"editor/js/spawnables/SpawnableItem.js","updated":"","headings":["spawnables/SpawnableItem.js","Classes","class SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes SpawnableItem Base class for all spawnable objects in the editor. Physics collider options: Override getCollider() to define custom colliders Use helper imports from EditorPhysics for advanced physics: generateCollidersFromSDF(sdfFunc, bounds, resolution) createMeshColliderDecomposed(vertices, indices, options) createSDFCollider(sdfFunc, bounds, options) createVoxelCollider(voxels, sizeX, sizeY, sizeZ, voxelSize) Method Signature Summary Get geometry for rendering. Get physics collider configuration. Override this to provide custom colliders for complex shapes. Supported shapes: box: { shape: 'box', halfExtents: [x, y, z] } sphere: { shape: 'sphere', radius: r } capsule: { shape: 'capsule', radius: r, halfHeight: h } convexMesh: { shape: 'convexMesh', meshId: id, vertices: [...] } compound: { shape: 'box', halfExtents: [...], compoundColliders: [...] } Get default ECS components for this spawnable. Get default color for this spawnable. Override to provide a custom color. Spawn this item in the editor at the given position. Optional: Get SDF function for this shape. Used for particle collision, soft body interaction, etc. Optional: Get articulation configuration for jointed objects. Used for ropes, chains, ragdolls. Optional: Get default physical material preset key for this shape. Used to auto populate the PhysicalMaterial ECS component on spawn. Override in subclasses for shape appropriate defaults. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu","contentHash":"bf0e9fda3ac0cc8db2acc743d292ed9c7406c01d02fd07b677fce900dc6a14a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/SpawnableItem.md::0001","path":"editor/reference/spawnables/SpawnableItem.md","title":"spawnables/SpawnableItem.js","description":"","kind":"reference","source":"editor/js/spawnables/SpawnableItem.js","updated":"","headings":["spawnables/SpawnableItem.js","Classes","class SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"437a5304195e0071d4000872b9d5bce4b328797c3df6a368427fcc85cd6161ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/cameras/Camera.md::0000","path":"editor/reference/spawnables/cameras/Camera.md","title":"spawnables/cameras/Camera.js","description":"","kind":"reference","source":"editor/js/spawnables/cameras/Camera.js","updated":"","headings":["spawnables/cameras/Camera.js","Classes","class Camera extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/Arch.md::0000","path":"editor/reference/spawnables/complex/Arch.md","title":"spawnables/complex/Arch.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/Arch.js","updated":"","headings":["spawnables/complex/Arch.js","Classes","class Arch extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/CSGShape.md::0000","path":"editor/reference/spawnables/complex/CSGShape.md","title":"spawnables/complex/CSGShape.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/CSGShape.js","updated":"","headings":["spawnables/complex/CSGShape.js","Functions","async performCSG(editor, entityIdA, entityIdB, operation = 'union', opts = {})","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ CSGShape.js — CSG Boolean operations on mesh entities Select 2 mesh entities → right click → CSG Union / Subtract / Intersect V1: Voxelize both → VoxelOps boolean → SDFToMesh marching cubes reconstruct V2: Voxelize both → VoxelOps boolean → DualContouring for sharp features ============================================================================ Functions Perform a CSG boolean operation on two mesh entities. Parameters: (Object) — No description in source JSDoc. (number) — First mesh entity (number) — Second mesh entity (string) — 'union' 'subtract' 'intersect' (Object) — No description in source JSDoc. (number) — Voxel grid resolution (default 48) (boolean) — Remove source entities (default false) (string) — 'mc' for Marching Cubes V1, 'dc' for Dual Contouring V2 (default 'dc') (number) — Dual Contouring sharpness 0 1 (default 0.5) Returns: New entity ID or null on failure <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"82e619df6a17fce1dd65d052547accfad791790401a476441a83fe3ed2e2715f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/Gear.md::0000","path":"editor/reference/spawnables/complex/Gear.md","title":"spawnables/complex/Gear.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/Gear.js","updated":"","headings":["spawnables/complex/Gear.js","Classes","class Gear extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/Helix.md::0000","path":"editor/reference/spawnables/complex/Helix.md","title":"spawnables/complex/Helix.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/Helix.js","updated":"","headings":["spawnables/complex/Helix.js","Classes","class Helix extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/Prism.md::0000","path":"editor/reference/spawnables/complex/Prism.md","title":"spawnables/complex/Prism.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/Prism.js","updated":"","headings":["spawnables/complex/Prism.js","Classes","class Prism extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/Pyramid.md::0000","path":"editor/reference/spawnables/complex/Pyramid.md","title":"spawnables/complex/Pyramid.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/Pyramid.js","updated":"","headings":["spawnables/complex/Pyramid.js","Classes","class Pyramid extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/SDFShape.md::0000","path":"editor/reference/spawnables/complex/SDFShape.md","title":"spawnables/complex/SDFShape.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/SDFShape.js","updated":"","headings":["spawnables/complex/SDFShape.js","Classes","class SDFShape extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/Stairs.md::0000","path":"editor/reference/spawnables/complex/Stairs.md","title":"spawnables/complex/Stairs.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/Stairs.js","updated":"","headings":["spawnables/complex/Stairs.js","Classes","class Stairs extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/Star.md::0000","path":"editor/reference/spawnables/complex/Star.md","title":"spawnables/complex/Star.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/Star.js","updated":"","headings":["spawnables/complex/Star.js","Classes","class Star extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/complex/Wedge.md::0000","path":"editor/reference/spawnables/complex/Wedge.md","title":"spawnables/complex/Wedge.js","description":"","kind":"reference","source":"editor/js/spawnables/complex/Wedge.js","updated":"","headings":["spawnables/complex/Wedge.js","Classes","class Wedge extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/emitters/ParticleEmitter.md::0000","path":"editor/reference/spawnables/emitters/ParticleEmitter.md","title":"spawnables/emitters/ParticleEmitter.js","description":"","kind":"reference","source":"editor/js/spawnables/emitters/ParticleEmitter.js","updated":"","headings":["spawnables/emitters/ParticleEmitter.js","Classes","class ParticleEmitter extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/emitters/PhaseEmitters.md::0000","path":"editor/reference/spawnables/emitters/PhaseEmitters.md","title":"spawnables/emitters/PhaseEmitters.js","description":"","kind":"reference","source":"editor/js/spawnables/emitters/PhaseEmitters.js","updated":"","headings":["spawnables/emitters/PhaseEmitters.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"58868531dcee605074836cda1413b35c2d5b490b95add68ebbdb1b49d158bc74"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/index.md::0000","path":"editor/reference/spawnables/index.md","title":"spawnables/index.js","description":"","kind":"reference","source":"editor/js/spawnables/index.js","updated":"","headings":["spawnables/index.js","Functions","getSpawnable(id)","getSpawnablesByCategory(category)","getAllCategories()","getAllSpawnables()","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"1e6876a09101a4f42058fdfca3440c99d0446558c80f18ac5ab3dbdd75f90277"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/lights/DirectionalLight.md::0000","path":"editor/reference/spawnables/lights/DirectionalLight.md","title":"spawnables/lights/DirectionalLight.js","description":"","kind":"reference","source":"editor/js/spawnables/lights/DirectionalLight.js","updated":"","headings":["spawnables/lights/DirectionalLight.js","Classes","class DirectionalLight extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/lights/PointLight.md::0000","path":"editor/reference/spawnables/lights/PointLight.md","title":"spawnables/lights/PointLight.js","description":"","kind":"reference","source":"editor/js/spawnables/lights/PointLight.js","updated":"","headings":["spawnables/lights/PointLight.js","Classes","class PointLight extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/lights/SpotLight.md::0000","path":"editor/reference/spawnables/lights/SpotLight.md","title":"spawnables/lights/SpotLight.js","description":"","kind":"reference","source":"editor/js/spawnables/lights/SpotLight.js","updated":"","headings":["spawnables/lights/SpotLight.js","Classes","class SpotLight extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/Balloon.md::0000","path":"editor/reference/spawnables/physics/Balloon.md","title":"spawnables/physics/Balloon.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/Balloon.js","updated":"","headings":["spawnables/physics/Balloon.js","Classes","class Balloon extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/Chain.md::0000","path":"editor/reference/spawnables/physics/Chain.md","title":"spawnables/physics/Chain.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/Chain.js","updated":"","headings":["spawnables/physics/Chain.js","Classes","class Chain extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/Cloth.md::0000","path":"editor/reference/spawnables/physics/Cloth.md","title":"spawnables/physics/Cloth.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/Cloth.js","updated":"","headings":["spawnables/physics/Cloth.js","Classes","class Cloth extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/Fluid.md::0000","path":"editor/reference/spawnables/physics/Fluid.md","title":"spawnables/physics/Fluid.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/Fluid.js","updated":"","headings":["spawnables/physics/Fluid.js","Classes","class Fluid extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/Hair.md::0000","path":"editor/reference/spawnables/physics/Hair.md","title":"spawnables/physics/Hair.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/Hair.js","updated":"","headings":["spawnables/physics/Hair.js","Classes","class Hair extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/Ragdoll.md::0000","path":"editor/reference/spawnables/physics/Ragdoll.md","title":"spawnables/physics/Ragdoll.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/Ragdoll.js","updated":"","headings":["spawnables/physics/Ragdoll.js","Classes","class Ragdoll extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/Rope.md::0000","path":"editor/reference/spawnables/physics/Rope.md","title":"spawnables/physics/Rope.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/Rope.js","updated":"","headings":["spawnables/physics/Rope.js","Classes","class Rope extends SpawnableItem","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Re exports <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"32ac4f9475da8ea01df9e30c3245580bd1c5fdf794ccc49574bbb902120a4cb6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/RopeSchema.md::0000","path":"editor/reference/spawnables/physics/RopeSchema.md","title":"spawnables/physics/RopeSchema.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/RopeSchema.js","updated":"","headings":["spawnables/physics/RopeSchema.js","Functions","getFiberMaterial(name)","applyFiberMaterial(data, materialName)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================= ROPE SCHEMA Shared schema for RopeTool and PhysicsRopeComponentEditor ============================================================================= Functions Get fiber material properties by name Apply fiber material preset to rope data Constants — Fiber material properties affects both physics and rendering — Default values for rope properties — Material presets for quick setup — Fiber material options for dropdown — Unified inspector schema for rope properties Used by both RopeTool and PhysicsRopeComponentEditor Organized into logical groups with the most commonly used options first <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"cddd159b6b145dea5a17fe357140cb3405a584310e58a32a15ee5f3f7f87443d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/SoftBody.md::0000","path":"editor/reference/spawnables/physics/SoftBody.md","title":"spawnables/physics/SoftBody.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/SoftBody.js","updated":"","headings":["spawnables/physics/SoftBody.js","Classes","class SoftBody extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/physics/Wire.md::0000","path":"editor/reference/spawnables/physics/Wire.md","title":"spawnables/physics/Wire.js","description":"","kind":"reference","source":"editor/js/spawnables/physics/Wire.js","updated":"","headings":["spawnables/physics/Wire.js","Classes","class Wire extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/primitives/Capsule.md::0000","path":"editor/reference/spawnables/primitives/Capsule.md","title":"spawnables/primitives/Capsule.js","description":"","kind":"reference","source":"editor/js/spawnables/primitives/Capsule.js","updated":"","headings":["spawnables/primitives/Capsule.js","Classes","class Capsule extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/primitives/Cone.md::0000","path":"editor/reference/spawnables/primitives/Cone.md","title":"spawnables/primitives/Cone.js","description":"","kind":"reference","source":"editor/js/spawnables/primitives/Cone.js","updated":"","headings":["spawnables/primitives/Cone.js","Classes","class Cone extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/primitives/Cube.md::0000","path":"editor/reference/spawnables/primitives/Cube.md","title":"spawnables/primitives/Cube.js","description":"","kind":"reference","source":"editor/js/spawnables/primitives/Cube.js","updated":"","headings":["spawnables/primitives/Cube.js","Classes","class Cube extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/primitives/Cylinder.md::0000","path":"editor/reference/spawnables/primitives/Cylinder.md","title":"spawnables/primitives/Cylinder.js","description":"","kind":"reference","source":"editor/js/spawnables/primitives/Cylinder.js","updated":"","headings":["spawnables/primitives/Cylinder.js","Classes","class Cylinder extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Get SDF function for particle/soft body collision. Returns hollow cylinder (tube) SDF for accurate collision detection. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"5464f025bdfbdbc2c8c63efd2cb787f3df9f812ea3fbd21252d19cffbbfc1214"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/primitives/Plane.md::0000","path":"editor/reference/spawnables/primitives/Plane.md","title":"spawnables/primitives/Plane.js","description":"","kind":"reference","source":"editor/js/spawnables/primitives/Plane.js","updated":"","headings":["spawnables/primitives/Plane.js","Classes","class Plane extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/primitives/Sphere.md::0000","path":"editor/reference/spawnables/primitives/Sphere.md","title":"spawnables/primitives/Sphere.js","description":"","kind":"reference","source":"editor/js/spawnables/primitives/Sphere.js","updated":"","headings":["spawnables/primitives/Sphere.js","Classes","class Sphere extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/primitives/Torus.md::0000","path":"editor/reference/spawnables/primitives/Torus.md","title":"spawnables/primitives/Torus.js","description":"","kind":"reference","source":"editor/js/spawnables/primitives/Torus.js","updated":"","headings":["spawnables/primitives/Torus.js","Classes","class Torus extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Get SDF function for particle/soft body collision. Returns hollow torus SDF for accurate collision detection. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"d04c7f0a6f9180e718f07abd5e39cd0f0ac50d00da53013e0d3da30712ff1dad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/tools/ConstraintTool.md::0000","path":"editor/reference/spawnables/tools/ConstraintTool.md","title":"spawnables/tools/ConstraintTool.js","description":"","kind":"reference","source":"editor/js/spawnables/tools/ConstraintTool.js","updated":"","headings":["spawnables/tools/ConstraintTool.js","Classes","class ConstraintTool extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/tools/RemoverTool.md::0000","path":"editor/reference/spawnables/tools/RemoverTool.md","title":"spawnables/tools/RemoverTool.js","description":"","kind":"reference","source":"editor/js/spawnables/tools/RemoverTool.js","updated":"","headings":["spawnables/tools/RemoverTool.js","Classes","class RemoverTool extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/tools/RopeTool.md::0000","path":"editor/reference/spawnables/tools/RopeTool.md","title":"spawnables/tools/RopeTool.js","description":"","kind":"reference","source":"editor/js/spawnables/tools/RopeTool.js","updated":"","headings":["spawnables/tools/RopeTool.js","Classes","class RopeTool extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/tools/SpringTool.md::0000","path":"editor/reference/spawnables/tools/SpringTool.md","title":"spawnables/tools/SpringTool.js","description":"","kind":"reference","source":"editor/js/spawnables/tools/SpringTool.js","updated":"","headings":["spawnables/tools/SpringTool.js","Classes","class SpringTool extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/spawnables/tools/WeldTool.md::0000","path":"editor/reference/spawnables/tools/WeldTool.md","title":"spawnables/tools/WeldTool.js","description":"","kind":"reference","source":"editor/js/spawnables/tools/WeldTool.js","updated":"","headings":["spawnables/tools/WeldTool.js","Classes","class WeldTool extends SpawnableItem","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f6414bafedf8abc68a0a0706f00352d434d84d5d8d74f5f0fd63a74ebdb02eff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/storage/EditorPreferenceContracts.md::0000","path":"editor/reference/storage/EditorPreferenceContracts.md","title":"storage/EditorPreferenceContracts.js","description":"","kind":"reference","source":"editor/js/storage/EditorPreferenceContracts.js","updated":"","headings":["storage/EditorPreferenceContracts.js","Classes","class EditorPreferenceContractError extends Error","Functions","readEditorSettings(storage)","writeEditorSettings(value, storage)","clearEditorSettings(storage)","readEditorHotkeys(storage)","writeEditorHotkeys(value, storage)","clearEditorHotkeys(storage)","readRecentProjects(storage)","writeRecentProjects(value, storage)","clearRecentProjectsRecord(storage)","readWorldEnvironment(storage)","writeWorldEnvironment(value, storage)","readWorldPostprocess(storage)","writeWorldPostprocess(value, storage)","readWorldPanelCollapse(storage)","writeWorldPanelCollapse(value, storage)","readCollabRoom(storage)","writeCollabRoom(value, storage)","clearCollabRoom(storage)","readAudioMotion(storage)","writeAudioMotion(value, storage)","readAudioFavorites(storage)","writeAudioFavorites(value, storage)","readAudioRecents(storage)","writeAudioRecents(value, storage)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Canonical localStorage contracts for structured editor preferences. The original keys remain v1 rollback mirrors. Current clients publish the legacy payload first and the v2 envelope last. The envelope remembers the exact legacy JSON it accompanied, allowing a later write from an older tab to be detected and read instead of being shadowed by stale v2 data. Classes Method Signature Summary Functions Constants — Canonical localStorage contracts for structured editor preferences. The original keys remain v1 rollback mirrors. Current clients publish the legacy payload first and the v2 envelope last. The envelope remembers the exact legacy JSON it accompanied, allowing a later write from an older tab to be detected and read instead of being shadowed by stale v2 data. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"11bffd824ac109987b70d376307e2d3406478f4eadead35fedfbefe17bb8732b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/storage/GameEditorDatabase.md::0000","path":"editor/reference/storage/GameEditorDatabase.md","title":"storage/GameEditorDatabase.js","description":"","kind":"reference","source":"editor/js/storage/GameEditorDatabase.js","updated":"","headings":["storage/GameEditorDatabase.js","Functions","closeGameEditorDatabase()","openGameEditorDatabase()","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: The single schema owner for editor IndexedDB persistence. Version 1 was opened independently by main.js and ProjectStorage.js, which meant only the first caller's object store was created. Version 2 expands the database to contain both stores without removing any version 1 data. Functions Constants — The single schema owner for editor IndexedDB persistence. Version 1 was opened independently by main.js and ProjectStorage.js, which meant only the first caller's object store was created. Version 2 expands the database to contain both stores without removing any version 1 data. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"23fd31264b0fd001819c8038caab949c43c3190f608b4ba3022b8eaecc4d7c4b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/cyberpunk.md::0000","path":"editor/reference/themes/cyberpunk.md","title":"themes/cyberpunk.js","description":"","kind":"reference","source":"editor/js/themes/cyberpunk.js","updated":"","headings":["themes/cyberpunk.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Cyberpunk Theme Neon pink and cyan <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"40002fca3eb88dd394d1f9e32ba8a270d2bab7f9ac562e0b79ed91ebeaf75626"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/dark.md::0000","path":"editor/reference/themes/dark.md","title":"themes/dark.js","description":"","kind":"reference","source":"editor/js/themes/dark.js","updated":"","headings":["themes/dark.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Dark Theme Default editor theme <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"0f1ea82f8e36e3d858f7a3e92520ad03960e355bfac41a5d659a2a91f66acf54"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/index.md::0000","path":"editor/reference/themes/index.md","title":"themes/index.js","description":"","kind":"reference","source":"editor/js/themes/index.js","updated":"","headings":["themes/index.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Theme System Index Central theme management with modular theme files Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"8572e6384d866635e83f009d536576f93f8d5f5390d32d8fa411709809f650f6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/light.md::0000","path":"editor/reference/themes/light.md","title":"themes/light.js","description":"","kind":"reference","source":"editor/js/themes/light.js","updated":"","headings":["themes/light.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Light Theme Clean bright interface <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"b768f81e8c7b7b6d917dfc02a02bb60e8566a510fa5cf1e4783b835cc0fce808"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/matrix.md::0000","path":"editor/reference/themes/matrix.md","title":"themes/matrix.js","description":"","kind":"reference","source":"editor/js/themes/matrix.js","updated":"","headings":["themes/matrix.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Matrix Theme Hacker green aesthetic <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"b3788c034287557d534f116733ffec435291cfeec052a0a9a3699162f75de1fe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/midnight.md::0000","path":"editor/reference/themes/midnight.md","title":"themes/midnight.js","description":"","kind":"reference","source":"editor/js/themes/midnight.js","updated":"","headings":["themes/midnight.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Midnight Blue Theme Deep blue professional theme <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"3ccda455ba9a3c5c2fbe5cbd056d0659aa5facc7fdc8e60335c9c8aee69dbc92"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/monokai.md::0000","path":"editor/reference/themes/monokai.md","title":"themes/monokai.js","description":"","kind":"reference","source":"editor/js/themes/monokai.js","updated":"","headings":["themes/monokai.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Monokai Theme Classic code editor colors <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"07c04e8aae5b1ad3f9841ab0e6cd1b302b9a96ab61301fee8ea042b033e719cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/nord.md::0000","path":"editor/reference/themes/nord.md","title":"themes/nord.js","description":"","kind":"reference","source":"editor/js/themes/nord.js","updated":"","headings":["themes/nord.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Nord Theme Arctic, north bluish color palette <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"8f30dcd1140bbcd719d081780cba7b437e9df37c02b491c61bcf3f0e1d9edb9f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/ocean.md::0000","path":"editor/reference/themes/ocean.md","title":"themes/ocean.js","description":"","kind":"reference","source":"editor/js/themes/ocean.js","updated":"","headings":["themes/ocean.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Ocean Theme Deep sea blues and teals <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"bbb5aaa4e84b9a8be1f3c3443c20e9f9a8946e2f6d91b7e8423c35ed532ba7cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/purple.md::0000","path":"editor/reference/themes/purple.md","title":"themes/purple.js","description":"","kind":"reference","source":"editor/js/themes/purple.js","updated":"","headings":["themes/purple.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Purple Haze Theme Vibrant purple aesthetic <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"2f63f926785bd40f900d3696759a48439c2eaac91ac2d6f8778ef55a95178bbe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/themes/solarized.md::0000","path":"editor/reference/themes/solarized.md","title":"themes/solarized.js","description":"","kind":"reference","source":"editor/js/themes/solarized.js","updated":"","headings":["themes/solarized.js","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Solarized Dark Theme Ethan Schoonover's iconic palette <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"1af2a6a2d231dbc4f32b6edba08a004de7e68165f67166eeafe524c44b1d2e0c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/CompressionManager.md::0000","path":"editor/reference/utils/CompressionManager.md","title":"utils/CompressionManager.js","description":"","kind":"reference","source":"editor/js/utils/CompressionManager.js","updated":"","headings":["utils/CompressionManager.js","Functions","initCompressionWorker()","async compressSnapshot(snapshot)","async computeDelta(prev, current)","async decompressSnapshot(compressed)","estimateCompressedSize(data)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CompressionManager Manages background compression via WebWorker Provides async compression/decompression for timeline and undo history Functions Initialize the compression worker Get memory estimate for compressed data <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"7f2ac7a50b6db3ca909bcb47f57bacdaca2d3837e7a7dc39e41837458dce48d8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/DialogAnimations.md::0000","path":"editor/reference/utils/DialogAnimations.md","title":"utils/DialogAnimations.js","description":"","kind":"reference","source":"editor/js/utils/DialogAnimations.js","updated":"","headings":["utils/DialogAnimations.js","Functions","smoothCloseDialog(dialog, duration = 300)","smoothCloseModal(modal, duration = 300)","closeOnBackdropClick(dialog, contentSelector = '.editor-dialog-box, .modal-content, .settings-dialog')","closeOnEscape(dialog)","setupDialogCloseHandlers(dialog, options = {})","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DialogAnimations.js Smooth open/close animations for all dialogs Provides consistent animation utilities for modals and dialogs Functions Smoothly close a dialog with fade out animation Parameters: (HTMLElement) — The dialog element to close (number) — Animation duration in ms (default: 300) Returns: Resolves when animation is complete Smoothly close a modal with fade out animation Parameters: (HTMLElement) — The modal element to close (number) — Animation duration in ms (default: 300) Returns: Resolves when animation is complete Close dialog on backdrop click (outside content area) Parameters: (HTMLElement) — The dialog wrapper element (string) — Selector for the content area (default: '.editor dialog box, .modal content, .settings dialog') Close dialog on Escape key Parameters: (HTMLElement) — The dialog element Setup all standard dialog close handlers Parameters: (HTMLElement) — The dialog element (Object) — Configuration options <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"c2b436282c55ffc60ec0643eb590f33d6112743d3a59d82793df1ea50c2f3b3e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/FrameSpikeDetector.md::0000","path":"editor/reference/utils/FrameSpikeDetector.md","title":"utils/FrameSpikeDetector.js","description":"","kind":"reference","source":"editor/js/utils/FrameSpikeDetector.js","updated":"","headings":["utils/FrameSpikeDetector.js","Classes","class FrameSpikeDetector","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FrameSpikeDetector.js Detect and log frame time spikes Monitors frame times and logs detailed information when spikes occur, helping identify performance bottlenecks and optimization opportunities. Classes FrameSpikeDetector.js Detect and log frame time spikes Monitors frame times and logs detailed information when spikes occur, helping identify performance bottlenecks and optimization opportunities. Method Signature Summary Mark the start of a frame Mark the end of a frame and check for spikes Record a frame spike with context Categorize spike based on context Compress old spikes instead of deleting them Uses tiered compression based on age Capture stack trace for debugging Log spike to console with formatting Mark the start of an operation Measure time since mark and return duration Get spike statistics Get spike report for diagnostics Clear spike history Enable/disable spike detection <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"3eb0912ffe63bcc2fab2ac88c55f46e095a7a1c93cb3ea09a861c962aad70c2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/FrustumCulling.md::0000","path":"editor/reference/utils/FrustumCulling.md","title":"utils/FrustumCulling.js","description":"","kind":"reference","source":"editor/js/utils/FrustumCulling.js","updated":"","headings":["utils/FrustumCulling.js","Functions","extractFrustumPlanes(vp)","isSphereInFrustum(center, radius, planes)","isAABBInFrustum(minX, minY, minZ, maxX, maxY, maxZ, planes)","isAABBCenterExtentsInFrustum(cx, cy, cz, ex, ey, ez, planes)","isEntityAABBVisible(entityPos, entityScale, localCenter, localExtents, planes)","isEntitySphereVisible(position, scale, baseRadius)","getCullingStats()","resetStats()","getFrustumPlanes()","getFrustumCorners(invViewProjMatrix)","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Extract and normalize frustum planes from a 4×4 view projection matrix. Uses Gribb Hartmann method (column major matrix). Must be called once per frame before any culling tests. Parameters: (Float32Array number[]) — — column major 4×4 ViewProj matrix Returns: The 24 float plane array (reference — do NOT mutate) Test if a bounding sphere is inside or intersects the frustum. Parameters: (number[]) — [x, y, z] world space sphere center (number) — sphere radius (Float32Array) — optional explicit planes (defaults to cached) Returns: true if potentially visible Test if a world space AABB intersects the frustum. Uses the P vertex method: for each plane pick the AABB corner most in the direction of the plane normal (the \"positive\" vertex). If that corner is behind the plane, the entire box is outside. Parameters: (number) — @param {number} minY @param {number} minZ (number) — @param {number} maxY @param {number} maxZ (Float32Array) — optional explicit planes Returns: true if potentially visible Convenience: test AABB from center + half extents (world space). Converts to min/max and delegates. High level entity visibility test using AABB. Takes the mesh's local space AABB center+extents, the entity's world position and scale, and produces the world space AABB for frustum testing. Parameters: (number[]) — [x,y,z] entity world position (number[]) — [sx,sy,sz] (number[]) — mesh AABB center in local space (number[]) — mesh AABB half extents in local space (Float32Array) — No description in source JSDoc. Legacy: entity visibility using bounding sphere (kept for broad phase /","contentHash":"c29e5eb8beac58885993dc501d1363bb34cf051b830c420eb6ae3ef39e688484"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/FrustumCulling.md::0001","path":"editor/reference/utils/FrustumCulling.md","title":"utils/FrustumCulling.js","description":"","kind":"reference","source":"editor/js/utils/FrustumCulling.js","updated":"","headings":["utils/FrustumCulling.js","Functions","extractFrustumPlanes(vp)","isSphereInFrustum(center, radius, planes)","isAABBInFrustum(minX, minY, minZ, maxX, maxY, maxZ, planes)","isAABBCenterExtentsInFrustum(cx, cy, cz, ex, ey, ez, planes)","isEntityAABBVisible(entityPos, entityScale, localCenter, localExtents, planes)","isEntitySphereVisible(position, scale, baseRadius)","getCullingStats()","resetStats()","getFrustumPlanes()","getFrustumCorners(invViewProjMatrix)","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"mesh AABB half extents in local space (Float32Array) — No description in source JSDoc. Legacy: entity visibility using bounding sphere (kept for broad phase / fallback). Get current frustum planes (for debugging / external use) Calculate frustum corners in world space (for debug visualization) Parameters: (Float32Array) — Inverse view projection matrix Returns: 8 corner points Re exports , , , , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"895c1aa38b6af65af81731531d6bd7da0bf39ceffc1d8c542ec31f86be131f82"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/GPUBufferPool.md::0000","path":"editor/reference/utils/GPUBufferPool.md","title":"utils/GPUBufferPool.js","description":"","kind":"reference","source":"editor/js/utils/GPUBufferPool.js","updated":"","headings":["utils/GPUBufferPool.js","Functions","getBuffer(device, size, usage, label = '')","releaseBuffer(buffer, usage)","getPoolStats()","clearPools()","trimPools(keepCount = 2)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get a buffer from pool or create new one Parameters: (GPUDevice) — WebGPU device (number) — Minimum buffer size in bytes (number) — GPUBufferUsage flags (string) — Optional label for debugging Return a buffer to the pool Parameters: (GPUBuffer) — Buffer to return (number) — Original usage flags Get pool statistics Clear all pools and destroy buffers Trim pools to reduce memory <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"0bf7de8a63c0ceb16ef644df7f24250a014475dca6779bda478faf56c75baa33"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/InterpolationCurves.md::0000","path":"editor/reference/utils/InterpolationCurves.md","title":"utils/InterpolationCurves.js","description":"","kind":"reference","source":"editor/js/utils/InterpolationCurves.js","updated":"","headings":["utils/InterpolationCurves.js","Classes","class AnimationTrack","class Tween","Functions","smoothstep(t)","smootherstep(t)","springInterpolation(t, stiffness = 100, damping = 10)","bounceInterpolation(t)","lerp(from, to, t, easing = 'linear')","lerpVec3(from, to, t, easing = 'linear')","slerp(q1, q2, t, easing = 'linear')","catmullRom(points, t, closed = false)","bSpline(points, t, degree = 3)","hermite(p0, m0, p1, m1, t)","Constants","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Animation track keyframe based animation Method Signature Summary Add a keyframe Remove keyframe at time Evaluate track at time Tween simple value animation Method Signature Summary Update tween Reset tween Functions Smoothstep interpolation (Hermite) Smootherstep (Ken Perlin's improved version) Spring interpolation with damping Bounce interpolation Interpolate between two values with easing Parameters: (number) — Start value (number) — End value (number) — Progress [0, 1] (string Function) — Easing function or name Interpolate between two vec3s with easing Spherical linear interpolation for quaternions (SLERP) Parameters: (number[]) — Start quaternion [x, y, z, w] (number[]) — End quaternion [x, y, z, w] (number) — Progress [0, 1] (string Function) — Optional easing Catmull Rom spline interpolation (passes through all control points) Parameters: (Array) — Array of control points (number) — Progress [0, 1] across entire spline (boolean) — Whether spline is closed loop B Spline interpolation (smooth curve, doesn't pass through control points) Hermite spline interpolation Parameters: (number[]) — Start point (number[]) — Start tangent (number[]) — End point (number[]) — End tangent (number) — Progress [0, 1] Constants Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset","contentHash":"4dbc1284044a491161eeaffb96b5001c3e767ea64f61faf20f8faf689f6d91ac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/InterpolationCurves.md::0001","path":"editor/reference/utils/InterpolationCurves.md","title":"utils/InterpolationCurves.js","description":"","kind":"reference","source":"editor/js/utils/InterpolationCurves.js","updated":"","headings":["utils/InterpolationCurves.js","Classes","class AnimationTrack","class Tween","Functions","smoothstep(t)","smootherstep(t)","springInterpolation(t, stiffness = 100, damping = 10)","bounceInterpolation(t)","lerp(from, to, t, easing = 'linear')","lerpVec3(from, to, t, easing = 'linear')","slerp(q1, q2, t, easing = 'linear')","catmullRom(points, t, closed = false)","bSpline(points, t, degree = 3)","hermite(p0, m0, p1, m1, t)","Constants","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"061e863848f930ba8c66cabed0faa2ac3e3876d4f68adc011bc66d9e5fe979f3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/MemoryIntegration.md::0000","path":"editor/reference/utils/MemoryIntegration.md","title":"utils/MemoryIntegration.js","description":"","kind":"reference","source":"editor/js/utils/MemoryIntegration.js","updated":"","headings":["utils/MemoryIntegration.js","Functions","async initMemoryIntegration(gpuDevice = null)","getMemoryPressure()","shouldOffload()","async storeParticleFrame(frameIndex, frameData)","async retrieveParticleFrame(frameIndex)","async freeParticleFrame(frameIndex)","async archiveHistoryEntry(index, entry)","async retrieveHistoryEntry(index)","async cacheAsset(uuid, data)","async retrieveCachedAsset(uuid, asText = false)","storeProfilerFrames(frames)","async getMemoryStats()","formatMemoryForProfiler(stats)","getManager()","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MemoryIntegration.js Wires up off heap memory to editor/engine systems Integrates OffHeapMemoryManager with: Particle snapshot system (large frame buffers → WASM/Worker) Editor history (old undo entries → IDB) Asset cache (loaded assets → Worker memory) Profiler timeline (frame history → off heap) Functions Initialize memory integration Get current memory pressure (0 1) Check if we should offload to off heap storage Store particle frame in off heap memory Large frames ( 100KB) go to worker memory Retrieve particle frame from off heap storage Store old history entry to IDB when memory pressure is high Retrieve archived history entry from IDB Store large asset in worker memory Retrieve cached asset from worker memory Store profiler frame batch in WASM memory Get comprehensive memory stats Format memory stats for profiler display <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"cdf942e248d772de47f54fbab3b4a33cce0eab06eb80b28f7331ad033ac7fcf5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/ObjectPool.md::0000","path":"editor/reference/utils/ObjectPool.md","title":"utils/ObjectPool.js","description":"","kind":"reference","source":"editor/js/utils/ObjectPool.js","updated":"","headings":["utils/ObjectPool.js","Functions","getFloat32Array(size)","releaseFloat32Array(arr)","getArray()","releaseArray(arr)","getVec3(x = 0, y = 0, z = 0)","releaseVec3(v)","getVec4(x = 0, y = 0, z = 0, w = 1)","releaseVec4(v)","getMat4()","releaseMat4(m)","getPoolStats()","clearPools()","trimPools(keepRatio = 0.5)","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get a Float32Array of specified size from pool Return a Float32Array to the pool Get a generic array from pool Return a generic array to the pool Get a vec3 [x, y, z] from pool Return a vec3 to pool Get a vec4 [x, y, z, w] from pool Return a vec4 to pool Get a mat4 (16 floats) from pool Return a mat4 to pool Get pool statistics Clear all pools (for memory pressure situations) Trim pools to reduce memory (keep some for reuse) Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"72904294d1f1ebf365d9a265c5cc3e784a606ea7f649f41aecd5abcbd3b6c273"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/OffHeapMemory.md::0000","path":"editor/reference/utils/OffHeapMemory.md","title":"utils/OffHeapMemory.js","description":"","kind":"reference","source":"editor/js/utils/OffHeapMemory.js","updated":"","headings":["utils/OffHeapMemory.js","Classes","class MultiWasmMemoryPool","class ArrayBufferPool","class GPUBufferStorage","class IndexedDBStorage","class WorkerMemoryPool","class SharedRingBuffer","class MaxGPUBufferStorage extends GPUBufferStorage","class OffHeapMemoryManager","Functions","async invalidateLegacyOffHeapCaches(indexedDBApi = globalThis.indexedDB)","getOffHeapManager()","async initOffHeapManager(device = null, options = {})","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: OffHeapMemory.js MAXIMUM Memory Expansion System Pushes browser memory limits to the absolute maximum using every available strategy: 1. Multi WASM Pool Multiple 4GB WASM modules (up to 16GB+ total) 2. Worker Memory Pool Each worker has its own 4GB heap 3. SharedArrayBuffer Zero copy cross worker/thread communication 4. GPU Buffer Storage VRAM is separate from system RAM limits 5. IndexedDB Sharding Multiple databases for unlimited persistent storage 6. ArrayBuffer Pooling Aggressive reuse to minimize GC pressure 7. Memory Pressure Management Auto offloading and tiered storage THEORETICAL MAXIMUM: 4 WASM modules × 4GB = 16GB 8 Workers × 4GB heap = 32GB (but shared address space limits this) GPU buffers = Limited by VRAM (8 24GB on modern GPUs) IndexedDB = Unlimited (disk backed) PRACTICAL MAXIMUM: 8 16GB usable off heap memory Classes Multi WASM Memory Pool Creates multiple WASM memory instances, each up to 4GB Total capacity: up to 16GB off heap Method Signature Summary Allocate memory across multiple WASM modules (sync version) Free allocated memory ArrayBuffer pool for reducing GC pressure Reuses buffers instead of creating new ones Method Signature Summary Get size class (next power of 2) Acquire a buffer of at least the specified size Return a buffer to the pool Acquire a typed array backed by a pooled buffer Clear all pools (call during aggressive cleanup) GPU buffer storage for large data Keeps data in VRAM instead of JS heap Method Signature Summary Create a GPU buffer for storing data Write data to GPU buffer Read data back from GPU (async) IndexedDB storage for large persistent data Method Signature Summary Worker based memory expansion Each Web Worker has its own JS","contentHash":"ec02a9ed977d28fa5bb3fbe29752e118c5e2e1e22a0a6bc4b4a2751f1dec33c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/OffHeapMemory.md::0001","path":"editor/reference/utils/OffHeapMemory.md","title":"utils/OffHeapMemory.js","description":"","kind":"reference","source":"editor/js/utils/OffHeapMemory.js","updated":"","headings":["utils/OffHeapMemory.js","Classes","class MultiWasmMemoryPool","class ArrayBufferPool","class GPUBufferStorage","class IndexedDBStorage","class WorkerMemoryPool","class SharedRingBuffer","class MaxGPUBufferStorage extends GPUBufferStorage","class OffHeapMemoryManager","Functions","async invalidateLegacyOffHeapCaches(indexedDBApi = globalThis.indexedDB)","getOffHeapManager()","async initOffHeapManager(device = null, options = {})","Constants","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"data back from GPU (async) IndexedDB storage for large persistent data Method Signature Summary Worker based memory expansion Each Web Worker has its own JS heap ( 4GB potential) Spawn multiple workers to multiply available memory Method Signature Summary SharedArrayBuffer Ring Buffer Zero copy data sharing between main thread and workers Requires Cross Origin Isolation headers Method Signature Summary Maximum GPU Buffer Storage Aggressively uses VRAM for data storage Method Signature Summary MAXIMUM Memory Expansion Manager Combines ALL strategies for absolute maximum memory capacity Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"85c256dcc19e8650fbf06c353659c0daa3439fb0784d5012ebdb9cae5c90d4ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/PhysicsBodyPool.md::0000","path":"editor/reference/utils/PhysicsBodyPool.md","title":"utils/PhysicsBodyPool.js","description":"","kind":"reference","source":"editor/js/utils/PhysicsBodyPool.js","updated":"","headings":["utils/PhysicsBodyPool.js","Functions","getPooledBody(simMode, colliderShape)","releaseBody(physicsWorld, bodyHandle, simMode, colliderShape)","resetPooledBody(physicsWorld, bodyHandle, position, rotation, scale)","getPoolStats()","clearPools(physicsWorld)","trimPools(keepCount = 5)","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get a body handle from pool or signal that new one is needed Parameters: (string) — 'dynamic', 'static', or 'kinematic' (string) — 'box', 'sphere', 'capsule', etc. Returns: Body handle if available, null if need to create new Return a body to the pool for reuse Parameters: (Object) — PhysX world reference (number) — Body handle to pool (string) — Body simulation mode (string) — Collider shape type Reset a pooled body for reuse with new transform Parameters: (Object) — PhysX world reference (number) — Body handle (number[]) — [x, y, z] (number[]) — [x, y, z, w] quaternion (number[]) — [sx, sy, sz] Get pool statistics Clear all pools (destroys pooled bodies) Parameters: (Object) — PhysX world reference for cleanup Trim pools to reduce memory Re exports <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"a6224a5a4d4cfc854ae28346ef991d88b53789313ee81a7d8a477a86cb738a75"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/RenderBundleCache.md::0000","path":"editor/reference/utils/RenderBundleCache.md","title":"utils/RenderBundleCache.js","description":"","kind":"reference","source":"editor/js/utils/RenderBundleCache.js","updated":"","headings":["utils/RenderBundleCache.js","Functions","getOrCreateBundle(device, key, version, descriptor, recordFn)","invalidateBundle(key)","invalidateBundlesWithPrefix(prefix)","clearBundleCache()","pruneOldBundles(maxAgeMs = 60000)","getCacheStats()","createStandardDescriptor(colorFormat = 'bgra8unorm', depthFormat = 'depth24plus')","executeBundles(passEncoder, bundles)","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create or get cached render bundle Parameters: (GPUDevice) — No description in source JSDoc. (string) — Unique identifier for this bundle (number) — Version number (increment when content changes) (Object) — Render bundle encoder descriptor (Function) — Function that records draw calls: (encoder) = void Invalidate a specific bundle (force re record next frame) Invalidate all bundles matching a prefix Clear all cached bundles Remove bundles not used recently Parameters: (number) — Maximum age in milliseconds Get cache statistics Helper to create standard descriptor for color + depth rendering Execute render bundles in a render pass Parameters: (GPURenderPassEncoder) — No description in source JSDoc. (GPURenderBundle[]) — No description in source JSDoc. Re exports <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"693233f4b386f1916293fbed60f18326dff5860612fb6d489aa475860741b3dd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/SIMDMath.md::0000","path":"editor/reference/utils/SIMDMath.md","title":"utils/SIMDMath.js","description":"","kind":"reference","source":"editor/js/utils/SIMDMath.js","updated":"","headings":["utils/SIMDMath.js","Functions","createVec3Batch(count)","vec3ArrayToBatch(vectors)","batchToVec3Array(batch)","batchAdd(a, b, out = createVec3Batch(a.count)","batchSub(a, b, out = createVec3Batch(a.count)","batchScale(a, scalar, out = createVec3Batch(a.count)","batchMul(a, b, out = createVec3Batch(a.count)","batchDot(a, b, out = new Float32Array(a.count)","batchCross(a, b, out = createVec3Batch(a.count)","batchLengthSq(a, out = new Float32Array(a.count)","batchLength(a, out = new Float32Array(a.count)","batchNormalize(a, out = createVec3Batch(a.count)","batchLerp(a, b, t, out = createVec3Batch(a.count)","batchTransform(batch, m, out = createVec3Batch(batch.count)","batchDistanceToPoint(batch, point, out = new Float32Array(batch.count)","batchDistanceSqToPoint(batch, point, out = new Float32Array(batch.count)","batchFindWithinRadius(batch, point, radius)","batchFindKNearest(batch, point, k)","batchComputeAABB(batch)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a batch of vec3s in SoA format Parameters: (number) — Number of vectors Returns: { x, y, z, count } Create batch from array of [x,y,z] vectors Parameters: (Array) — Array of [x,y,z] arrays Returns: SoA batch Convert batch back to array of [x,y,z] Parameters: (Object) — SoA batch Returns: Array of [x,y,z] Batch add: out = a + b Batch subtract: out = a b Batch scale: out = a scalar Batch multiply component wise: out = a b Batch dot product: out[i] = dot(a[i], b[i]) Batch cross product: out = a × b Batch length squared: out[i] = a[i] ² Batch length: out[i] = a[i] Batch normalize: out[i] = normalize(a[i]) Batch lerp: out = lerp(a, b, t) Batch transform by 4x4 matrix Parameters: (Object) — Vec3 batch (Float32Array) — 4x4 matrix (column major) Batch distance to point Parameters: (Object) — Vec3 batch (number[]) — [x, y, z] Returns: Distances Batch distance squared to point (faster, for comparisons) Find indices within radius of point Parameters: (Object) — Vec3 batch (number[]) — [x, y, z] (number) — Search radius Returns: Indices within radius Find K nearest neighbors Parameters: (Object) — Vec3 batch (number[]) — [x, y, z] (number) — Number of neighbors Returns: Indices of K nearest Batch AABB computation Parameters: (Object) — Vec3 batch Returns: { min: [x,y,z], max: [x,y,z] } <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset","contentHash":"b1073342ace2c3c41b6de3282819c9a78a87907b5195553a0a94fe0233e2a261"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/SIMDMath.md::0001","path":"editor/reference/utils/SIMDMath.md","title":"utils/SIMDMath.js","description":"","kind":"reference","source":"editor/js/utils/SIMDMath.js","updated":"","headings":["utils/SIMDMath.js","Functions","createVec3Batch(count)","vec3ArrayToBatch(vectors)","batchToVec3Array(batch)","batchAdd(a, b, out = createVec3Batch(a.count)","batchSub(a, b, out = createVec3Batch(a.count)","batchScale(a, scalar, out = createVec3Batch(a.count)","batchMul(a, b, out = createVec3Batch(a.count)","batchDot(a, b, out = new Float32Array(a.count)","batchCross(a, b, out = createVec3Batch(a.count)","batchLengthSq(a, out = new Float32Array(a.count)","batchLength(a, out = new Float32Array(a.count)","batchNormalize(a, out = createVec3Batch(a.count)","batchLerp(a, b, t, out = createVec3Batch(a.count)","batchTransform(batch, m, out = createVec3Batch(batch.count)","batchDistanceToPoint(batch, point, out = new Float32Array(batch.count)","batchDistanceSqToPoint(batch, point, out = new Float32Array(batch.count)","batchFindWithinRadius(batch, point, radius)","batchFindKNearest(batch, point, k)","batchComputeAABB(batch)","Notes & Examples","Editor Extension System"],"chunkIndex":1,"chunkCount":2,"text":"Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"061e863848f930ba8c66cabed0faa2ac3e3876d4f68adc011bc66d9e5fe979f3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/SpatialIndex.md::0000","path":"editor/reference/utils/SpatialIndex.md","title":"utils/SpatialIndex.js","description":"","kind":"reference","source":"editor/js/utils/SpatialIndex.js","updated":"","headings":["utils/SpatialIndex.js","Classes","class Octree","class EntitySpatialIndex","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Simple Octree for dynamic entity queries Better for frequently changing scenes than BVH Method Signature Summary Insert an object into the octree Remove an object by ID Update an object's position Query objects within radius of point Query objects within AABB Query objects within frustum Find nearest object to point Raycast against objects Get statistics about the octree Clear all objects EntitySpatialIndex Manages spatial indexing for editor entities Method Signature Summary Add or update an entity Remove an entity Query entities within radius Query entities within box Query visible entities Find nearest entity Raycast to find entity Clear all entities Get stats Re exports , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"f1a6331341a3b2cf94d59d3d974e89e267575bb90acd688e29f0a4129eb5b7b7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/TextureCompression.md::0000","path":"editor/reference/utils/TextureCompression.md","title":"utils/TextureCompression.js","description":"","kind":"reference","source":"editor/js/utils/TextureCompression.js","updated":"","headings":["utils/TextureCompression.js","Functions","detectCompressedFormats(adapter)","getOptimalFormat(adapter, needsAlpha = true)","getCompressedSize(width, height, format)","getMemorySavings(width, height, compressedFormat)","getQualitySizeScore(width, height, format, options = {})","createCompressedTexture(device, adapter, descriptor)","getFormatInfo(format)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TextureCompression WebGPU compressed texture format support. Supports: BC formats (Desktop: DXT/S3TC) ASTC formats (Mobile/Apple) ETC2 formats (Android/WebGL fallback) Functions Detect supported compressed texture formats. Parameters: (GPUAdapter) — WebGPU adapter Returns: Supported format info Get optimal texture format for device. Parameters: (GPUAdapter) — No description in source JSDoc. (boolean) — Whether alpha channel is needed Returns: GPUTextureFormat Calculate compressed texture size. Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (string) — No description in source JSDoc. Returns: Size in bytes Calculate memory savings percentage. Calculate a quality size report for picker and audit UI. Create compressed texture with fallback. Parameters: (GPUDevice) — No description in source JSDoc. (GPUAdapter) — No description in source JSDoc. (Object) — Texture descriptor Get format info for display. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"ef72835c0acea1a1936a49814ac75c0a45415ed6a0b31d7d6b8a09f6aff60ee3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/utils/WeakCache.md::0000","path":"editor/reference/utils/WeakCache.md","title":"utils/WeakCache.js","description":"","kind":"reference","source":"editor/js/utils/WeakCache.js","updated":"","headings":["utils/WeakCache.js","Classes","class WeakValueMap","class LRUCache","class TTLCache","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes WeakValueMap Map with weak references to values Values are auto removed when garbage collected Method Signature Summary LRUCache Least Recently Used cache with max size Method Signature Summary TTLCache Cache with time to live expiration Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"d2185c1b36cb82326a026c0df0788dd74941289d51ded4ca0adc382375bcd8fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/AuraRenderer.md::0000","path":"editor/reference/viewport/AuraRenderer.md","title":"viewport/AuraRenderer.js","description":"","kind":"reference","source":"editor/js/viewport/AuraRenderer.js","updated":"","headings":["viewport/AuraRenderer.js","Classes","class AuraRenderer","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AuraRenderer — System 1: Outer Energy Shell / Aura Layer ========================================================= Renders the actual model mesh at slightly expanded scale with electric blue cyan color — same approach as SkinRenderer but bigger and more transparent. No hull approximation needed; the real mesh IS the aura shell. LAYER ROLE: Outermost visible layer — glowing energy field that exactly traces the body shape at AURA SCALE (8% larger than entity scale). VISUAL: Full res model mesh, electric blue cyan [0.2, 0.7, 1.0, 0.15] Scale multiplied by AURA SCALE so it sits slightly outside the skin High roughness for a soft diffuse glow look DATA SOURCE: EntityMeshRenderer already has 'custom <uuid ' registered. No extra work. INDEPENDENCE: No imports needed beyond EntityMeshRenderer (draw) No reference to SkinRenderer, SkeletonRenderer, SDFColliderRenderer Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"3ebc692e11d0ee9611790c976d374414ce238e097f70b1e25ac408795577fa15"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/CameraController.md::0000","path":"editor/reference/viewport/CameraController.md","title":"viewport/CameraController.js","description":"","kind":"reference","source":"editor/js/viewport/CameraController.js","updated":"","headings":["viewport/CameraController.js","Classes","class CameraController","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Get camera right vector (for billboarding) Get camera up vector (for billboarding) Get camera forward vector (for spatial audio listener orientation) Get view matrix (zero alloc: inlined lookAt math, writes to cached viewMat) Get projection matrix (WebGPU NDC: z in [0,1]) Zero alloc: writes to cached projMat Get view projection matrix (zero alloc) Get inverse view projection matrix (for grid unprojection) Reuses cached viewProj if same aspect ratio (avoids redundant matrix computation) Zero alloc: writes to cached cachedInvViewProj <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"b53aea197fe085270c03062fd3b75edd0333355aa2bee71c6fa5c068424c4f80"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/CollabOverlayRenderer.md::0000","path":"editor/reference/viewport/CollabOverlayRenderer.md","title":"viewport/CollabOverlayRenderer.js","description":"","kind":"reference","source":"editor/js/viewport/CollabOverlayRenderer.js","updated":"","headings":["viewport/CollabOverlayRenderer.js","Classes","class CollabOverlayRenderer","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CollabOverlayRenderer.js Renders peer cameras as small 3D camcorder style pyramids in the viewport, with colored tint matching the peer's chosen color and a floating name label. Uses the existing EntityMeshRenderer to draw pyramids (no new GPU pipelines needed). Name labels are HTML overlays positioned via 3D→2D projection. Classes Method Signature Summary Ensure the HTML overlay container exists. Render all peer cameras into the current render pass. Call this AFTER entityMeshRenderer.beginFrame() and BEFORE flush(). Update HTML name labels positioned above each peer's camera. Call once per frame AFTER rendering. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"c0ea445475fa3463cd0051f5dec1fb9beed4b9df28090013279e2c459aa1d35c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/GhostPreviewRenderer.md::0000","path":"editor/reference/viewport/GhostPreviewRenderer.md","title":"viewport/GhostPreviewRenderer.js","description":"","kind":"reference","source":"editor/js/viewport/GhostPreviewRenderer.js","updated":"","headings":["viewport/GhostPreviewRenderer.js","Classes","class GhostPreviewRenderer","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Render ghost preview at position <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"d4fc38826db99840da2eb611d89c3591b21a6a3efb993f1b0d15721e6aa944a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/SDFColliderRenderer.md::0000","path":"editor/reference/viewport/SDFColliderRenderer.md","title":"viewport/SDFColliderRenderer.js","description":"","kind":"reference","source":"editor/js/viewport/SDFColliderRenderer.js","updated":"","headings":["viewport/SDFColliderRenderer.js","Classes","class SDFColliderRenderer","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Add an SDF shape to render Add SDF from mesh data automatically chooses best representation Uses caching for frequently used meshes Upload baked SDF data to 3D texture Resize 3D SDF texture Add baked SDF shape instance Clear the SDF cache (call when meshes change) Remove specific mesh from cache (call when entity deleted) Get cache statistics for memory monitoring Trim cache to max size (LRU eviction) Add capsule chain for ragdoll/character bodies <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"7ddd70b9f4b39984bce8af456fa5d7da7e77f76d28cac072a5c020ee0d1ff724"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/ShapeWireframes.md::0000","path":"editor/reference/viewport/ShapeWireframes.md","title":"viewport/ShapeWireframes.js","description":"","kind":"reference","source":"editor/js/viewport/ShapeWireframes.js","updated":"","headings":["viewport/ShapeWireframes.js","Functions","generateShapeWireframe(meshType, es, ep, er, doRot)","quatFromDir(dx, dy, dz)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ShapeWireframes.js — Shared shape specific wireframe generators ================================================================ Used by SkeletonRenderer, SkinRenderer, and AuraRenderer to render shape accurate wireframe overlays that match the SDF collider shapes. Each generator returns { joints: [[x,y,z],...], edges: [[i,j],...] } in LOCAL space. The caller transforms to world space. Functions Generate a shape specific wireframe for an entity. Parameters: (string) — e.g. 'sphere', 'cube', 'cylinder', etc. (number[]) — entity scale [sx, sy, sz] (number[]) — entity world position [x, y, z] (number[]) — entity rotation quaternion [x, y, z, w] (boolean) — whether rotation is non identity Returns: } Compute quaternion that aligns Y axis [0,1,0] with direction [dx,dy,dz]. Exported for use in renderers that draw capsule sticks between joints. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"1fa59230d32663ef2910310ae2b75ec06921f3eade7ac8730bba8869c9bbdcdb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/SkeletonRenderer.md::0000","path":"editor/reference/viewport/SkeletonRenderer.md","title":"viewport/SkeletonRenderer.js","description":"","kind":"reference","source":"editor/js/viewport/SkeletonRenderer.js","updated":"","headings":["viewport/SkeletonRenderer.js","Classes","class SkeletonRenderer","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SkeletonRenderer — System 3: X Ray Skeleton / Bone Layer ========================================================= Renders the internal skeleton as solid physical geometry — gold ball joints at each bone pivot, ivory metallic bone sticks connecting them. Think medical X ray imaging or the internal rig view in a 3D animation tool. LAYER ROLE: Innermost visible layer — inside the skin capsules. Fully opaque metallic geometry. Shows the exact bone hierarchy as a physical rig. VISUAL: Ball joints: gold [1.0, 0.85, 0.3, 1.0], metallic=0.9, roughness=0.15 Bone sticks: ivory [0.95, 0.9, 0.8, 1.0], metallic=0.85, roughness=0.2 Sizes scaled by body height — proportionally correct DATA SOURCE: getAnimatedBoneShapes() → .joints[] (all joint world positions + child links) INDEPENDENCE: Imports ONLY from SkeletalAnimation.js (data) and EntityMeshRenderer (draw) No reference to AuraRenderer, SkinRenderer, SDFColliderRenderer Can be deleted without affecting any other system EDIT MODE vs PLAY MODE: Edit: animated bone joints from getAnimatedBoneShapes() Play (ragdoll): bone positions from live physics bodies Classes Method Signature Summary Render skeleton X ray (joints + bone sticks) for all skinned entities this frame. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"36325571e232f6c6a6cde01760b3b1442e45c934ac72f215135f81276033a0ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/SkinRenderer.md::0000","path":"editor/reference/viewport/SkinRenderer.md","title":"viewport/SkinRenderer.js","description":"","kind":"reference","source":"editor/js/viewport/SkinRenderer.js","updated":"","headings":["viewport/SkinRenderer.js","Classes","class SkinRenderer","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SkinRenderer — System 2: High Detail Body Skin ================================================ Renders the ACTUAL mesh geometry of the entity, semi transparent, with a warm skin tone. Full triangle count of the imported model — this is NOT a hull approximation. The mesh IS the skin layer. LAYER ROLE: Inner visible layer — shows the real body geometry as a translucent skin shell. Since it uses the same mesh as the actual entity render, it is perfectly shape accurate at full detail. VISUAL: Full res model mesh, warm skin tone [0.9, 0.6, 0.4, 0.28] Rendered via the existing 'custom <uuid ' mesh key already in EntityMeshRenderer No separate mesh registration needed — the mesh is already uploaded DATA SOURCE: EntityMeshRenderer already has the 'custom <uuid ' mesh registered when the entity loads. No separate computation needed — just pass entity transform directly. INDEPENDENCE: No external imports needed beyond EntityMeshRenderer (draw) No reference to AuraRenderer, SkeletonRenderer, SDFColliderRenderer Classes Method Signature Summary Render the actual mesh geometry per entity as a semi transparent skin layer. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"0a4af3bfb6574fcda4192ce3981e6dc9a74a70e19ea14dcbd5eff950781b560e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/SurfaceGridRenderer.md::0000","path":"editor/reference/viewport/SurfaceGridRenderer.md","title":"viewport/SurfaceGridRenderer.js","description":"","kind":"reference","source":"editor/js/viewport/SurfaceGridRenderer.js","updated":"","headings":["viewport/SurfaceGridRenderer.js","Classes","class SurfaceGridRenderer","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SurfaceGridRenderer.js GMod style surface grid overlay for precise tool placement Shows a transparent green grid aligned to the surface normal Classes Method Signature Summary Update grid position and orientation Hide the grid Update cursor snap position for visual feedback Snap a world position to the grid Get the snapped position without surface offset (for attachment detection) Transform world position to grid local space Transform grid local position to world space Get tangent vector perpendicular to normal Cross product Generate grid vertices that conform to surface geometry Rotate a vector around an axis by an angle Uses Rodrigues' rotation formula Project a world position onto the surface using raycasting Raycast against world geometry Raycast against a single entity (sphere intersection) Create grid transform matrix Render the grid Render cursor snap position indicator Cleanup GPU resources <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"a579a94c1b6f047ba0f7a5ba5239c940af7251a6a851b0340062bcfebe76676e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/ViewportMeshUtils.md::0000","path":"editor/reference/viewport/ViewportMeshUtils.md","title":"viewport/ViewportMeshUtils.js","description":"","kind":"reference","source":"editor/js/viewport/ViewportMeshUtils.js","updated":"","headings":["viewport/ViewportMeshUtils.js","Functions","getSpawnIdLower(entityMeta)","isEmitterEntity(entityMeta)","getEntityMeshTypes(entityMeta, fallbackMeshType = null)","getEntityMeshParts(entityMeta, fallbackMeshType = null)","getModelPartLocalMatrix(part, animatedMatrix = null)","composeEntityPartMatrix(position, rotation, scale, part, animatedMatrix = null)","transformAabbByMatrix(bounds, matrix)","getAggregateMeshBounds(entityMeta, meshRenderer, fallbackMeshType = null, resolveAnimatedMatrix = null)","inferMeshMaterial(meshType)","inferEntityMeshTypeAndColor(entityMeta)","clearMeshTypeCache()","snapToGrid(value, gridSize, enabled)","Re-exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ViewportMeshUtils Mesh type inference and color mapping utilities Extracted from Viewport.js for modularity Functions Get lowercase spawnId for an entityMeta (no caching — small string allocs are cheaper than WeakMap GC overhead) Check if entityMeta represents an emitter Get PBR material properties for a mesh type Parameters: (string) — No description in source JSDoc. Returns: [roughness, metallic] Infer mesh type and color from entity metadata Results are cached for performance Parameters: (Object) — Entity metadata with meshType, spawnId, name Returns: } Clear mesh type cache (call when entities are added/removed/renamed) Snap a value to grid Parameters: (number) — Value to snap (number) — Grid size (boolean) — Whether snapping is enabled Returns: Snapped value Re exports , <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"c3c4a583b8c24b37dad16a65d5238410cf43f23e17bb54403bc1f2f4d3a6d4c5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/ViewportProfiler.md::0000","path":"editor/reference/viewport/ViewportProfiler.md","title":"viewport/ViewportProfiler.js","description":"","kind":"reference","source":"editor/js/viewport/ViewportProfiler.js","updated":"","headings":["viewport/ViewportProfiler.js","Classes","class ViewportProfiler","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ViewportProfiler Performance profiler UI for the viewport Extracted from Viewport.js for modularity Classes Method Signature Summary Collect all stage timings from pipeline.getTimings() merged with old beginStage/endStage render phase timings still in renderFrame(). Returns { phases: Map<phaseName, totalMs , stages: Map<stageName, {phase, ms} } <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"ebb2b395011e49c43217f5dbf20336cc69d27345bf672a9e69e1770bc73b42ee"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/ViewportRaycasting.md::0000","path":"editor/reference/viewport/ViewportRaycasting.md","title":"viewport/ViewportRaycasting.js","description":"","kind":"reference","source":"editor/js/viewport/ViewportRaycasting.js","updated":"","headings":["viewport/ViewportRaycasting.js","Functions","rayGroundPlaneIntersect(rayOrigin, rayDir, planeY = 0)","raySegmentDistance(rayOrigin, rayDir, segA, segB)","raySphereIntersect(rayOrigin, rayDir, sphereCenter, radius)","rotatePointByQuaternion(point, quat)","multiplyQuaternions(a, b)","rayOBBIntersect(rayOrigin, rayDir, boxCenter, boxRotation, halfExtents)","closestPointOnAxis(rayOrigin, rayDir, axisOrigin, axisDir)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ViewportRaycasting.js Pure raycasting math utilities Extracted from Viewport.js for modularity Functions Ray ground plane intersection Parameters: (number[]) — Ray origin [x, y, z] (number[]) — Ray direction (normalized) [x, y, z] (number) — Y coordinate of ground plane Returns: null} Calculate distance from ray to line segment (for rope picking) Parameters: (number[]) — Ray origin (number[]) — Ray direction (number[]) — Segment start point (number[]) — Segment end point Returns: null} Ray sphere intersection test Parameters: (number[]) — Ray origin (number[]) — Ray direction (number[]) — Sphere center (number) — Sphere radius Returns: Distance to hit or null Rotate a point by quaternion Parameters: (number[]) — Point [x, y, z] (number[]) — Quaternion [x, y, z, w] Multiply two quaternions: result = a b Parameters: (number[]) — First quaternion [x, y, z, w] (number[]) — Second quaternion [x, y, z, w] Ray OBB (Oriented Bounding Box) intersection Parameters: (number[]) — Ray origin (number[]) — Ray direction (number[]) — Box center (number[]) — Box rotation quaternion [x, y, z, w] (number[]) — Box half extents [x, y, z] Returns: null} Closest point on axis from ray Parameters: (number[]) — Ray origin (number[]) — Ray direction (number[]) — Axis origin (number[]) — Axis direction Returns: null} <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"029075dac89082943cd4153c0bfa1cf4bc25e78b372eda8e01d2afecc880352f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/stages/FixedStepStages.md::0000","path":"editor/reference/viewport/stages/FixedStepStages.md","title":"viewport/stages/FixedStepStages.js","description":"","kind":"reference","source":"editor/js/viewport/stages/FixedStepStages.js","updated":"","headings":["viewport/stages/FixedStepStages.js","Functions","registerFixedStepStages(pipeline, vp)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FixedStepStages — Physics, elastic drag, sim audio, particle step. These run 0..N times per frame on a fixed timestep accumulator. Only active in play mode (condition gated). Functions Register all fixedStep phase stages into the pipeline. Parameters: (import('../../../../engine/core/framepipeline/FramePipeline.js').FramePipeline) — No description in source JSDoc. (import('../panels/Viewport.js').ViewportPanel) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"c23f48bec3776fc07b3349e2f162d88eb8a910df7be5ecd29d55c0e8eacf25eb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/stages/PostRenderStages.md::0000","path":"editor/reference/viewport/stages/PostRenderStages.md","title":"viewport/stages/PostRenderStages.js","description":"","kind":"reference","source":"editor/js/viewport/stages/PostRenderStages.js","updated":"","headings":["viewport/stages/PostRenderStages.js","Functions","registerPostRenderStages(pipeline, vp)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PostRenderStages — Composite passes, post FX, GPU submit, profiler, spike detection, collab presence. During the transitional period, post render work still lives inside Viewport.renderFrame(). These stages will be populated one by one as code is extracted. Functions Register all postRender phase stages into the pipeline. Parameters: (import('../../../../engine/core/framepipeline/FramePipeline.js').FramePipeline) — No description in source JSDoc. (import('../../panels/Viewport.js').ViewportPanel) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"01aa393faed27b964e341ce1b79e82effb3d8c6a65ddbd641a77b034302180af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/stages/RenderStages.md::0000","path":"editor/reference/viewport/stages/RenderStages.md","title":"viewport/stages/RenderStages.js","description":"","kind":"reference","source":"editor/js/viewport/stages/RenderStages.js","updated":"","headings":["viewport/stages/RenderStages.js","Functions","registerRenderStages(pipeline, vp)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RenderStages — GPU render pass stages: debug targets, volume compute, clear pass, grid, entities, physics lines, cloth, surface grid, particles, diagnostics, SDF colliders, bone directions, gizmos. During the transitional period, the main renderFrame() body still runs inline. These stages will be populated one by one as code is extracted from Viewport.renderFrame(). Stage order values reserve gaps (10, 20, 30…) so new stages can be inserted between existing ones without renumbering. Functions Register all render phase stages into the pipeline. Parameters: (import('../../../../engine/core/framepipeline/FramePipeline.js').FramePipeline) — No description in source JSDoc. (import('../../panels/Viewport.js').ViewportPanel) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"0bb0130831fb3c3f110e4e81b9b103d7ff694ae1adc52a6aa9cab95190e8bca0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/viewport/stages/UpdateStages.md::0000","path":"editor/reference/viewport/stages/UpdateStages.md","title":"viewport/stages/UpdateStages.js","description":"","kind":"reference","source":"editor/js/viewport/stages/UpdateStages.js","updated":"","headings":["viewport/stages/UpdateStages.js","Functions","registerUpdateStages(pipeline, vp)","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: UpdateStages — Per frame update logic: timing, vGPU, camera, matrices, lights, animation, frustum, collab, stats UI, cleanup. Runs once per frame before GPU render passes. Functions Register all update phase stages into the pipeline. Parameters: (import('../../../../engine/core/framepipeline/FramePipeline.js').FramePipeline) — No description in source JSDoc. (import('../../panels/Viewport.js').ViewportPanel) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"dd48c1fde6fff42742eeb179d50141bfafd64ec7be801ce2ab6081aa01839938"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/workers/CollabSignalWorker.md::0000","path":"editor/reference/workers/CollabSignalWorker.md","title":"workers/CollabSignalWorker.js","description":"","kind":"reference","source":"editor/js/workers/CollabSignalWorker.js","updated":"","headings":["workers/CollabSignalWorker.js","Exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CollabSignalWorker.js — SharedWorker In memory SDP relay for all editor tabs on the same machine. Runs once per origin, shared across all tabs. Message types (client → worker): HELLO { peerId, username } OFFER { from, to, offerId, payload } ANSWER { from, to, offerId, payload } CANDIDATE { from, to, offerId, payload } LEAVE { peerId } LIST (request peer list) Message types (worker → client): HELLO ACK { peerId, peers: [{peerId, username}] } PEER JOINED { peerId, username } PEER LEFT { peerId } OFFER { from, to, offerId, payload } ANSWER { from, to, offerId, payload } CANDIDATE { from, to, offerId, payload } LIST { peers: [{peerId, username}] } Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"408473e2e495b2e32a4007004d9c02d1d8f2e4dad60ea195b009fb06d3155f81"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/workers/CompressionWorker.md::0000","path":"editor/reference/workers/CompressionWorker.md","title":"workers/CompressionWorker.js","description":"","kind":"reference","source":"editor/js/workers/CompressionWorker.js","updated":"","headings":["workers/CompressionWorker.js","Exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CompressionWorker Offloads timeline/history compression to background thread Uses delta+entropy residual encoding for lossless reconstruction Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"6523ed649cf47c0b46a7c72975bf4baa725a6bd8d15c6af30b716ba892fa1b02"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"editor/reference/workers/ProfilerCanvasWorker.md::0000","path":"editor/reference/workers/ProfilerCanvasWorker.md","title":"workers/ProfilerCanvasWorker.js","description":"","kind":"reference","source":"editor/js/workers/ProfilerCanvasWorker.js","updated":"","headings":["workers/ProfilerCanvasWorker.js","Exports","Notes & Examples","Editor Extension System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProfilerCanvasWorker.js OffscreenCanvas worker for profiler rendering Moves ALL canvas rendering off the main thread: Timeline graph Thread lanes Flame graph bars Main thread only sends frame data, worker handles all drawing. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Editor Extension System The editor supports extensions via the same Plauna component system as apps. Extensions can add panels, tools, menu items, and hooks into the engine. They run with elevated 'editor' capability granting access to the scene graph, asset database, and build pipeline. Example: Editor extension adding a custom panel See also: Editor Overview","contentHash":"bede1517a9bbd98938bbf86e1f017bd9d52a79414c6f2fb184125e4677ed9cab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/architecture.md::0000","path":"engine/architecture.md","title":"Engine Architecture","description":"How the engine's subsystems compose through the ECS and an event bus, all running on a single shared WebGPU device.","kind":"guide","source":"MD/engine/architecture.md","updated":"2026-06-05","headings":["Engine Architecture","High-level structure","Core (engine/core/)","ECS (engine/ecs/)","Render (engine/render/)","Sim (engine/sim/)","Net & Collab (engine/net/, engine/collab/)","Gameplay (engine/gameplay/)","How the OS reuses the engine","See also"],"chunkIndex":0,"chunkCount":2,"text":"How the engine's subsystems compose through the ECS and an event bus, all running on a single shared WebGPU device. Engine Architecture How the engine's modules compose. The engine is organized as independent subsystems that communicate through the ECS and an event bus, all running on a single shared WebGPU device. High level structure Core ( ) The lowest layer. Notable sub areas: — the WebGPU device and the VGPU abstraction ( ), multi queue, bind groups, streaming, memory tracking, recovery, canvas bootstrap. This is what the OS's GPU device broker builds on. + — declarative render/compute pass graph and the per frame pipeline. — task scheduling (\"processes\"), including async compute. — GPU and host memory managers, object pools, mapped buffer rings, vertex pools. , , , , , , , , , — supporting services. — asset/resource loading and lifetime. ECS ( ) State model for the whole engine. — entity lifecycle. — component schema definitions (large; the canonical component catalog). — schema migration / repair of component data. , , , , , — the moving parts. Systems read and mutate components; rendering and simulation are driven from ECS state. Render ( ) Turns ECS state into frames. Renderers: , , world/preview/minimap renderers. , culling ( ), , . Sub areas: , , , , , , , , , , , , , . Sim ( ) GPU first simulation, driven each tick by : , , , , , . Net & Collab ( , ) — , , , . — the multi user mesh: identity, crypto, integrity, presence, signaling, host migration, fast channel, scene/transform sync. The OS uses this for cross tab/peer IPC and multi user scenarios. Gameplay ( ) (including , the Tier 1 capability gate stand in), ( ), , , . How the OS reuses the engine The OS does not reimplement these — see Architecture Overview for the mapping of OS concerns onto engine","contentHash":"56eca482e870fe6ed404e6e8f313140e8900eec3b869d87fb2056692bee6541a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/architecture.md::0001","path":"engine/architecture.md","title":"Engine Architecture","description":"How the engine's subsystems compose through the ECS and an event bus, all running on a single shared WebGPU device.","kind":"guide","source":"MD/engine/architecture.md","updated":"2026-06-05","headings":["Engine Architecture","High-level structure","Core (engine/core/)","ECS (engine/ecs/)","Render (engine/render/)","Sim (engine/sim/)","Net & Collab (engine/net/, engine/collab/)","Gameplay (engine/gameplay/)","How the OS reuses the engine","See also"],"chunkIndex":1,"chunkCount":2,"text":"stand in), ( ), , , . How the OS reuses the engine The OS does not reimplement these — see Architecture Overview for the mapping of OS concerns onto engine modules (GPU, scheduler, memory, events, resources). See also GPU Device Sharing. Engine API Reference — generated per file from source.","contentHash":"281827f7474eb6d89ede59080d0bd4f6d7bc44a7f0e8204b75482fba6fc908e1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/audio.md::0000","path":"engine/audio.md","title":"Audio System","description":"A fully procedural audio engine — node-graph patch synthesis, 30+ node types, material-to-sound mapping from particle state, spatial audio, and physical-modeling synths.","kind":"guide","source":"MD/engine/audio.md","updated":"2026-06-05","headings":["Audio System","Architecture","Patch system","Node types","Material-to-sound mapping","Spatial audio","Synthesis modules","Key files"],"chunkIndex":0,"chunkCount":2,"text":"A fully procedural audio engine — node-graph patch synthesis, 30+ node types, material-to-sound mapping from particle state, spatial audio, and physical-modeling synths. Audio System A fully procedural audio engine with node graph synthesis, material to sound mapping, spatial audio, and real time particle driven sound generation — no pre recorded samples required. Architecture Three execution paths converge on the same patch format: Patch system A patch is a JSON descriptor defining a node graph of audio generators and processors — the universal currency of the audio system. Node types 30+ node types organized by category: Category Node types Generators Oscillator, Noise, GrainCloud Processors Filter, Delay, Reverb, Compressor, Waveshaper Modulators LFO, ADSR, Envelope, RandomWalk Physics models KarplusStrong, CombFilter, FMOperator, Waveguide, ModalBank Atoms CrackleAtom, HissAtom, RumbleAtom, ImpactAtom Output Output, SoundBlender Material to sound mapping maps particle substance properties to audio parameters in real time, so burning, flowing, or colliding particles generate sound procedurally: Temperature → pitch, brightness, crackle intensity. Density → body/weight of the sound. Velocity → whoosh intensity, impact force. Phase → which procedural patch to use (fire, water, wind). Spatial audio provides 3D positional audio with distance attenuation, reverb zones, and environmental effects. Sources are positioned in world space and attenuated by listener distance. Synthesis modules Waveguide — bidirectional delay line physical model for string/tube sounds (damping, reflection, excitation). Modal bank — resonant filter bank with material presets (metal, glass, wood) using Bessel zeros for accurate modal frequencies. Noise generator — 8 noise colors via Voss McCartney:","contentHash":"a4a0d685025f5fbda8bc1e8d3336081b6ee8ab74b5ed7a4ab143825586434fe6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/audio.md::0001","path":"engine/audio.md","title":"Audio System","description":"A fully procedural audio engine — node-graph patch synthesis, 30+ node types, material-to-sound mapping from particle state, spatial audio, and physical-modeling synths.","kind":"guide","source":"MD/engine/audio.md","updated":"2026-06-05","headings":["Audio System","Architecture","Patch system","Node types","Material-to-sound mapping","Spatial audio","Synthesis modules","Key files"],"chunkIndex":1,"chunkCount":2,"text":"filter bank with material presets (metal, glass, wood) using Bessel zeros for accurate modal frequencies. Noise generator — 8 noise colors via Voss McCartney: white, pink, brown, blue, violet, velvet, grey, crackle. Key files File Purpose Main thread node creation (30+ types) Node type registry and categories Physical modeling waveguide Resonant modal bank Material→audio parameter mapping Particle→audio bridge 3D spatial audio","contentHash":"53aa0ba6f6d556f9703d9e2c8accdee0cfd8e3ba1cd9aaa6ad6a0624b55828f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/curl-noise-flow-atlas.md::0000","path":"engine/curl-noise-flow-atlas.md","title":"Curl Noise Flow Atlas","description":"Architecture, controls, performance policy, and scientific scope of the adaptive WebGPU Curl Noise playground demo.","kind":"guide","source":"MD/engine/curl-noise-flow-atlas.md","updated":"2026-07-29","headings":["Curl Noise Flow Atlas","Pipeline","Scaling model","Selection and rendering semantics","Studies","Controls","Research basis","See also"],"chunkIndex":0,"chunkCount":3,"text":"Architecture, controls, performance policy, and scientific scope of the adaptive WebGPU Curl Noise playground demo. Curl Noise Flow Atlas Curl Noise Flow Atlas is an adaptive GPU tracer demo in the Playground. It combines a shared periodic curl field with Particle Storm's high count compute density architecture and five authored flow studies. The demo visualizes procedural incompressible style flow. It is not a Navier Stokes solver, fluid pressure simulation, or claim of physically exact continuous incompressibility after texture filtering. Pipeline bakes three decorrelated potential channels into an 3D texture. A second compute pass reads periodic neighbors and writes the centered difference curl into a separate volume. The shared stencil makes discrete divergence cancel on the bake lattice before half float quantization. Trilinear interpolation can introduce residual divergence between texels, so the demo describes the result as procedural curl flow rather than exact computational fluid dynamics. (Source: .) The bake limits unfiltered octaves to the volume's sample density and rejects configurations with fewer than two lattice samples per base noise cell. At the default period of 16, a 64³ field uses two octaves, 128³ uses three, and 256³ uses four. Runtime work then becomes one filtered field lookup per tracer instead of repeated scalar noise evaluations. The direct fallback in uses the same three component potential construction. (Sources: , .) Scaling model Each tracer stores three bounded positions and normalized lifetime in two packed values. gives uniform precision across the fixed domain. Velocity remains derived from the flow field, which keeps live state at 8 bytes without counting a retained or non simulated tier as full dynamics. (Source: .) One compute","contentHash":"f474d461ac07c51d315233e8fe9ec6749f84f5d17c9d92bfe8673868974d2b98"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/curl-noise-flow-atlas.md::0001","path":"engine/curl-noise-flow-atlas.md","title":"Curl Noise Flow Atlas","description":"Architecture, controls, performance policy, and scientific scope of the adaptive WebGPU Curl Noise playground demo.","kind":"guide","source":"MD/engine/curl-noise-flow-atlas.md","updated":"2026-07-29","headings":["Curl Noise Flow Atlas","Pipeline","Scaling model","Selection and rendering semantics","Studies","Controls","Research basis","See also"],"chunkIndex":1,"chunkCount":3,"text":"derived from the flow field, which keeps live state at 8 bytes without counting a retained or non simulated tier as full dynamics. (Source: .) One compute invocation unpacks a tracer, samples and applies the field, advances lifetime, repacks state, projects the result, and optionally adds one integer contribution to one of eight density planes. Two dimensional dispatch avoids the one dimensional workgroup count ceiling. State grows in adapter probed chunks, shaders compile before large state allocation, and size dependent targets commit only after asynchronous WebGPU validation and out of memory scopes succeed. A failed resize retains the last valid image. (Sources: , .) The governor has no configured particle count ceiling. It grows until measured frame pressure, WebGPU's 32 bit identity space, or allocation failure stops it. Per pass GPU timestamps separate fused simulation from resolve and presentation cost. Two timestamped empty markers distinguish the recurring density clear from transient state resets before the compute pass without replacing optimized commands with a slower compute clear. Reset and reactivation samples remain visible in telemetry but are excluded from governor learning. The governor also requires two fresh timestamp intervals before acting, so one cold sample cannot force a quality step. A frame cadence fallback still calibrates on adapters without timestamp queries. The HUD reports estimated GPU memory because it includes state, density, HDR history, and both field volumes. (Source: .) Under the State First rasterizer policy, four authored emitter cohorts act as bounded semantic proxies for the packed GPU population. The demo submits one aggregate bucket plan per sampled frame; it never reads individual tracer state back to JavaScript or creates","contentHash":"498631187f56d87cc58bf148f7652ec94d86b4a4d9da89cf03c8ea88980e216d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/curl-noise-flow-atlas.md::0002","path":"engine/curl-noise-flow-atlas.md","title":"Curl Noise Flow Atlas","description":"Architecture, controls, performance policy, and scientific scope of the adaptive WebGPU Curl Noise playground demo.","kind":"guide","source":"MD/engine/curl-noise-flow-atlas.md","updated":"2026-07-29","headings":["Curl Noise Flow Atlas","Pipeline","Scaling model","Selection and rendering semantics","Studies","Controls","Research basis","See also"],"chunkIndex":2,"chunkCount":3,"text":"the packed GPU population. The demo submits one aggregate bucket plan per sampled frame; it never reads individual tracer state back to JavaScript or creates one CPU object per tracer. The selected , , , , or representation is packed into the existing uniform block and changes the density deposition footprint and weight. It does not delete, freeze, or change the 8 byte simulation state. Native policy retains the original field style deposition. (Sources: , , .) Selection and rendering semantics The demo always keeps at least , or 62.5%, of active tracers eligible for density rasterization. It changes the quota by at most one cohort per adjustment. A low discrepancy permutation distributes changes within ea","contentHash":"728f2f0ae8ce12119319b45772714edb2e0cc965974d55958f4ee952cba532bd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/ecs.md::0000","path":"engine/ecs.md","title":"ECS v2","description":"The Entity-Component-System core — worlds, generational entity IDs, data components, phased systems, archetype storage, component healing, prefabs, and snapshots.","kind":"guide","source":"MD/engine/ecs.md","updated":"2026-06-05","headings":["ECS v2","Quick example","Core concepts","Worlds","Entities","Components","Systems","Execution phases","Archetype storage","Component healing","Entity lifecycle","Prefabs","World snapshots","Key files"],"chunkIndex":0,"chunkCount":2,"text":"The Entity-Component-System core — worlds, generational entity IDs, data components, phased systems, archetype storage, component healing, prefabs, and snapshots. ECS v2 Entity Component System architecture: entities are IDs, components are data, systems are functions. No inheritance and no scene graph — just fast, flat, data oriented design. Quick example Core concepts Worlds A world is a container for entities, components, and systems. Most apps use a single world, but you can create multiple for isolation (e.g. a UI world separate from gameplay). The world tracks: — current tick count, elapsed time, fixed delta. — registered system list. — per system timing for profiling. — ordered execution phases. Entities An entity is a generational ID — a 32 bit integer encoding an index and a generation counter. This prevents dangling references: if entity slot 5 is destroyed and reused, the old ID (generation 1) won't match the new occupant (generation 2). ID encoding: the lower 20 bits are the entity index (max 1M entities); the upper bits are the generation counter. Decode via → . Components Components are plain data objects attached to entities by name. The engine defines a standard schema in with normalization and validation: Component Key fields Purpose position, rotation, scale Spatial placement velocity, mass, type Rigid body dynamics shape, size, offset Collision shapes meshId, materialId, visible Visual representation type, color, intensity, range Light sources fov, near, far, projection View configuration preset, rate, lifetime Particle spawning speed, radius, destination AI pathfinding ownerId, priority Network sync Systems Systems are registered functions that execute each frame in a defined phase order. They process entities by querying for required components.","contentHash":"26785c370cebb358664fcac28be8f825860fe505789ef03ed864c80ce4465cc0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/ecs.md::0001","path":"engine/ecs.md","title":"ECS v2","description":"The Entity-Component-System core — worlds, generational entity IDs, data components, phased systems, archetype storage, component healing, prefabs, and snapshots.","kind":"guide","source":"MD/engine/ecs.md","updated":"2026-06-05","headings":["ECS v2","Quick example","Core concepts","Worlds","Entities","Components","Systems","Execution phases","Archetype storage","Component healing","Entity lifecycle","Prefabs","World snapshots","Key files"],"chunkIndex":1,"chunkCount":2,"text":"sync Systems Systems are registered functions that execute each frame in a defined phase order. They process entities by querying for required components. Execution phases Systems are grouped into phases that execute in order. The default phases are: Phase Purpose Typical systems Input processing, AI decisions InputSystem, AISystem Physics simulation, movement PhysicsSystem, MovementSystem Collision response, constraints CollisionSystem, ConstraintSystem Prepare render data CameraSystem, LightSystem Cleanup, UI sync AnimationSystem, UISync Two step functions exist: — runs all kind systems (fixed timestep). — runs all kind systems (variable timestep). Archetype storage Components are stored in archetype based storage ( ). Entities with the same set of components are grouped together for cache friendly iteration. The storage handles: Component add/remove — moves entities between archetypes. Query matching — finds all entities with a given component set. Sparse set indexing — O(1) component access by entity ID. Component healing validates and repairs component data using the schemas in . It normalizes vectors, clamps values, and fills missing fields with defaults. This makes save/load robust — corrupted or outdated save data is automatically healed. Entity lifecycle Prefabs defines reusable entity templates (spawnables) with pre configured components and SDF collision shapes: World snapshots Capture and restore world state for save/load, rewind, or debugging: Key files File Purpose , , , , phase scheduling, dependency ordering Component storage, queries, sparse set indexing Component schemas with types and normalization Auto repair invalid component data High level entity deletion with GPU cleanup Spawnable entity templates with SDF shapes","contentHash":"bc20980203b0274c99713daafc1bd867d3ba76514d1d6ae88df3aefd84ed3346"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/galaxy-mythic-spiral-atlas.md::0000","path":"engine/galaxy-mythic-spiral-atlas.md","title":"Galaxy Mythic Spiral Atlas","description":"Architecture, art direction, performance policy, controls, and scientific limits of the adaptive WebGPU Galaxy playground demo.","kind":"guide","source":"MD/engine/galaxy-mythic-spiral-atlas.md","updated":"2026-07-29","headings":["Galaxy Mythic Spiral Atlas","Rendering pipeline","Light, dust, and color","Adaptive scale","Studies","Controls","Research basis","See also"],"chunkIndex":0,"chunkCount":3,"text":"Architecture, art direction, performance policy, controls, and scientific limits of the adaptive WebGPU Galaxy playground demo. Galaxy Mythic Spiral Atlas Galaxy Mythic Spiral Atlas is an adaptive GPU orbital tracer demo in the Playground. It combines observed spiral galaxy structure with five deliberately enhanced fantasy studies. This page is for developers who tune its morphology, rendering, or performance governor. An orbital tracer is a procedural sample that follows an analytic galactic orbit. The demo is not a self gravitating N body simulation, and it does not use FMM to approximate pairwise gravity. Its scientific content is limited to population distributions, differential rotation, a separate spiral pattern speed, dust offsets, and transparent measurement semantics. Rendering pipeline Every active tracer stores two 16 bit angular values in one : orbital phase and epicyclic phase. One initialization bit distinguishes untouched allocation from live state. The compute shader advances this state before density selection, so the HUD's simulated count means actively updated orbital states. (Sources: , .) The position model derives disk radius, vertical thickness, stellar family, luminosity, and structural variation from a stable integer identity. Disk stars follow a cored to flat rotation curve. Spiral arms use a logarithmic phase field whose pattern speed remains distinct from each star's orbital speed. Arm width increases outward, while segment masks and feathers prevent perfectly continuous ribbons. Selected studies add a bar, tidal wake, resonant ring, outer arc, or sparse polar veil. (Sources: , .) Light, dust, and color The eight plane atlas stores old stars, young stars, H II emission, and dust in two atomic shards per family. Shards reduce avoidable","contentHash":"e02deb55c7362104923dedba69cd607695742b7f2e4e7a9a079695f0cf10a4e1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/galaxy-mythic-spiral-atlas.md::0001","path":"engine/galaxy-mythic-spiral-atlas.md","title":"Galaxy Mythic Spiral Atlas","description":"Architecture, art direction, performance policy, controls, and scientific limits of the adaptive WebGPU Galaxy playground demo.","kind":"guide","source":"MD/engine/galaxy-mythic-spiral-atlas.md","updated":"2026-07-29","headings":["Galaxy Mythic Spiral Atlas","Rendering pipeline","Light, dust, and color","Adaptive scale","Studies","Controls","Research basis","See also"],"chunkIndex":1,"chunkCount":3,"text":".) Light, dust, and color The eight plane atlas stores old stars, young stars, H II emission, and dust in two atomic shards per family. Shards reduce avoidable contention without changing the resolved image. The resolve applies wavelength dependent transmission: Optical depth measures how strongly material attenuates light along a sampled path. This lets dust lanes darken stars instead of adding nearly black light to an additive target. A separate rim term adds faint scattered color. Young blue populations and coral or magenta H II regions sit at different arm phase offsets from dust. (Source: .) The palette is an enhanced visualization, not unaided human vision. It retains a warm old population, cooler young clusters, emission regions, and dark dust, then grades those components into each study's fantasy palette. The final pass blooms only energy above a threshold, adds rare background stars and core diffraction, and applies a hue preserving ACES curve once at presentation. (Source: .) Adaptive scale The demo begins with one million active tracers and grows in allocation chunks. It has no configured particle count ceiling. Growth ends only when measured pressure, the 32 bit identity range, or a recoverable WebGPU allocation failure requires it. Shaders compile before large buffers allocate, and size dependent targets replace the previous target only after validation and out of memory scopes succeed. (Source: .) The fused pass simulates every active tracer and selects a spatially distributed subset for density work. Selection never falls below , or 62.5%, and changes by at most one cohort per governor adjustment. A low discrepancy permutation spreads a quota change across each 256 tracer block. It does not remove one visible contiguous population. The HUD says selected","contentHash":"ffe4c0742ca6e6b9e2a943d2e71433f28790f257704393ef3a7999442ce83ebe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/galaxy-mythic-spiral-atlas.md::0002","path":"engine/galaxy-mythic-spiral-atlas.md","title":"Galaxy Mythic Spiral Atlas","description":"Architecture, art direction, performance policy, controls, and scientific limits of the adaptive WebGPU Galaxy playground demo.","kind":"guide","source":"MD/engine/galaxy-mythic-spiral-atlas.md","updated":"2026-07-29","headings":["Galaxy Mythic Spiral Atlas","Rendering pipeline","Light, dust, and color","Adaptive scale","Studies","Controls","Research basis","See also"],"chunkIndex":2,"chunkCount":3,"text":"A low discrepancy permutation spreads a quota change across each 256 tracer block. It does not remove one visible contiguous population. The HUD says selected , because projection and frustum rejection occur after quota selection. (Sources: , , .) GPU timestamps separate recurring clear, fused simulation density work, resolve, history, and presentation. A recursive model estimates fixed, simulated million, and selected million costs. The governor waits for fresh samples, excludes reset and target rebuild transients, and changes one quota slot per frame under pressure. Camera, study, and pointer discontinuities reject short term history to prevent ghost trails. (Source: .) State First planning uses four aggregate stel","contentHash":"d7b834bbe251d051c47ec13c9ff0f8585ed831f95d64036ec06ba986ae796775"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/getting-started.md::0000","path":"engine/getting-started.md","title":"Engine Getting Started","description":"Bring the engine up in a browser and understand its bootstrap entry points and minimal frame flow.","kind":"guide","source":"MD/engine/getting-started.md","updated":"2026-06-05","headings":["Engine Getting Started","Prerequisites","Bootstrap entry points","Import maps","Minimal flow","Where to look next","See also"],"chunkIndex":0,"chunkCount":1,"text":"Bring the engine up in a browser and understand its bootstrap entry points and minimal frame flow. Engine Getting Started Bring the engine up in a browser and understand the bootstrap entry points. Assumes Install & Run is done. Prerequisites A current browser that exposes WebGPU on the machine. Verify both and a successful call. The repo served over HTTP ( ). Bootstrap entry points Pick the bootstrap that matches your use case: Entry Use when You want the full engine runtime. You also want the editor + Plauna wired ( , ). You're building an app level entry. Import maps The engine groups imports into barrels so you can pull in a coherent set without long relative paths: — engine wide. — ECS. — rendering. — math. — dev tools. Minimal flow The engine is GPU first and ECS driven, so a typical session: 1. Bootstrap the engine against a WebGPU canvas (acquires the device + frame pipeline). 2. Create or load an ECS world . 3. Spawn entities and attach components (see for the component catalog). 4. Register systems (render, sim) that run each frame. 5. Start the frame loop — draws from ECS state; advances simulation. Note: Exact function signatures are generated into the Engine API Reference by . Run it, then browse for , , , and . Where to look next Rendering: — start with and . Simulation: . ECS components: . GPU layer: . See also Engine Architecture. Boot Sequence (OS level).","contentHash":"6cef0957209b12d01fc2135a783caa5896860face4964f70ebc0e08d359d05ad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/gpu-physics.md::0000","path":"engine/gpu-physics.md","title":"GPU Physics Engine","description":"A WebGPU compute physics engine with PhysX 5 feature parity — 15 WGSL modules covering rigid bodies, broadphase/narrowphase, the TGS solver, CCD, vehicles, character controller, FEM soft bodies, triggers, and mesh/heightfield queries.","kind":"guide","source":"MD/engine/gpu-physics.md","updated":"2026-06-05","headings":["GPU Physics Engine","Architecture","PhysX 5 feature parity","GPU physics modules (15 files)","Existing engine systems","Features that exceed PhysX 5","Core rigid body pipeline","Extended simulation","Geometry & queries","Constants & limits","Pipeline execution order","Design decisions"],"chunkIndex":0,"chunkCount":3,"text":"A WebGPU compute physics engine with PhysX 5 feature parity — 15 WGSL modules covering rigid bodies, broadphase/narrowphase, the TGS solver, CCD, vehicles, character controller, FEM soft bodies, triggers, and mesh/heightfield queries. GPU Physics Engine A WebGPU compute based physics engine with full PhysX 5.4.1 feature parity: 15 modules in ( 400 KB total), all shaders in WGSL. It is a parallel implementation — no PhysX code is modified — designed for a future native migration. Every GPU accelerated feature in PhysX 5.4.1 (rigid bodies, broadphase, contact gen, solver, CCD, vehicles, CCT, soft bodies, triggers, scene queries, heightfield, triangle mesh) has a dedicated module. See the parity table. Architecture Key principles: WebGPU compute shaders (WGSL) for all parallel workloads. CPU orchestration for serial logic (islands, CCT, scene queries). Fixed pre allocated GPU buffers (PhysX 5 pattern) — overflow warns, never crashes. SoA (structure of arrays) layout for GPU cache efficiency. No PhysX code modified — parallel implementation for future migration. PhysX 5 feature parity Audited against PhysX 5.4.1. GPU physics modules (15 files) PhysX 5 feature Module Status GPU Rigid Bodies Built GPU Broadphase Built GPU Contact Gen (PCM) Built GPU Constraint Solver (TGS) Built Convex Hull Cooking Built Raycasting Built Speculative CCD Built Vehicle SDK Built Character Controller Built FEM Soft Bodies Built Trigger Events Built Scene Queries Built Heightfield Terrain Built Triangle Mesh Collider Built Existing engine systems Modules in the parent directory cover additional PhysX features, referenced from the GPU barrel export: PBD cloth ( ), articulations ( ), SDF mesh geometry ( ), XPBD solver ( ), MLS MPM soft body ( ), OGC contact ( ), CPU CCD ( ), shock propagation ( ),","contentHash":"bd8c12478771bfc5bafc49e722ba705d8870c10ea8b30c4727a1ffa6b7352bdf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/gpu-physics.md::0001","path":"engine/gpu-physics.md","title":"GPU Physics Engine","description":"A WebGPU compute physics engine with PhysX 5 feature parity — 15 WGSL modules covering rigid bodies, broadphase/narrowphase, the TGS solver, CCD, vehicles, character controller, FEM soft bodies, triggers, and mesh/heightfield queries.","kind":"guide","source":"MD/engine/gpu-physics.md","updated":"2026-06-05","headings":["GPU Physics Engine","Architecture","PhysX 5 feature parity","GPU physics modules (15 files)","Existing engine systems","Features that exceed PhysX 5","Core rigid body pipeline","Extended simulation","Geometry & queries","Constants & limits","Pipeline execution order","Design decisions"],"chunkIndex":1,"chunkCount":3,"text":"export: PBD cloth ( ), articulations ( ), SDF mesh geometry ( ), XPBD solver ( ), MLS MPM soft body ( ), OGC contact ( ), CPU CCD ( ), shock propagation ( ), destruction ( + ), convex decomposition ( ), voxel mesh collider ( ), and GPU spatial hash ( ). Features that exceed PhysX 5 OGC contact model ( ) — SIGGRAPH 2025 penetration free barrier energy. MLS MPM ( ) — handles topology changes (melting, fracture). LBM wind ( ) — Lattice Boltzmann GPU wind field. Thermal particles ( ) — phase transitions, buoyancy, chemistry. Rope interaction ( ) — per fiber thermal (burn, wet, corrode). Core rigid body pipeline — central world manager owning all GPU buffers, body descriptions, and the island manager. 5 WGSL shaders (integrate, applyDeltas, deriveVelocity, sleepDetect, clearForces); CPU union find island manager (sleeping islands skip GPU dispatch); SoA layout; body types Dynamic (0), Kinematic (1), Static (2); shapes Sphere (0), Box (1), Capsule (2). — spatial hash broadphase. 4 WGSL shaders (computeAABB, clearHash, insertHash, findPairs); 27 neighbor cell query with layer/mask filtering. — analytic shape shape contact generation with persistent contact manifold (PCM). Pairs: sphere sphere, sphere box, box box (SAT 15 axes), sphere capsule, capsule capsule, ground plane. Contact data: normal, penetration, point, accumulated impulse, local anchors (A+B), featureId. — TGS Soft iterative solver (Box2D v3 / Catto 2023). Contact solve (bias velocity, Coulomb friction cone, restitution, impulse clamping, warm starting); D6 joint (ball, hinge, fixed, distance, cone limits); post solve relaxation pass. — CPU Quickhull 3D + GPU upload (PhysX 64 vertex GPU limit). — GPU parallel raycasting (ray sphere/box/capsule) with workgroup reduction; CPU fallback for synchronous queries. —","contentHash":"72ec165c4815caca047725439b3459d5dd2e6c6b05ab553003348adcae079942"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/gpu-physics.md::0002","path":"engine/gpu-physics.md","title":"GPU Physics Engine","description":"A WebGPU compute physics engine with PhysX 5 feature parity — 15 WGSL modules covering rigid bodies, broadphase/narrowphase, the TGS solver, CCD, vehicles, character controller, FEM soft bodies, triggers, and mesh/heightfield queries.","kind":"guide","source":"MD/engine/gpu-physics.md","updated":"2026-06-05","headings":["GPU Physics Engine","Architecture","PhysX 5 feature parity","GPU physics modules (15 files)","Existing engine systems","Features that exceed PhysX 5","Core rigid body pipeline","Extended simulation","Geometry & queries","Constants & limits","Pipeline execution order","Design decisions"],"chunkIndex":2,"chunkCount":3,"text":"+ GPU upload (PhysX 64 vertex GPU limit). — GPU parallel raycasting (ray sphere/box/capsule) with workgroup reduction; CPU fallback for synchronous queries. — speculative CCD: AABB expansion by velocity × dt for CCD flagged bodies (bit 25), then TOI via conservative advancement. Extended simulation — per wheel suspension (spring damper) + tire force (simplified Pacejka); CPU manager for input and gear shifting; presets sedan/sports/truck/offroad; , , drive types FWD/RWD/AWD. — CPU driven kinematic CCT: Quake style recursive slide move (max 4 bounces), downward raycast ground detection (skin width 0.08 m, step height 0.35 m), 45° slope limit, step climbing, capsule (default) or box shape. — FEM soft body on tetra","contentHash":"42a32714ca33cbcf2d89f732ced50360d56e047ebe6c9e620be60f847e3a45bc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/index.md::0000","path":"engine/index.md","title":"Engine","description":"Section index for the engine — the WebGPU runtime foundation of the stack (overview, architecture, getting started, API reference).","kind":"guide","source":"MD/engine/index.md","updated":"2026-06-05","headings":["Engine","In this section","Deep dives","Reference","Module map","Related concepts"],"chunkIndex":0,"chunkCount":1,"text":"Section index for the engine — the WebGPU runtime foundation of the stack (overview, architecture, getting started, API reference). Engine The WebGPU runtime foundation of the stack. Source: . In this section Overview — what the engine is and its modules. Architecture — how core, ECS, render, sim, net, and gameplay compose. Getting Started — bootstrap entry points and minimal flow. Deep dives Virtual GPU (vGPU) — the GPU abstraction every system builds on. ECS v2 — worlds, entities, components, systems, archetype storage. Rendering — the multi pass pipeline, lighting, and compositing. MorphField R2 — semantic fields, compiled Fieldlets, certified queries, assets, renderer contracts, and the gate controlled delivery checklist. Shaders & WGSL — modular shaders, the composer, and the preprocessor. Particle System — GPU particles, matter states, and the sim pipeline. Galaxy Mythic Spiral Atlas — adaptive orbital tracers, dust extinction, and fantasy spiral studies. Curl Noise Flow Atlas — packed GPU tracers and compute density flow art. Kuramoto Resonance Field — CPU and GPU phase oscillator labs with high count HDR visualization. Physics & Simulation — cloth, rope, fluids, and rigid bodies. GPU Physics Engine — WebGPU compute physics with PhysX 5 parity. Math Library — 350+ pure vector/matrix/quaternion/packing functions. Math Contract — required matrix, quaternion, projection, tolerance, and parity rules for shared math. Audio — procedural node graph synthesis and particle driven sound. Reference API Reference — per file symbol reference generated from source by (browse ). Module map Related concepts GPU Device Sharing Data Flow","contentHash":"bde2158b3a11dacf068e588999f6b67cd93ed39b01be3ec360694e5972a0e24a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/kuramoto-resonance-field.md::0000","path":"engine/kuramoto-resonance-field.md","title":"Kuramoto Resonance Field","description":"The Playground's CPU and GPU Kuramoto laboratories, their exact mean-field dynamics, high-density HDR visualization, performance governors, controls, and scientific boundary.","kind":"guide","source":"MD/engine/kuramoto-resonance-field.md","updated":"2026-07-29","headings":["Kuramoto Resonance Field","Mathematical model","CPU path","GPU path","High-density field renderer","Studies and controls","Freqora attribution and scientific boundary","Key files","See also"],"chunkIndex":0,"chunkCount":3,"text":"The Playground's CPU and GPU Kuramoto laboratories, their exact mean-field dynamics, high-density HDR visualization, performance governors, controls, and scientific boundary. Kuramoto Resonance Field The Kuramoto Resonance Field demos turn collective phase synchronization into a large, interactive HDR sculpture. The CPU and GPU versions share the same five studies and renderer, but they integrate different numbers of real oscillators. Both report the integrated oscillator count separately from the stateless field sample count. Run the CPU demo Run the GPU demo Mathematical model For oscillator phase $\\theta i$, natural frequency $f i$ in cycles per second, coupling $K$, and optional external drive $\\lambda$, the demos integrate $$ \\frac{d\\theta i}{dt} = 2\\pi f i + \\frac{K}{N}\\sum j \\sin(\\theta j \\theta i) + \\lambda\\sin(2\\pi f d t \\theta i). $$ The complex order parameter $$ Z 1 = \\frac{1}{N}\\sum j e^{i\\theta j}=R 1e^{i\\psi} $$ measures first harmonic synchronization. $R 1$ approaches zero for a distributed population and one for phase lock. The demos also report $R 2= N^{ 1}\\sum j e^{2i\\theta j} $, which exposes two cluster and standing wave structure that can be hidden by $R 1$ alone. Uniform global coupling has an exact linear time reduction: $$ \\frac{K}{N}\\sum j\\sin(\\theta j \\theta i) =K\\left(\\operatorname{Im}(Z 1)\\cos\\theta i \\operatorname{Re}(Z 1)\\sin\\theta i\\right). $$ This identity replaces an $O(N^2)$ pair loop with one $O(N)$ order parameter reduction and one $O(N)$ integration pass. It is exact for the all to all, equal weight model; it is not an approximation and does not apply unchanged to an arbitrary weighted network. The background and canonical model are covered by the Kuramoto review by Acebrón et al.. CPU path The CPU demo uses at a fixed 120 Hz","contentHash":"b25afea3554480281c47f44ba713cc54297110f0eac2657ccad3f7b946e4cc66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/kuramoto-resonance-field.md::0001","path":"engine/kuramoto-resonance-field.md","title":"Kuramoto Resonance Field","description":"The Playground's CPU and GPU Kuramoto laboratories, their exact mean-field dynamics, high-density HDR visualization, performance governors, controls, and scientific boundary.","kind":"guide","source":"MD/engine/kuramoto-resonance-field.md","updated":"2026-07-29","headings":["Kuramoto Resonance Field","Mathematical model","CPU path","GPU path","High-density field renderer","Studies and controls","Freqora attribution and scientific boundary","Key files","See also"],"chunkIndex":1,"chunkCount":3,"text":"weighted network. The background and canonical model are covered by the Kuramoto review by Acebrón et al.. CPU path The CPU demo uses at a fixed 120 Hz simulation step. It computes $Z 1$, advances every active phase from the same immutable state, and swaps two typed array views without copying the completed population. An adaptive governor changes the number of real CPU oscillators only after sustained timing evidence; it does not slow simulation time to hide load. The original pairwise engine functions remain available for weighted or small networks. Their in place output path snapshots its source, so reusing the input array cannot turn a simultaneous Euler step into an order dependent update. GPU path The GPU demo stores one phase per oscillator and starts with 1,048,576 active phases on a desktop adapter. Each fixed 120 Hz substep performs this sequence: 1. Integrate phases using the current reduced order parameter. 2. Accumulate partial $Z 1$ and $Z 2$ sums from the newly written phase buffer. 3. Complete the reduction before the next substep reads it. Separate uniform buffers preserve the time and parameters for every encoded substep. A near square two dimensional dispatch avoids the 65,535 workgroup limit on one dispatch dimension without dispatching a mostly empty 4,096 wide row. A persistent readback ring samples only the small order parameter result and rejects results from an earlier study generation. GPU timestamp queries, when supported, guide population growth using measured work instead of frame rate guesses alone. Study resets initialize and copy only the active range; newly exposed ranges are initialized as the population grows. The current desktop safety guard reserves at most $2^{24}$ real phases, subject to the adapter's storage buffer limit. This is","contentHash":"e3e1e88f40e8d41fdb7bd4559f339ef6f0f5a2ad4694a7f4fdf31b3a1fbc795c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/kuramoto-resonance-field.md::0002","path":"engine/kuramoto-resonance-field.md","title":"Kuramoto Resonance Field","description":"The Playground's CPU and GPU Kuramoto laboratories, their exact mean-field dynamics, high-density HDR visualization, performance governors, controls, and scientific boundary.","kind":"guide","source":"MD/engine/kuramoto-resonance-field.md","updated":"2026-07-29","headings":["Kuramoto Resonance Field","Mathematical model","CPU path","GPU path","High-density field renderer","Studies and controls","Freqora attribution and scientific boundary","Key files","See also"],"chunkIndex":2,"chunkCount":3,"text":"as the population grows. The current desktop safety guard reserves at most $2^{24}$ real phases, subject to the adapter's storage buffer limit. This is an implementation allocation guard, not a theoretical Kuramoto limit. GPU implementations at the same $2^{24}$ scale have been reported in the literature; see Januszewski and Kostur's GPU Kuramoto implementation. High density field renderer The luminous field deliberately separates simulation state from display density. When field samples outnumber oscillators, repeated layers choose real oscillators by stable modulo identity; when oscillators outnumber samples, a rotating stratified mapping covers the complete population over time instead of permanent","contentHash":"acdb2f90b306d2914fd716fe2b463497e7a548b3c9c6cf2650921c116bea40d6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/math-contract.md::0000","path":"engine/math-contract.md","title":"Math Contract","description":"Contract for engine math values, matrix layout, quaternion order, WebGPU projection depth, units, tolerances, determinism, and WGSL parity.","kind":"guide","source":"MD/engine/math-contract.md","updated":"2026-06-15","headings":["Math Contract","Source of truth","Value representation","Matrix layout and order","Coordinate and camera rules","Projection depth","Quaternion rules","Units and ranges","Tolerance policy","Degenerate input policy","Determinism and side effects","WGSL parity","Acceptance checklist","See also"],"chunkIndex":0,"chunkCount":3,"text":"Contract for engine math values, matrix layout, quaternion order, WebGPU projection depth, units, tolerances, determinism, and WGSL parity. Math Contract This page defines the rules new engine, editor, Plauna, AGI, and WebGPU OS code must follow when it uses shared math. It locks the current runtime behavior before MathEngine grows beyond the existing modules. The contract is based on the current source in , , and . Source of truth Area Canonical source Notes Basic vectors, quaternions, and mat4 helpers Compatibility surface exported through , , and . Extended matrices Mat2/Mat3 and extended Mat4 helpers, including TRS compose/decompose. Extended quaternions Quaternion creation, conversion, interpolation, comparison, and orientation helpers. Camera projection/view composition Defaults to WebGPU projection depth for camera rendering. Gate 0 invariant tests Browser ES module checks for decompose, inverse, look at, WebGPU depth, quaternion, and camera finite output. New code should import from the narrow module it needs when possible. Broad app or compatibility surfaces may import from . Value representation Value Representation Contract Scalar JavaScript Use finite values unless the function explicitly documents non finite handling. Vec2 Plain array unless a specific API documents a typed array. Vec3 Plain array. World up is for camera helpers. Vec4 Plain array. Quaternion Identity is . and represent the same orientation. Mat3 Column major. Translation style 2D mat3 helpers store translation in the final column. Mat4 Column major. Translation lives at indices , , and . Functions must not mutate input arrays unless the name or signature makes mutation explicit, such as , , , or . Mutating the explicit parameter is allowed. (Source: , , .) Matrix layout and order Mat4","contentHash":"8864f8b6b282488fd26869dbd0cb3800bbfda254c05dddfdc310587256958ba4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/math-contract.md::0001","path":"engine/math-contract.md","title":"Math Contract","description":"Contract for engine math values, matrix layout, quaternion order, WebGPU projection depth, units, tolerances, determinism, and WGSL parity.","kind":"guide","source":"MD/engine/math-contract.md","updated":"2026-06-15","headings":["Math Contract","Source of truth","Value representation","Matrix layout and order","Coordinate and camera rules","Projection depth","Quaternion rules","Units and ranges","Tolerance policy","Degenerate input policy","Determinism and side effects","WGSL parity","Acceptance checklist","See also"],"chunkIndex":1,"chunkCount":3,"text":"the name or signature makes mutation explicit, such as , , , or . Mutating the explicit parameter is allowed. (Source: , , .) Matrix layout and order Mat4 values use column major storage and column vector transform semantics. The engine applies the rightmost matrix first. is the camera contract used by . The same order should be used in render tests and tools. (Source: .) When composing transforms, use TRS helpers instead of manual index writes unless the code is a low level math helper. preserves translation and scale. If any scale axis is zero, near zero, or non finite, rotation is not recoverable, so it returns identity rotation instead of . (Source: ; verified by .) Coordinate and camera rules Rule Contract World up for camera and look at helpers. Camera forward in view space Negative Z. maps the target to negative Z. Transform forward treats forward as the negative local Z axis. View projection order . UI and DOM units Keep DOM/CSS pixel math outside core engine math unless a DOM specific adapter documents the conversion. The source currently has both render facing camera helpers and generic matrix helpers. New camera code should use or the WebGPU projection helpers from instead of reimplementing projection math. (Source: , .) Projection depth WebGPU render paths must use the WebGPU projection helpers. These map clip space Z into . Use case Helper Perspective, radians Perspective, degrees Orthographic Camera default with default options The legacy helpers , , and use OpenGL style depth. They remain available for compatibility and explicit OpenGL depth tests only. They must not be used in WebGPU render passes. (Source: ; verified by .) Quaternion rules Quaternions are . Rotation quaternions should be normalized before use in transforms, interpolation, and camera","contentHash":"66d9418134fb7e54a1f6f86eaac1168e30ee12c8fb86be5cc426cacec7e4a024"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/math-contract.md::0002","path":"engine/math-contract.md","title":"Math Contract","description":"Contract for engine math values, matrix layout, quaternion order, WebGPU projection depth, units, tolerances, determinism, and WGSL parity.","kind":"guide","source":"MD/engine/math-contract.md","updated":"2026-06-15","headings":["Math Contract","Source of truth","Value representation","Matrix layout and order","Coordinate and camera rules","Projection depth","Quaternion rules","Units and ranges","Tolerance policy","Degenerate input policy","Determinism and side effects","WGSL parity","Acceptance checklist","See also"],"chunkIndex":2,"chunkCount":3,"text":"(Source: ; verified by .) Quaternion rules Quaternions are . Rotation quaternions should be normalized before use in transforms, interpolation, and camera code. does not normalize for the caller. Pass a normalized axis or normalize the returned quaternion before using it as a rotation. and test assertions must treat and as equivalent orientations. (Source: .) Units and ranges Category Contract Angles Radians by default. Degree helpers include in the name. Time Seconds for runtime simulation and animation math unless the caller documents milliseconds. Color channels Normalized linear values for renderer math unless a function explicitly says sRGB or packed format. Depth WebGPU render depth is . Scale Zero scal","contentHash":"98522ce4b6e3c4be9d4c0a5eccb40b7d20b1bd50d7348c5a4e01f47544334516"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/math.md::0000","path":"engine/math.md","title":"Math Library","description":"350+ pure, array-based, WebGPU-aligned math functions — vectors, matrices, quaternions, geometric primitives, GPU data packing, curves, color, and noise.","kind":"guide","source":"MD/engine/math.md","updated":"2026-06-05","headings":["Math Library","Design philosophy","Module map","Quick examples","Vectors","Matrices","GPU packing","Ray intersection"],"chunkIndex":0,"chunkCount":2,"text":"350+ pure, array-based, WebGPU-aligned math functions — vectors, matrices, quaternions, geometric primitives, GPU data packing, curves, color, and noise. Math Library 350+ pure functions for vectors, matrices, quaternions, geometric primitives, GPU data packing, and interpolation. All exported via and . Design philosophy Pure functions — no classes, no mutation of inputs; every function returns a new value. Array based — vectors are , quaternions are , matrices are . WebGPU aligned — projection matrices use a Z range (not like OpenGL). No dependencies — self contained, no external math libraries. For binding rules around matrix layout, multiplication order, quaternion order, projection depth, tolerance, and CPU/WGSL parity, see the Math Contract. Module map Module Functions Purpose 30 3D vectors: add, sub, scale, dot, cross, normalize, lerp, reflect, project, smoothDamp 12 2D vectors: add, sub, scale, dot, length, normalize, lerp, distance 15 Quaternions: slerp, fromAxisAngle, fromEuler, lookAt, multiply, inverse 15 4×4 matrices: perspective, orthographic, lookAt, inverse, multiply, fromRotationTranslation 8 Scalar: clamp, lerp, smoothstep, saturate, inverseLerp, remap 20 Rays: create, intersect (sphere, AABB, plane, triangle, capsule, OBB), transform 20 Planes: create, distance, project, intersect (ray, segment, plane), transform 15 Line segments: create, closest point (to point, segment, ray), distance 25 2D rectangles: create, contains, intersects, merge, grow, clamp 20 Dual quaternions: create, multiply, sclerp, transform point, toMat4 (DQS skinning) 20 GPU packing: half float, UNORM/SNORM, RGB9E5, R11G11B10F, octahedral normals 20 Geometry helpers: AABB, sphere, frustum, distance calculations 10 Color: HSL↔RGB, temperature→RGB, sRGB↔linear 15 Curves: bezier,","contentHash":"8a37e6ed0fb954154663a10fe5a4b4d19b6027eb88c6b05f36884d68b0064b39"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/math.md::0001","path":"engine/math.md","title":"Math Library","description":"350+ pure, array-based, WebGPU-aligned math functions — vectors, matrices, quaternions, geometric primitives, GPU data packing, curves, color, and noise.","kind":"guide","source":"MD/engine/math.md","updated":"2026-06-05","headings":["Math Library","Design philosophy","Module map","Quick examples","Vectors","Matrices","GPU packing","Ray intersection"],"chunkIndex":1,"chunkCount":2,"text":"octahedral normals 20 Geometry helpers: AABB, sphere, frustum, distance calculations 10 Color: HSL↔RGB, temperature→RGB, sRGB↔linear 15 Curves: bezier, catmull rom, hermite, arc length parameterization 10 Noise: simplex2D/3D, perlin, FBM, curl noise Quick examples Vectors Matrices GPU packing Ray intersection","contentHash":"3ffe750e49f243d457397c9da1e1debcd6993b70e8439e669296d0be35e6a3ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/morphfield.md::0000","path":"engine/morphfield.md","title":"MorphField R2 Renderer","description":"Architecture, public contracts, research provenance, verification evidence, and the gate-controlled implementation checklist for the additive MorphField renderer.","kind":"guide","source":"MD/engine/morphfield.md","updated":"2026-07-27","headings":["MorphField R2 Renderer","Current release status","Architecture","Public API","Renderer and PhysX clocks","Sparse residency shared by fields, voxels, and virtual textures","Semantic and binary contracts","Nexel and Fieldlet","Typed queries",".morph assets","Frame contract","Adaptive quality contract","Performance timing and spike triage","Publication benchmark evidence contract","Nexel representation lab and truth chain","Playground and Editor precedent audit","Structural Scale Lab and benchmark receipts","Ray-candidate regression resolution checkpoint","Open gap register","Close-surface and mesh-repair boundary","Gate-controlled implementation checklist","Phase 0: contracts, safety, and research baseline","Phase 1: certified analytic vertical slice","Phase 2: assets, spatial execution, and sparse residuals","Phase 3: unified surface cache","Phase 4: oriented kernels, media, and bounded transparency","Phase 5: advanced lighting, path tracing, and adaptive quality","Phase 6: simulation and query integration","Phase 7: final Playground, hardening, and release gate","Engine pass audit on 2026-07-18","Verification evidence","Research and provenance","Reproduce the current checks","See also"],"chunkIndex":0,"chunkCount":3,"text":"Architecture, public contracts, research provenance, verification evidence, and the gate-controlled implementation checklist for the additive MorphField renderer. MorphField R2 Renderer MorphField is an additive, opt in Engine renderer for semantic fields, sparse residuals, oriented kernels, and validated surface caches. A public Nexel describes scene intent. The compiler produces private Fieldlets and keeps the source scene authoritative. This page is the persistent R2 delivery record. An individual checklist box changes to only after its implementation, focused tests, and item specific evidence pass. A phase gate remains open until every required item and the integrated phase level evidence pass. Current release status Phase Gate Status on 2026 07 27 0. Contracts, safety, research Passed Twelve public Draft 2020 12 schema resources (eleven source resources plus the generated offline compound bundle), the checked mode specific capability profile, strict compiled ABI/query ingress, ownership, diagnostics, fixtures, provenance, and the frozen core profile baseline pass this gate. Release builders copy the schemas to their exact public routes. The current installed Chrome revision passes all 62 browser gates, including the 12 gate real device block. 1. Certified analytic slice Open Analytic compilation, CPU/GPU queries, conservative f32 certificates, direct tracing, a packed CPU built threaded GPU BVH, guarded stable analytic incremental projection and changed range GPU publication, close CSG/inside/seam/lifecycle coverage, and Playground scenes exist. A real compiler worker path, general incremental compilation, and the complete reference image gate remain open. 2. Assets and sparse residuals Open , certified CPU residual hierarchy, and representation planning exist. GPU","contentHash":"e5dd909969e5f21d81e2cd46c0c83198cf017ec452b53214cecafd0d6236e4f2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/morphfield.md::0001","path":"engine/morphfield.md","title":"MorphField R2 Renderer","description":"Architecture, public contracts, research provenance, verification evidence, and the gate-controlled implementation checklist for the additive MorphField renderer.","kind":"guide","source":"MD/engine/morphfield.md","updated":"2026-07-27","headings":["MorphField R2 Renderer","Current release status","Architecture","Public API","Renderer and PhysX clocks","Sparse residency shared by fields, voxels, and virtual textures","Semantic and binary contracts","Nexel and Fieldlet","Typed queries",".morph assets","Frame contract","Adaptive quality contract","Performance timing and spike triage","Publication benchmark evidence contract","Nexel representation lab and truth chain","Playground and Editor precedent audit","Structural Scale Lab and benchmark receipts","Ray-candidate regression resolution checkpoint","Open gap register","Close-surface and mesh-repair boundary","Gate-controlled implementation checklist","Phase 0: contracts, safety, and research baseline","Phase 1: certified analytic vertical slice","Phase 2: assets, spatial execution, and sparse residuals","Phase 3: unified surface cache","Phase 4: oriented kernels, media, and bounded transparency","Phase 5: advanced lighting, path tracing, and adaptive quality","Phase 6: simulation and query integration","Phase 7: final Playground, hardening, and release gate","Engine pass audit on 2026-07-18","Verification evidence","Research and provenance","Reproduce the current checks","See also"],"chunkIndex":1,"chunkCount":3,"text":"the complete reference image gate remain open. 2. Assets and sparse residuals Open , certified CPU residual hierarchy, and representation planning exist. GPU residency, radix/LBVH benchmarking, and fuzz evidence remain open. 3. Unified surface cache Open Regular extraction, rank aware QEF work, atomic publication, and clean room 2:1 transitions exist. Full Marching Cubes, Transvoxel compatibility, and manifold dual contouring gates remain open. 4. Kernels, media, transparency Open Bounded CPU kernel bins, certified medium integration, and layered OIT reference logic exist. Integrated GPU composition and stress gates remain open. 5. Lighting and quality Open Tail sensitive adaptive quality, native resolution automatic tiers, certified bound pruning, tier shadow policy, resolved/pending GPU admission guards, lighting selective lazy wavefront construction, hybrid shading, host safe composition, explicit scale depth aware reconstruction, and the renderer integrated bounded queue wavefront path pass the current portable and 12 gate real device suites. ReSTIR/SVGF/IBL and the complete reference image/energy gate remain open. 6. Simulation and queries Open Six external encoder GPU queries, fixed step scheduling, and compatible adapters exist. Full simulation parity and replay gates remain open. 7. Playground and release Open One public API demo exposes nine focused Nexel specimens, lighting and simulation scenarios, the independent Structural Scale Lab, validation controls, separated timing channels, and copyable receipts. Every specimen distinguishes semantic source, compiled family, active evaluator, query/collision availability, SDF/reference field classification, simulation ownership, and any diagnostic presentation glyph. The current source suite contains 62 gates: 50","contentHash":"0816322d82db85b73f9474d92fc53209c70e9e76195dc7bfd91ca8a249f1e784"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/morphfield.md::0002","path":"engine/morphfield.md","title":"MorphField R2 Renderer","description":"Architecture, public contracts, research provenance, verification evidence, and the gate-controlled implementation checklist for the additive MorphField renderer.","kind":"guide","source":"MD/engine/morphfield.md","updated":"2026-07-27","headings":["MorphField R2 Renderer","Current release status","Architecture","Public API","Renderer and PhysX clocks","Sparse residency shared by fields, voxels, and virtual textures","Semantic and binary contracts","Nexel and Fieldlet","Typed queries",".morph assets","Frame contract","Adaptive quality contract","Performance timing and spike triage","Publication benchmark evidence contract","Nexel representation lab and truth chain","Playground and Editor precedent audit","Structural Scale Lab and benchmark receipts","Ray-candidate regression resolution checkpoint","Open gap register","Close-surface and mesh-repair boundary","Gate-controlled implementation checklist","Phase 0: contracts, safety, and research baseline","Phase 1: certified analytic vertical slice","Phase 2: assets, spatial execution, and sparse residuals","Phase 3: unified surface cache","Phase 4: oriented kernels, media, and bounded transparency","Phase 5: advanced lighting, path tracing, and adaptive quality","Phase 6: simulation and query integration","Phase 7: final Playground, hardening, and release gate","Engine pass audit on 2026-07-18","Verification evidence","Research and provenance","Reproduce the current checks","See also"],"chunkIndex":2,"chunkCount":3,"text":"availability, SDF/reference field classification, simulation ownership, and any diagnostic presentation glyph. The current source suite contains 62 gates: 50 device independent gates and 12 real device gates; all 62 pass on the current installed Chrome run with zero failures or skips. Adapter absence remains one explicit device required block. Long run benchmarks for every preset, release hardening, and the Full R2 gate remain open. The current code is a verified foundation and analytic vertical slice. It is not yet the Full R2 release. Architecture Source ownership is split by subsystem: Path Responsibility Nexel scene, validation, compiler, ABI, CPU BVH, and reference queries. Versioned encoding, decoding,","contentHash":"cf2ca29d28371909e57acef156f25b9c2fe32a03c5bce46a8fb9ea311c9a3eb4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/overview.md::0000","path":"engine/overview.md","title":"Engine Overview","description":"The pure-browser, GPU-first runtime foundation — WebGPU device, frame graph, ECS, rendering, simulation, networking, and audio.","kind":"guide","source":"MD/engine/overview.md","updated":"2026-06-05","headings":["Engine Overview","What it provides","Audience","Development principles","Top-level modules","Entry points","Next steps"],"chunkIndex":0,"chunkCount":2,"text":"The pure-browser, GPU-first runtime foundation — WebGPU device, frame graph, ECS, rendering, simulation, networking, and audio. Engine Overview The engine ( ) is the foundation of the whole stack: a pure browser, GPU first runtime providing the WebGPU device, frame graph, ECS, rendering, simulation, networking, and audio that every other subsystem builds on. What it provides A shared WebGPU device and frame pipeline (the OS's GPU service runs on this). An ECS for all runtime state. A rendering pipeline (passes, materials, shaders, lighting, post processing, volumes). Simulation systems (physics, particles, fluids, cloth, AI, world). Networking (protocol, replication, client/server) and a collab mesh. Audio , resources/assets , a modding layer, runtime UI , and dev tools . Audience Engine, graphics, and simulation developers. App developers usually consume the engine indirectly through the OS and Plauna; read this when you work on rendering, simulation, or low level GPU code. Development principles From : Pure browser runtime — no Node.js dependencies. GPU first — prefer compute shaders for heavy simulation. ECS driven — all state lives in components. Modular — each subsystem is independent and testable. Top level modules Module Path Purpose Core WebGPU device, frame graph/pipeline, math, memory, scheduler, platform, workers, save, profiling, ECS entities, components, systems, queries, storage, prefabs, world Render renderers, materials, passes, lighting, culling, post process, SDF, volumes, particles Sim physics, particles, fluids, cloth, AI, world simulation Net protocol, replication, client, server Collab multi user mesh: identity, integrity, presence, sync Audio audio core, synth, spatial audio Animation animation systems Gameplay rules, events, AI, narrative,","contentHash":"d4741bbd62542d87255b9ce06f6688a2e261209214061ea8389d5904f7b6cb51"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/overview.md::0001","path":"engine/overview.md","title":"Engine Overview","description":"The pure-browser, GPU-first runtime foundation — WebGPU device, frame graph, ECS, rendering, simulation, networking, and audio.","kind":"guide","source":"MD/engine/overview.md","updated":"2026-06-05","headings":["Engine Overview","What it provides","Audience","Development principles","Top-level modules","Entry points","Next steps"],"chunkIndex":1,"chunkCount":2,"text":"multi user mesh: identity, integrity, presence, sync Audio audio core, synth, spatial audio Animation animation systems Gameplay rules, events, AI, narrative, perception Voxel / World , voxel and world systems Resources resource/package system Mod scripting API + sandbox UI / Tools , runtime UI, inspector/profiler Compat asset importers / compatibility Entry points — full engine bootstrap. — bootstrap that also wires the editor and Plauna ( ). — app level bootstrap. — import maps ( , , , , ). — version info. Next steps Engine Architecture — how the modules fit together. Engine Getting Started — boot and render something. Engine API Reference — per module symbol reference (run ).","contentHash":"3fac54f98b71c5a6a8a4b546882719c8fbf323a1ae625280af264451c4a90843"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/particle-long-range.md::0000","path":"engine/particle-long-range.md","title":"Particle Long-Range Solvers","description":"Selection, configuration, implementation, and validation of the direct, FMM, PME, and experimental ESP particle-force backends.","kind":"guide","source":"MD/engine/particle-long-range.md","updated":"2026-07-29","headings":["Particle Long-Range Solvers","Choose a backend","N-body encounter Playground","Configure a world","FMM pipeline","PME and experimental ESP","Validate and benchmark","Current limits","See also"],"chunkIndex":0,"chunkCount":3,"text":"Selection, configuration, implementation, and validation of the direct, FMM, PME, and experimental ESP particle-force backends. Particle Long Range Solvers The particle simulation has four mutually exclusive long range force backends. Use FMM for a large open domain, PME for a periodic domain, direct summation as the small system accuracy oracle, and ESP only as an experimental periodic alternative. These systems accelerate the same content dependent pair force as the existing N body solver; they are unrelated to Pai, BLT, HIER, or Ouroboros model training. (Sources: , , .) Choose a backend Backend Boundary Best fit Main tradeoff Open Small particle counts and reference validation Exact softened pair sum, but quadratic work Open Large or spatially clustered particle sets Approximate; current tree is uniform and capped at depth 5 Periodic Uniform periodic particle sets FFT/grid cost and periodic image physics Periodic Experiments with a smaller prolate window grid Wider grid assignment and real space work can erase the FFT saving Do not switch between open and periodic backends merely for speed. They solve different boundary value problems. FMM is the primary upgrade path for Particle Realms scenes because those scenes normally use an open world. Published comparisons likewise show that workload distribution matters: FMM can benefit strongly inhomogeneous systems while mesh methods can remain better for uniform periodic systems. GPU crossover points depend on hardware, particle distribution, requested accuracy, and expansion order. (Sources: Treecode and fast multipole method for N body simulation with CUDA, Adaptive fast multipole methods on the GPU, FMM and PME comparison.) N body encounter Playground The N Body Encounters demo separates gravitational accuracy from","contentHash":"848bad7aa1396aa6bb2f29ce57740ab7bd47be42deca013471a49914241626e7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/particle-long-range.md::0001","path":"engine/particle-long-range.md","title":"Particle Long-Range Solvers","description":"Selection, configuration, implementation, and validation of the direct, FMM, PME, and experimental ESP particle-force backends.","kind":"guide","source":"MD/engine/particle-long-range.md","updated":"2026-07-29","headings":["Particle Long-Range Solvers","Choose a backend","N-body encounter Playground","Configure a world","FMM pipeline","PME and experimental ESP","Validate and benchmark","Current limits","See also"],"chunkIndex":1,"chunkCount":3,"text":"fast multipole methods on the GPU, FMM and PME comparison.) N body encounter Playground The N Body Encounters demo separates gravitational accuracy from visual sampling. Full precision macro bodies source and receive softened gravity through the open FMM backend. The 4,096 body Direct Reference uses a separate race free tiled direct kick. A packed 12 byte tracer population responds to at most three moving cluster cores, but never contributes mass to either force solve. The HUD reports mutual bodies, active tracers, quota selected tracers, allocated state, memory, solver timing, and FMM leaf diagnostics as separate quantities. (Sources: , .) The tracer renderer reuses the Particle Storm exact quota permutation. Every block of 256 active tracers contributes exactly candidates, the quality floor remains 160 of 256 candidates, and the governor changes no more than one cohort per adjustment. Tracer state has no preset count ceiling. Allocation stops at available GPU memory, storage binding limits, or the 32 bit identity limit. A learned cost model and separate GPU timestamps prevent expensive body solves from automatically thinning a cheap visual population. (Sources: , , .) The State First adapter submits one aggregate proxy for each active authored gravitating system plus one restricted tracer field proxy. This keeps bucket planning proportional to the number of semantic systems rather than the number of particles and avoids GPU readback. Raster profiles map to quota targets of , , , , or slots; the target is still approached by at most one slot per governor adjustment and can never cross the 62.5% floor. Bucket representation changes presentation policy only. It cannot alter macro body integration, tracer motion, allocation, or lifetime. (Sources: , .) The authored","contentHash":"a8e0d6812cae1f748760989995824c3de377326a8b0e9908a2e3b41d1e5fac1f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/particle-long-range.md::0002","path":"engine/particle-long-range.md","title":"Particle Long-Range Solvers","description":"Selection, configuration, implementation, and validation of the direct, FMM, PME, and experimental ESP particle-force backends.","kind":"guide","source":"MD/engine/particle-long-range.md","updated":"2026-07-29","headings":["Particle Long-Range Solvers","Choose a backend","N-body encounter Playground","Configure a world","FMM pipeline","PME and experimental ESP","Validate and benchmark","Current limits","See also"],"chunkIndex":2,"chunkCount":3,"text":"representation changes presentation policy only. It cannot alter macro body integration, tracer motion, allocation, or lifetime. (Sources: , .) The authored encounter studies use deterministic truncated disk, Plummer, or cored Dehnen like seeds. Restricted outer disk tracers add low mass visual resolution to bridges and counter tails, following the restricted particle approach used in foundational galaxy encounter work. These tracers are an artistic collisionless approximation. Color families, dust, starburst light, and sparkle are rendering proxies rather than gas dynamics, radiative transfer, or star formation. (Sources: Toomre and Toomre encounter models, , .) The 65,536 body Apex study is an explicit stres","contentHash":"2cdd028eb5d8f39e82c1894bd1e75adee9b9735aca644c2c7f565f72f61110fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/particles.md::0000","path":"engine/particles.md","title":"Particle System","description":"The engine's flagship GPU particle system — matter states, emitters, the per-frame compute pipeline, advanced subsystems (thermal, SPH, flocking, bonds), performance tricks, and rendering.","kind":"guide","source":"MD/engine/particles.md","updated":"2026-07-29","headings":["Particle System","Architecture","Per-frame pipeline","Emitter system","Matter states","Spawn shapes","GPU simulation","Advanced subsystems","Performance optimizations","Rendering","Audio integration","Key files","See also"],"chunkIndex":0,"chunkCount":3,"text":"The engine's flagship GPU particle system — matter states, emitters, the per-frame compute pipeline, advanced subsystems (thermal, SPH, flocking, bonds), performance tricks, and rendering. Particle System The engine's flagship subsystem: large scale GPU particles with physics, thermal simulation, chemistry, SPH fluids, SDF collision, flocking, and volumetric rendering. Everything runs on compute shaders via vGPU. Scale: the particle system spans 60+ simulation files and 30+ rendering files — the largest subsystem in the engine. This page covers the architecture and key concepts. Architecture Three distinct layers: Per frame pipeline Each frame in : 1. Emit — spawn new particles from active emitters into GPU buffers. 2. Alive list compaction — a GPU scan writes alive particle indices (skip dead slots). 3. Main sim — GPU compute: gravity, curl noise, forces, integration, lifetime. 4. Advanced systems — thermal, SPH, flocking, bonds, chemistry, constraints. 5. Sort — radix sort by camera distance for correct alpha blending. 6. Collisions — SDF collision against entity meshes + ground plane. 7. Light extraction — GPU compute finds the hottest particles → async readback → . 8. Render — SDF billboard at half res → additive composite onto the scene. Emitter system manages emitter presets and spawning. Matter states State Phase value Render mode Examples Solid Matte diffuse + specular Sparks, debris, snow Liquid Fresnel + refraction Water, blood, rain Gas Volumetric (Beer Lambert) Smoke, steam, fog Plasma Emissive glow Fire core, lightning, magic Spawn shapes provides configurable emission geometries: point , sphere (surface or volume), box , cone , ring (torus), and mesh surface (emit from mesh triangles via ). GPU simulation The core sim runs in — a large compute shader","contentHash":"fa69a72a258ca81328a0b135039ddb3b39d2744d830594c774fc6cfff3c1a2bd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/particles.md::0001","path":"engine/particles.md","title":"Particle System","description":"The engine's flagship GPU particle system — matter states, emitters, the per-frame compute pipeline, advanced subsystems (thermal, SPH, flocking, bonds), performance tricks, and rendering.","kind":"guide","source":"MD/engine/particles.md","updated":"2026-07-29","headings":["Particle System","Architecture","Per-frame pipeline","Emitter system","Matter states","Spawn shapes","GPU simulation","Advanced subsystems","Performance optimizations","Rendering","Audio integration","Key files","See also"],"chunkIndex":1,"chunkCount":3,"text":"(surface or volume), box , cone , ring (torus), and mesh surface (emit from mesh triangles via ). GPU simulation The core sim runs in — a large compute shader processing all particles each frame. Buffer layout: Buffer Per particle data Stride Position 16 bytes Velocity 16 bytes Thermal 16 bytes Color 16 bytes packing: lower 8 bits = material index (0–15), upper bits = collision group ID. Encode: . Decode in WGSL: . Advanced subsystems Initialized via : Thermal & chemistry — temperature with material specific melt/boil points, latent heat, and phase transitions (16 material presets: water, metal, wax, lava, etc.). SPH fluids — smoothed particle hydrodynamics (pressure, viscosity, surface tension). SDF collision — particles collide with entity meshes via signed distance fields (sphere/box/cylinder), per entity SDF from . Flocking — boids (separation, alignment, cohesion) using a neighbor grid. Bonds — spring connections for soft body/cloth like behavior (async CPU readback for bond evaluation). Electromagnetic — electric/magnetic field forces, charged interactions. Constraints — distance/position/velocity constraints (rope, chains, attached particles). Event system — particle events (collision, death, threshold) that trigger sub emissions or gameplay actions. Performance optimizations Alive list compaction — a GPU scan builds an alive list of active indices; the main sim dispatches only threads via indirect dispatch. Radix sort — 4 bit radix sort replaces bitonic. For 100M particles: 24 dispatches (8 passes × 3) vs 289 for bitonic ( ). FBM noise pre bake — first bakes three decorrelated vector potential channels, then takes one periodic centered difference curl on the volume lattice. The octave count follows grid resolution and tiling period to avoid undersampling; at","contentHash":"11616a04d389d24e8b5026f9c9c3bf5c64817f1ae878ec8fbb9a8bd6137b2301"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/particles.md::0002","path":"engine/particles.md","title":"Particle System","description":"The engine's flagship GPU particle system — matter states, emitters, the per-frame compute pipeline, advanced subsystems (thermal, SPH, flocking, bonds), performance tricks, and rendering.","kind":"guide","source":"MD/engine/particles.md","updated":"2026-07-29","headings":["Particle System","Architecture","Per-frame pipeline","Emitter system","Matter states","Spawn shapes","GPU simulation","Advanced subsystems","Performance optimizations","Rendering","Audio integration","Key files","See also"],"chunkIndex":2,"chunkCount":3,"text":"then takes one periodic centered difference curl on the volume lattice. The octave count follows grid resolution and tiling period to avoid undersampling; at period 16, 64³ uses two, 128³ uses three, and 256³ uses four. Configurations with fewer than two lattice samples per base noise cell are rejected. Creation resolves WebGPU validation and out of memory scopes before exposing the resources. Runtime tracers use one filtered instead of evaluating procedural curl per particle. (Source: .) Neighbor grid — spatial hash grid for O(1) neighbor queries (SPH, flocking, bonds), rebuilt each frame on GPU. Selectable long range solver — direct, open boundary FMM, periodic PME, or experimental periodic ESP. See Particle Long","contentHash":"112b33f76ed7cac992122677210677166cbec139be7df81f153966b41e182339"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/physics.md::0000","path":"engine/physics.md","title":"Physics & Simulation","description":"GPU-accelerated cloth, rope, fluids, and rigid bodies — the mass-spring cloth solver, PBD rope, SPH and Eulerian fluids, ECS rigid bodies, PBD ragdoll, and the per-frame simulation order.","kind":"guide","source":"MD/engine/physics.md","updated":"2026-06-05","headings":["Physics & Simulation","Cloth simulation","Rope physics","Fluid simulation","Rigid body physics","PBD ragdoll","Simulation update","Key files"],"chunkIndex":0,"chunkCount":2,"text":"GPU-accelerated cloth, rope, fluids, and rigid bodies — the mass-spring cloth solver, PBD rope, SPH and Eulerian fluids, ECS rigid bodies, PBD ragdoll, and the per-frame simulation order. Physics & Simulation GPU accelerated cloth, rope, fluid volumes, and rigid body physics. All solvers run on compute shaders via vGPU. For the full WebGPU compute physics engine with PhysX 5 parity (rigid bodies, solver, CCD, vehicles, CCT, FEM soft bodies, mesh/heightfield queries), see GPU Physics Engine. Cloth simulation A mass spring cloth solver in . Each cloth is a grid of particles connected by structural, shear, and bending springs, solved on GPU compute. Configurable: stiffness (spring force coefficient), damping (velocity damping), per cloth gravity override, wind (directional force with turbulence noise), pin constraints (fixed vertices), and sphere/plane collision response. Rope physics A Position Based Dynamics (PBD) rope solver in . Ropes are chains of particles with distance constraints solved iteratively: PBD constraints — distance constraints with configurable compliance. Material properties — stiffness, damping, mass per unit length ( ). Particle interaction — ropes interact with the particle system ( ). GPU rendering — smooth tube rendering with normals and lighting ( ). Fluid simulation Two approaches: Lagrangian (SPH) — smoothed particle hydrodynamics via the particle system. Each fluid particle carries density, pressure, and viscosity; the solver computes inter particle forces using a neighbor grid ( ). Eulerian (grid based) — solves the Navier Stokes equations on a 3D grid using pressure projection and velocity advection, suitable for contained volumes (pools, rivers). Rigid body physics The ECS component drives rigid body simulation: body types (dynamic,","contentHash":"675d1545d4879734765611834b5f3244da87a11bfd3f4aa0edaddaa975645f81"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/physics.md::0001","path":"engine/physics.md","title":"Physics & Simulation","description":"GPU-accelerated cloth, rope, fluids, and rigid bodies — the mass-spring cloth solver, PBD rope, SPH and Eulerian fluids, ECS rigid bodies, PBD ragdoll, and the per-frame simulation order.","kind":"guide","source":"MD/engine/physics.md","updated":"2026-06-05","headings":["Physics & Simulation","Cloth simulation","Rope physics","Fluid simulation","Rigid body physics","PBD ragdoll","Simulation update","Key files"],"chunkIndex":1,"chunkCount":2,"text":"and velocity advection, suitable for contained volumes (pools, rivers). Rigid body physics The ECS component drives rigid body simulation: body types (dynamic, kinematic, static), collider shapes (sphere, box, capsule, mesh via the component), forces (gravity, impulses, torques), and constraints (distance, hinge, ball socket). PBD ragdoll A Position Based Dynamics ragdoll solver for character physics — joint limits, bone chains, and muscle constraints. It integrates with the AGI system for learning based locomotion. Simulation update orchestrates all simulation systems each frame, in order: 1. ECS physics system tick (rigid bodies, colliders). 2. Cloth solver step (GPU compute). 3. Rope constraint solving (PBD iterations). 4. Particle simulation (main compute + advanced subsystems). 5. Fluid pressure solve (if active). Key files File Purpose Master simulation orchestrator Mass spring cloth solver Eulerian fluid volumes Rigid body physics system PBD rope solver Rope material properties SPH fluid solver Grid based fluid Distance/position constraints","contentHash":"3bd2ccaeed4c4f70fd5cb77737868ff8e58d1f8b176052b6c45c6c00722c1196"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/EcsImports.md::0000","path":"engine/reference/EcsImports.md","title":"EcsImports.js","description":"","kind":"reference","source":"engine/EcsImports.js","updated":"","headings":["EcsImports.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b096af760ab936b147de4fda7020d24f3d8a02372332e30196f68481f1ce6c30"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/EngineBootstrap.md::0000","path":"engine/reference/EngineBootstrap.md","title":"EngineBootstrap.js","description":"","kind":"reference","source":"engine/EngineBootstrap.js","updated":"","headings":["EngineBootstrap.js","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Constants Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES","contentHash":"df2d1f670c2cac0d6123e1a416437646037894996c50702d1a2cc2ce32e07299"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/EngineBootstrap.md::0001","path":"engine/reference/EngineBootstrap.md","title":"EngineBootstrap.js","description":"","kind":"reference","source":"engine/EngineBootstrap.js","updated":"","headings":["EngineBootstrap.js","Constants","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b8f1309022ef29b8810a2a9d2d13cd43d8841adb6d61e0072ee0bce0b852605f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/EngineEditorBootstrap.md::0000","path":"engine/reference/EngineEditorBootstrap.md","title":"EngineEditorBootstrap.js","description":"","kind":"reference","source":"engine/EngineEditorBootstrap.js","updated":"","headings":["EngineEditorBootstrap.js","Functions","async initializePlauna(options = {})","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants Re exports , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8e059b2a77f4ec85101ab44c5a93582eff7334bfbe6893da3d40e466aec7649a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/EngineImports.md::0000","path":"engine/reference/EngineImports.md","title":"EngineImports.js","description":"","kind":"reference","source":"engine/EngineImports.js","updated":"","headings":["EngineImports.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8ec1c063f73b988f696a1d6514ae786520c273c64105866dc82ede940a0349a7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/MathImports.md::0000","path":"engine/reference/MathImports.md","title":"MathImports.js","description":"","kind":"reference","source":"engine/MathImports.js","updated":"","headings":["MathImports.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathImports: convenience barrel for engine math utilities. Provides both a grouped Math namespace and flat re exports for common ops. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"913fa162242b614ba0b2f42d0448b7a272df4d02a9ae00dfd54d0ce6dea5026a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/RenderImports.md::0000","path":"engine/reference/RenderImports.md","title":"RenderImports.js","description":"","kind":"reference","source":"engine/RenderImports.js","updated":"","headings":["RenderImports.js","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1c81ed91baf703a179edb667f19831be767ecee41d384e0ae0d182f4ccfb4f15"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ToolsImports.md::0000","path":"engine/reference/ToolsImports.md","title":"ToolsImports.js","description":"","kind":"reference","source":"engine/ToolsImports.js","updated":"","headings":["ToolsImports.js","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1c81ed91baf703a179edb667f19831be767ecee41d384e0ae0d182f4ccfb4f15"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/index.md::0000","path":"engine/reference/animation/index.md","title":"animation/index.js","description":"","kind":"reference","source":"engine/animation/index.js","updated":"","headings":["animation/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/learning/FbxMotionExtractor.md::0000","path":"engine/reference/animation/learning/FbxMotionExtractor.md","title":"animation/learning/FbxMotionExtractor.js","description":"","kind":"reference","source":"engine/animation/learning/FbxMotionExtractor.js","updated":"","headings":["animation/learning/FbxMotionExtractor.js","Functions","extractMotionClipFromFbxAscii(text, options = {})","extractMotionDatasetFromFbxAsciiEntries(entries, options = {})","async extractMotionDatasetFromFbxFiles(files, options = {})","async extractMotionDatasetFromFbxDirectoryHandle(dirHandle, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/learning/GltfMotionExtractor.md::0000","path":"engine/reference/animation/learning/GltfMotionExtractor.md","title":"animation/learning/GltfMotionExtractor.js","description":"","kind":"reference","source":"engine/animation/learning/GltfMotionExtractor.js","updated":"","headings":["animation/learning/GltfMotionExtractor.js","Functions","extractMotionDatasetFromGltf(gltf, options = {})","extractMotionClipFromGltf(gltf, animationIndex = 0, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/learning/MotionClip.md::0000","path":"engine/reference/animation/learning/MotionClip.md","title":"animation/learning/MotionClip.js","description":"","kind":"reference","source":"engine/animation/learning/MotionClip.js","updated":"","headings":["animation/learning/MotionClip.js","Classes","class MotionClip","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/learning/MotionDataset.md::0000","path":"engine/reference/animation/learning/MotionDataset.md","title":"animation/learning/MotionDataset.js","description":"","kind":"reference","source":"engine/animation/learning/MotionDataset.js","updated":"","headings":["animation/learning/MotionDataset.js","Classes","class MotionDataset","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/learning/MotionFeatures.md::0000","path":"engine/reference/animation/learning/MotionFeatures.md","title":"animation/learning/MotionFeatures.js","description":"","kind":"reference","source":"engine/animation/learning/MotionFeatures.js","updated":"","headings":["animation/learning/MotionFeatures.js","Functions","buildJointPositionDataset(clip, options = {})","buildMotionFeatureIndex(dataset, options = {})","fillRagdollFeature(ragdoll, boneIndices, out, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/learning/MotionMatcher.md::0000","path":"engine/reference/animation/learning/MotionMatcher.md","title":"animation/learning/MotionMatcher.js","description":"","kind":"reference","source":"engine/animation/learning/MotionMatcher.js","updated":"","headings":["animation/learning/MotionMatcher.js","Classes","class MotionMatcher","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/learning/SkeletonHierarchy.md::0000","path":"engine/reference/animation/learning/SkeletonHierarchy.md","title":"animation/learning/SkeletonHierarchy.js","description":"","kind":"reference","source":"engine/animation/learning/SkeletonHierarchy.js","updated":"","headings":["animation/learning/SkeletonHierarchy.js","Classes","class SkeletonHierarchy","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/animation/learning/index.md::0000","path":"engine/reference/animation/learning/index.md","title":"animation/learning/index.js","description":"","kind":"reference","source":"engine/animation/learning/index.js","updated":"","headings":["animation/learning/index.js","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"3cbd536df776d31bf4858f913c051b054d96300096abff1313bc1fa2deb6df93"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/AssetCache.md::0000","path":"engine/reference/assets/AssetCache.md","title":"assets/AssetCache.js","description":"","kind":"reference","source":"engine/assets/AssetCache.js","updated":"","headings":["assets/AssetCache.js","Classes","class AssetCache","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Map a cache:// vpath (or bare key) to a flat, filesystem safe filename. Store bytes under a cache key. Returns the key written. Read bytes for a cache key, or null if absent. Best effort listing of known cache keys (memory index + OPFS entries). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"65a9bdc8a10fa3e0e294b8f4169a6a7e4687bc06ac374ecce7de2400214de6c5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/AssetDeduper.md::0000","path":"engine/reference/assets/AssetDeduper.md","title":"assets/AssetDeduper.js","description":"","kind":"reference","source":"engine/assets/AssetDeduper.js","updated":"","headings":["assets/AssetDeduper.js","Functions","assetDeduperFallbackHash(data)","async hashContent(data)","classify(candidate, records)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Content hash of arbitrary data. Returns 'sha256:<hex ' (secure) or 'fnv1a:<hex ' (fallback). Async because Web Crypto digest is async. Classify a candidate against the existing records. Parameters: (Array) — existing AssetRecords Returns: } Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"72a041440a1c12f795c65c64ac503e9d90d519a414c9bab05092a31ae9cb8342"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/AssetRecord.md::0000","path":"engine/reference/assets/AssetRecord.md","title":"assets/AssetRecord.js","description":"","kind":"reference","source":"engine/assets/AssetRecord.js","updated":"","headings":["assets/AssetRecord.js","Functions","createAssetRecord(init = {})","createLicenseBlock(init = {})","licenseNeedsReview(license)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create an asset record. Parameters: (object) — No description in source JSDoc. License metadata is mandatory before import (unknown is allowed but flagged). Marketplace assets are licensed, not sold — track it and warn on restricted. True if the license is unknown or explicitly disallows engine conversion. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b008bdfffa66e14f978c99ee7f4b5b1db94159d8615ac290c017c556cd9c85e4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/AssetRegistry.md::0000","path":"engine/reference/assets/AssetRegistry.md","title":"assets/AssetRegistry.js","description":"","kind":"reference","source":"engine/assets/AssetRegistry.js","updated":"","headings":["assets/AssetRegistry.js","Classes","class AssetRegistry","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Add a fully formed record (used internally / by the resolver). Register a source by its bytes. Hashes, classifies against existing records, and links duplicates/variants/conflicts. Record a converted artifact path against a registered asset. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2b950748fca4fc5e3ead4257be2a9608c882c6b03b20b2d9471d183a7be2de8c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/AssetResolver.md::0000","path":"engine/reference/assets/AssetResolver.md","title":"assets/AssetResolver.js","description":"","kind":"reference","source":"engine/assets/AssetResolver.js","updated":"","headings":["assets/AssetResolver.js","Classes","class AssetResolver","Functions","backendFromCache(cache)","makeFetchBackend(base)","makeMemoryBackend(initial = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes A backend is { async read(path) Uint8Array null, async write?(path, bytes) }. Schemes without a registered backend simply fail to resolve (caller falls back). Method Signature Summary Read raw bytes for a single virtual path, or null if unavailable. Resolve a registered asset's bytes with backup fallback + hash repair. Functions Adapt an AssetCache instance to a resolver backend (cache:// scheme). A read only backend that fetches relative to a base URL (asset://, cloud://). A simple in memory backend (temp:// drag drop, user:// session mounts). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2c3d3439a7637fb36712251b56e8dd6d7ea7bfeae2031deed2ddeebebebd5d45"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/CanonicalSpace.md::0000","path":"engine/reference/assets/CanonicalSpace.md","title":"assets/CanonicalSpace.js","description":"","kind":"reference","source":"engine/assets/CanonicalSpace.js","updated":"","headings":["assets/CanonicalSpace.js","Functions","axisVector(token)","axisCorrectionQuat(upAxis = '+Y', forwardAxis = '+Z')","mat3ToQuat(m)","rotateVecByQuat(v, q)","unitScaleToMeters(unit)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Resolve an axis token ('+Y', ' Z', …) to a unit vector. Quaternion (xyzw) that rotates a vector from a source frame (declared by its up + forward axes) into the canonical Y up / Z forward frame. Parameters: (string) — e.g. '+Z' for Blender (string) — e.g. ' Y' for Blender Convert a row major 3x3 rotation matrix to a quaternion (xyzw). Rotate a 3 vector by a quaternion (xyzw). Constants — 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a0f91408ccfef671a9b4476876a402544438afbfce36b196fb74d2b9cfafd938"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/EngineModel.md::0000","path":"engine/reference/assets/EngineModel.md","title":"assets/EngineModel.js","description":"","kind":"reference","source":"engine/assets/EngineModel.js","updated":"","headings":["assets/EngineModel.js","Functions","createEngineModel(init = {})","createImportTransform(init = {})","createEngineNode(init = {})","createEngineMesh(init = {})","createEnginePrimitive(init = {})","layerStatus(model)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create an empty EngineModel with every layer present but unbuilt. Parameters: (object) — No description in source JSDoc. Returns: engine model (mutable; the import pipeline fills it in) A non destructive correction applied at runtime (never baked into source). Confidence drives the auto apply / review / preview / neutral policy. A node in the preserved source hierarchy (transforms kept as authored). A mesh = a set of primitives (submeshes), each with its own material. A primitive/submesh: geometry + a single material binding. Report which layers are built (non empty) vs explicitly unbuilt. Constants — Canonical layer list — used by the editor to show built vs unbuilt layers. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"93bddb6f2201240ef4f459e1a32c675dd6668a099036b36c5645dffb1bdbcbcb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/LicenseTracker.md::0000","path":"engine/reference/assets/LicenseTracker.md","title":"assets/LicenseTracker.js","description":"","kind":"reference","source":"engine/assets/LicenseTracker.js","updated":"","headings":["assets/LicenseTracker.js","Classes","class LicenseTracker","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Record/normalize a license block for an asset id. Evaluate whether an asset may be imported. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b09a89212b38fff81b55d57199d5daff3fbe97627d7b1c24fb685d9479be82cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/geometry/PrincipalAxes.md::0000","path":"engine/reference/assets/geometry/PrincipalAxes.md","title":"assets/geometry/PrincipalAxes.js","description":"","kind":"reference","source":"engine/assets/geometry/PrincipalAxes.js","updated":"","headings":["assets/geometry/PrincipalAxes.js","Functions","eigSym3(m)","principalAxes(model, nodeId, opts = {})","leastVarianceAxis(model, nodeId, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Jacobi eigen decomposition of a symmetric 3×3 (row major length 9 array). PCA of a node's mesh local vertex cloud. Returns: null} Convenience: the axis of LEAST variance (e.g. a wheel/disc axle), or null. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4a4a7e4da5dc9225e976efdb7133a654770f7b2f0790321fa48f3e6f882ae454"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/BoneMapper.md::0000","path":"engine/reference/assets/humanoid/BoneMapper.md","title":"assets/humanoid/BoneMapper.js","description":"","kind":"reference","source":"engine/assets/humanoid/BoneMapper.js","updated":"","headings":["assets/humanoid/BoneMapper.js","Functions","mapBones(model, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 and missing required slots as so the editor can correct (rule 62). Pure + GPU free (gate testable). Functions Map a model's skeleton to canonical humanoid bones. Parameters: (object) — EngineModel (object) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e6505136038e8f3275085401f1cb2903f314f2bebb6f85f906a216104c3a3302"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/FingerGenerator.md::0000","path":"engine/reference/assets/humanoid/FingerGenerator.md","title":"assets/humanoid/FingerGenerator.js","description":"","kind":"reference","source":"engine/assets/humanoid/FingerGenerator.js","updated":"","headings":["assets/humanoid/FingerGenerator.js","Functions","generateFingers(vertices, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 so the caller falls back to a single paddle. Pure geometry, GPU free, deterministic → unit testable. Functions Generate finger bones from hand vertices. Parameters: (number[][]) — world/model space points of the hand mesh (object) — { wrist:[x,y,z], forward:[x,y,z], side, fingerStart=0.5, gap=0.08, joints=4 } Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bd765851781dc5cfb831405409351823768df1e2fae33113f6e47db901fe83af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/FingerMapper.md::0000","path":"engine/reference/assets/humanoid/FingerMapper.md","title":"assets/humanoid/FingerMapper.js","description":"","kind":"reference","source":"engine/assets/humanoid/FingerMapper.js","updated":"","headings":["assets/humanoid/FingerMapper.js","Functions","mapFingers(model, handNodeId)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Map existing finger bones under a hand node. Parameters: (object) — EngineModel (string) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"571888c1ad158cd7c4111cf8687b693c93c606c93fdc9e60c6964914149d8213"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/HandRig.md::0000","path":"engine/reference/assets/humanoid/HandRig.md","title":"assets/humanoid/HandRig.js","description":"","kind":"reference","source":"engine/assets/humanoid/HandRig.js","updated":"","headings":["assets/humanoid/HandRig.js","Functions","createFinger(init = {})","createHandRig(init = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ( ), procedurally GENERATED from the hand mesh when the skeleton has none ( ), or a single paddle bone when the hand is a closed fist / too low poly ( ). Functions Parameters: (object) — { name, joints:[{position,nodeId?}], source } Parameters: (object) — No description in source JSDoc. Returns: a hand rig Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5ef4dc4c091ebd2d88757970ddab3261b4e4ca7eba09f00bc1230efd76d07ffe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/HandRigBuilder.md::0000","path":"engine/reference/assets/humanoid/HandRigBuilder.md","title":"assets/humanoid/HandRigBuilder.js","description":"","kind":"reference","source":"engine/assets/humanoid/HandRigBuilder.js","updated":"","headings":["assets/humanoid/HandRigBuilder.js","Functions","extractHandVertices(model, handNodeId, thresh = 0.4, pose = null)","buildHandRig(model, opts = {})","buildHands(model, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Vertices skinned (weight ≥ thresh) to the hand joint, in node hierarchy SCENE space (so they match the wrist + the rendered mesh). is a node→world map. Build a single hand rig. Parameters: (object) — EngineModel (object) — { side, handNode, lowerArmNode, world? } Returns: HandRig Build both hands for a model that already has a humanoid rig; attaches them at model.rigs.hand = { left, right } and humanoidRig.hands. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4fc7bd66411349b7f851e16c592caa40c0d5bf09d16e5149a7a839a0c057502b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/HumanoidRig.md::0000","path":"engine/reference/assets/humanoid/HumanoidRig.md","title":"assets/humanoid/HumanoidRig.js","description":"","kind":"reference","source":"engine/assets/humanoid/HumanoidRig.js","updated":"","headings":["assets/humanoid/HumanoidRig.js","Functions","createHumanoidRig(init = {})","boneSide(slot)","mirrorBone(slot)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a humanoid rig descriptor. Parameters: (object) — No description in source JSDoc. Is a canonical slot a left/right limb (vs a center/spine bone)? The mirrored slot for a left/right bone (e.g. leftHand ↔ rightHand), or null. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b28b6b6568daad866c12db4cc260ea7be2960115c02596e69ad9cf725e696fbc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/HumanoidRigBuilder.md::0000","path":"engine/reference/assets/humanoid/HumanoidRigBuilder.md","title":"assets/humanoid/HumanoidRigBuilder.js","description":"","kind":"reference","source":"engine/assets/humanoid/HumanoidRigBuilder.js","updated":"","headings":["assets/humanoid/HumanoidRigBuilder.js","Functions","buildHumanoidRig(model, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build a humanoid rig and attach it at model.rigs.humanoid. Parameters: (object) — EngineModel (object) — No description in source JSDoc. Returns: the HumanoidRig <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cbd355740e729914af767e76a08e8c894bb330a6cd547cf37aecf945ea6ce29e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/SkeletonHeal.md::0000","path":"engine/reference/assets/humanoid/SkeletonHeal.md","title":"assets/humanoid/SkeletonHeal.js","description":"","kind":"reference","source":"engine/assets/humanoid/SkeletonHeal.js","updated":"","headings":["assets/humanoid/SkeletonHeal.js","Functions","humanoidBonePosition(rig, slot, pose)","healHumanoid(model, rig, pose)","analyzeSymmetry(model, pose)","healSkeleton(model, pose)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 (slot → position) — the source model is never modified. returns the real joint if it exists, else the synthesized one. Functions Real or synthesized world position for a canonical slot (or null). Repair a humanoid rig in place (non destructively): fills with inferred joints and with a list of what was repaired. Parameters: (object) — EngineModel (object) — model.rigs.humanoid (Map) — node hierarchy world map Returns: } Find the skeleton's plane of bilateral symmetry. Returns: null} Heal a generic skeleton by mirroring limbs that exist on only one side. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9d8371211979de3929ccc5f89f84f9f2ec5d409c54e104ffd7fe8f0699ba264e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/humanoid/SkinPose.md::0000","path":"engine/reference/assets/humanoid/SkinPose.md","title":"assets/humanoid/SkinPose.js","description":"","kind":"reference","source":"engine/assets/humanoid/SkinPose.js","updated":"","headings":["assets/humanoid/SkinPose.js","Functions","invert4(m)","buildBindPose(model)","jointPosition(pose, nodeId)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. 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. Functions Invert a column major 4×4 (returns a new Float32Array, or null if singular). 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. Parameters: (object) — EngineModel Returns: nodeId → 4×4 (column major) World position of a node in a pose map (or null). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7988ce861531dcd60f1c3dd371f111cf8840a4bb701d12c52eae177853af4cec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/Detectors.md::0000","path":"engine/reference/assets/import/Detectors.md","title":"assets/import/Detectors.js","description":"","kind":"reference","source":"engine/assets/import/Detectors.js","updated":"","headings":["assets/import/Detectors.js","Functions","detectHierarchy(model)","detectParts(model)","detectSemanticDomain(model)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Summarize the preserved source hierarchy. Returns: } Detect semantic parts by node name. Populates model.detectedParts. Returns: } Roll detected parts up to a guessed runtime domain (vehicle/humanoid/weapon). Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8a4b947701104a3a1937d82a4d86188b4e436b6bcc4a58ea74189865b79f64e2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/FormatDetector.md::0000","path":"engine/reference/assets/import/FormatDetector.md","title":"assets/import/FormatDetector.js","description":"","kind":"reference","source":"engine/assets/import/FormatDetector.js","updated":"","headings":["assets/import/FormatDetector.js","Functions","sniffMagic(head)","classOf(format)","detectFormat(name, head = null)","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Sniff a format from a leading byte slice. Returns a format token or null. Pass at least the first 16 bytes for reliable results. Detect a file's format from its name and (optional) leading bytes. Parameters: (string) — filename or virtual path (Uint8Array ArrayBuffer) — leading bytes ( = 16 recommended) Returns: } Constants Re exports , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8518aa98854122fd5ea4bace6a2e598e8087b87c21dc841a777cecf8ff21299d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/GltfSceneImporter.md::0000","path":"engine/reference/assets/import/GltfSceneImporter.md","title":"assets/import/GltfSceneImporter.js","description":"","kind":"reference","source":"engine/assets/import/GltfSceneImporter.js","updated":"","headings":["assets/import/GltfSceneImporter.js","Functions","parseGlb(bytes)","decodeGltfDataUri(uri)","gltfExternalUriReport(uri)","gltfExternalResourceReferences(json)","async packageLooseGltfFiles(inputFiles)","extractGltfMaterialPayload(json, buffers = [], externalImages = null)","async importGltf(data, opts = {})","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Parse a binary GLB into { json, bin }. 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. Import a glTF/GLB into an EngineModel. Parameters: (Uint8Array ArrayBuffer object) — GLB bytes, or a parsed gltf object (object) — { name, bin, readExternal } Returns: EngineModel Constants Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c52dfc139f30b74d4c808dc8e3f4542d03ecc64d19472d549b74e0fa22cd0f60"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/GpuUploader.md::0000","path":"engine/reference/assets/import/GpuUploader.md","title":"assets/import/GpuUploader.js","description":"","kind":"reference","source":"engine/assets/import/GpuUploader.js","updated":"","headings":["assets/import/GpuUploader.js","Functions","standardVertexLayout()","interleaveStandard(primitive)","uploadPrimitive(device, primitive)","uploadModel(device, model)","releaseModelGpu(model)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ; flips true when all primitives upload. Functions The WebGPU vertex buffer layout matching interleaveStandard(). Interleave a primitive's attributes into the standard layout. Upload one primitive to the GPU. Records . Returns: the gpu descriptor Upload every primitive in a model. Returns the number uploaded. Free GPU buffers held by a model's primitives. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9f40d64343a98ef55080ce89e6356cd20760d9e2353d75701edbeab37297caac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/ImportPipeline.md::0000","path":"engine/reference/assets/import/ImportPipeline.md","title":"assets/import/ImportPipeline.js","description":"","kind":"reference","source":"engine/assets/import/ImportPipeline.js","updated":"","headings":["assets/import/ImportPipeline.js","Functions","async parseToModel(format, data, opts = {})","async importFile(args)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Parse raw bytes of a known format into an EngineModel (no GPU, no registry). Full import of a single file. Parameters: (object) — No description in source JSDoc. (string) — filename or virtual path (Uint8Array ArrayBuffer string) — source data (object) — AssetRegistry to dedup/register into (object) — LicenseTracker for the import gate (object) — license block for this source (object) — { readExternal, mtlText, unitHint, upAxis, forwardAxis, primary } Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"499bd599aac9659dc74434a9af1b76e1c517b0b4093615bd6d7e51c1749d38f2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/ObjImporter.md::0000","path":"engine/reference/assets/import/ObjImporter.md","title":"assets/import/ObjImporter.js","description":"","kind":"reference","source":"engine/assets/import/ObjImporter.js","updated":"","headings":["assets/import/ObjImporter.js","Functions","parseMtl(text)","importObj(data, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Parse a minimal MTL into a map of name → material descriptor. Import OBJ text/bytes into an EngineModel. Parameters: (string Uint8Array) — OBJ source (object) — { name, mtl: Map string (mtl source) } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"97a7e6111a16e491c0eda572afe962d811de27c22616b414402b769372c2d462"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/OrientationResolver.md::0000","path":"engine/reference/assets/import/OrientationResolver.md","title":"assets/import/OrientationResolver.js","description":"","kind":"reference","source":"engine/assets/import/OrientationResolver.js","updated":"","headings":["assets/import/OrientationResolver.js","Functions","classifyConfidence(c)","resolveOrientation(model, opts = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Infer an ImportTransform for a model. Parameters: (object) — EngineModel (uses sourceFormat + bounds) (object) — { unitHint, upAxis, forwardAxis } explicit overrides win Returns: } Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"478422f81f5c9b74b89d2f299e4d1930215ada2cdb77fd3754f5cfe3b287f793"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/PlyImporter.md::0000","path":"engine/reference/assets/import/PlyImporter.md","title":"assets/import/PlyImporter.js","description":"","kind":"reference","source":"engine/assets/import/PlyImporter.js","updated":"","headings":["assets/import/PlyImporter.js","Functions","importPly(data, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bbf2f3745e90ab42d3f241af8a05461cb39243fbab89f0edf9a88435e682e146"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/import/StlImporter.md::0000","path":"engine/reference/assets/import/StlImporter.md","title":"assets/import/StlImporter.js","description":"","kind":"reference","source":"engine/assets/import/StlImporter.js","updated":"","headings":["assets/import/StlImporter.js","Functions","importStl(data, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Import STL bytes or text into an EngineModel. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a33ed470e2c5d5f92406a7f28f775966a84f998b2024ff16f66a9712f57e4cc6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/index.md::0000","path":"engine/reference/assets/index.md","title":"assets/index.js","description":"","kind":"reference","source":"engine/assets/index.js","updated":"","headings":["assets/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b3775999e981d921e46ef8fd7acfa590d37013b127414259b2d7c3e393c66d0e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/EngineMaterial.md::0000","path":"engine/reference/assets/material/EngineMaterial.md","title":"assets/material/EngineMaterial.js","description":"","kind":"reference","source":"engine/assets/material/EngineMaterial.js","updated":"","headings":["assets/material/EngineMaterial.js","Functions","defaultChannelMap(slot)","createEngineMaterial(init = {})","createTextureBinding(init = {})","hasTextureTransform(binding)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 so the imported look stays recoverable even after engine normalization or shader model approximation. Functions glTF default packing: metallic=B, roughness=G, occlusion=R. Create a normalized engine material. Create a texture binding (a texture bound to a material slot on a surface). Has this binding a non identity UV transform (KHR texture transform)? Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c9ca9a060b68f8c361328f21ccdf07f7778ff51f6a2e65fff1cbd1b143fe1147"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/MaterialImport.md::0000","path":"engine/reference/assets/material/MaterialImport.md","title":"assets/material/MaterialImport.js","description":"","kind":"reference","source":"engine/assets/material/MaterialImport.js","updated":"","headings":["assets/material/MaterialImport.js","Functions","importMaterials(model)","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 so the imported look stays recoverable. Functions Decode every material in a model into EngineMaterial in place. Idempotent: a material already carrying is left untouched. Returns: the decoded materials Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4a676d5926a0a8bca9c3235be820a46b9e09a8c2ae1826df9bfb461c9f71fc50"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/MaterialVariant.md::0000","path":"engine/reference/assets/material/MaterialVariant.md","title":"assets/material/MaterialVariant.js","description":"","kind":"reference","source":"engine/assets/material/MaterialVariant.js","updated":"","headings":["assets/material/MaterialVariant.js","Functions","createMaterialVariant(base, overrides = {})","approximateToMetallicRoughness(material)","restoreOriginal(material)","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a material variant that overrides a few fields of a base material while preserving the original (recoverable) and recording the variant lineage. 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. Returns: a new EngineMaterial (workflow = metallicRoughness) Restore the original imported material descriptor (the raw source block). Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bfd151599c4d482e38caecd45b2e6e17caac314d748d2eda57995599c445196b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/SegmentView.md::0000","path":"engine/reference/assets/material/SegmentView.md","title":"assets/material/SegmentView.js","description":"","kind":"reference","source":"engine/assets/material/SegmentView.js","updated":"","headings":["assets/material/SegmentView.js","Functions","createSegmentView(model, mode = SEGMENTMODE.MATERIAL)","bakeSegment(model, segmentView, segmentKey)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a non destructive segment view of a model. Parameters: (object) — EngineModel (string) — one of SEGMENT MODE Returns: }} 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. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"100ca3f66ad5364639c33bf1d58e8cb1bce2d843f5af3334039f0919731ea7ba"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/SurfaceBinding.md::0000","path":"engine/reference/assets/material/SurfaceBinding.md","title":"assets/material/SurfaceBinding.js","description":"","kind":"reference","source":"engine/assets/material/SurfaceBinding.js","updated":"","headings":["assets/material/SurfaceBinding.js","Functions","buildSurfaceBindings(model)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build surface bindings for a model (material ↔ primitive). Populates model.surfaceBindings and returns them. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fb704b332818af241611290a775908b95d710f5f44b06db83644fec157d9282b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/TextureImport.md::0000","path":"engine/reference/assets/material/TextureImport.md","title":"assets/material/TextureImport.js","description":"","kind":"reference","source":"engine/assets/material/TextureImport.js","updated":"","headings":["assets/material/TextureImport.js","Functions","normalizeTextures(model)","async decodeTexture(tex)","async decodeAllTextures(model)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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). Returns: normalized textures 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). Decode every decodable texture in a model. Returns the count decoded. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"916772da461411486f5a6afdb42d36d7ecbdc9309742334556de16cdef033bc9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/composite/CompositeMaterialContracts.md::0000","path":"engine/reference/assets/material/composite/CompositeMaterialContracts.md","title":"assets/material/composite/CompositeMaterialContracts.js","description":"","kind":"reference","source":"engine/assets/material/composite/CompositeMaterialContracts.js","updated":"","headings":["assets/material/composite/CompositeMaterialContracts.js","Functions","isPlainCompositeMaterialObject(value)","validateCompositeMaterialFacets(value, path = '$.facets')","validateCompositeMaterialProvenance({ facets, sources, fieldSources }, path = '$')","validateEngineCompositeMaterialResource(value, path = '$')","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Strict, app neutral contracts for immutable composite material data. Functions Validate a complete built in catalog resource. Returns the input unchanged. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2675a6a22744faf8fe0a6015a1f601a85d29f47469cc95c8436f97f241942668"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/composite/EngineCompositeMaterialCatalog.md::0000","path":"engine/reference/assets/material/composite/EngineCompositeMaterialCatalog.md","title":"assets/material/composite/EngineCompositeMaterialCatalog.js","description":"","kind":"reference","source":"engine/assets/material/composite/EngineCompositeMaterialCatalog.js","updated":"","headings":["assets/material/composite/EngineCompositeMaterialCatalog.js","Classes","class EngineCompositeMaterialCatalog","Functions","async loadEngineCompositeMaterialCatalog({ fetchImpl = globalThis.fetch, urls = ENGINECOMPOSITEMATERIALRESOURCEURLS, } = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Browser native JSON loader. Callers may inject an equivalent fetch boundary. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5c0968e5cc88d7316e2f7f6db5093bbbaeef572bbe536aa71ab3d209e5f82b75"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/material/composite/index.md::0000","path":"engine/reference/assets/material/composite/index.md","title":"assets/material/composite/index.js","description":"","kind":"reference","source":"engine/assets/material/composite/index.js","updated":"","headings":["assets/material/composite/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/render/ModelGpu.md::0000","path":"engine/reference/assets/render/ModelGpu.md","title":"assets/render/ModelGpu.js","description":"","kind":"reference","source":"engine/assets/render/ModelGpu.js","updated":"","headings":["assets/render/ModelGpu.js","Functions","createDefaultSampler(device)","createWhiteTexture(device)","makeGpuTexture(device, bitmap, srgb)","async uploadModelTextures(device, model)","primitiveColor(model, prim)","buildModelDrawables(device, model, opts)","bakeSkinnedMeshes(model)","releaseDrawables(items)","frameBounds(items)","importMatrixOf(model)","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions A linear, repeating sampler — a sane default for model albedo. A 1×1 white texture so untextured primitives sample white (albedo = color). Upload one decoded bitmap to a GPU texture (sRGB for colour, linear for data). Decode + upload every embedded texture in a model. Returns: } Deterministic fallback colour for a primitive lacking a baseColorFactor. 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. Returns: } 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 ) and the primitive is flagged . No op without skins/IBMs. GPU free. Returns: primitives baked Free per item uniform buffers built by buildModelDrawables. World space bounds of a set of drawables, for camera framing. Returns: null} Compose the standard import correction matrix from a model's importTransform. Re exports <! HUMAN","contentHash":"43394b0e38427035cf14a17509c249303b344967c9951d9bed1cbb3dffff3e53"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/render/ModelGpu.md::0001","path":"engine/reference/assets/render/ModelGpu.md","title":"assets/render/ModelGpu.js","description":"","kind":"reference","source":"engine/assets/render/ModelGpu.js","updated":"","headings":["assets/render/ModelGpu.js","Functions","createDefaultSampler(device)","createWhiteTexture(device)","makeGpuTexture(device, bitmap, srgb)","async uploadModelTextures(device, model)","primitiveColor(model, prim)","buildModelDrawables(device, model, opts)","bakeSkinnedMeshes(model)","releaseDrawables(items)","frameBounds(items)","importMatrixOf(model)","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"of a set of drawables, for camera framing. Returns: null} Compose the standard import correction matrix from a model's importTransform. Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"252dd2b646d003c3748e0ee38ac9e064da31539ab988eaf9b472cb8180f6e452"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/render/ModelRenderer.md::0000","path":"engine/reference/assets/render/ModelRenderer.md","title":"assets/render/ModelRenderer.js","description":"","kind":"reference","source":"engine/assets/render/ModelRenderer.js","updated":"","headings":["assets/render/ModelRenderer.js","Functions","createModelRenderer(device, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e521041ffc72fe18d9d5dd1653ca41870f3dfaf857f27209c55dfda98c362aa5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/render/ModelShader.md::0000","path":"engine/reference/assets/render/ModelShader.md","title":"assets/render/ModelShader.js","description":"","kind":"reference","source":"engine/assets/render/ModelShader.js","updated":"","headings":["assets/render/ModelShader.js","Functions","createModelPipeline(device, opts = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build the render pipeline for EngineModel primitives. Parameters: (GPUDevice) — No description in source JSDoc. (object) — { format, depthFormat?, wgsl?, label?, cullMode? } Returns: } Constants — A neutral physically plausible lit shader with albedo floor + additive rim. — 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. — Full screen gallery/park environment paired with the sculpture shader. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a4ee3462799d18e092a9b21774979ead6321a894df367917031e8b76632388d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/BodyTemplateExport.md::0000","path":"engine/reference/assets/rig/BodyTemplateExport.md","title":"assets/rig/BodyTemplateExport.js","description":"","kind":"reference","source":"engine/assets/rig/BodyTemplateExport.js","updated":"","headings":["assets/rig/BodyTemplateExport.js","Functions","characterPhysicsAssetToBodyTemplate(asset, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/assets/rig/BodyTemplateExport.js — turn a generated into a starting point shaped body template JSON (the schema + 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. Functions Convert a (from ) into a body template — a ready to save JSON starting point for a new creature/character variant. Only the skeleton/joint/collision structure is generated; / / / are left as explicit, clearly commented empty stubs since no generator authors those — every mainstream engine's ragdoll generator stops at the same boundary. Parameters: (object) — CharacterPhysicsAsset (createCharacterPhysicsAsset output) (object) — No description in source JSDoc. (string) — template id (default: derived from asset.source) (string) — display name (string) — No description in source JSDoc. Returns: life.body.v1 shaped body template <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"353b8adc567254c3b8f0237c02bdd866c0209e2cb5488dec8e87232007e27dc5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/CharacterPhysicsAsset.md::0000","path":"engine/reference/assets/rig/CharacterPhysicsAsset.md","title":"assets/rig/CharacterPhysicsAsset.js","description":"","kind":"reference","source":"engine/assets/rig/CharacterPhysicsAsset.js","updated":"","headings":["assets/rig/CharacterPhysicsAsset.js","Functions","computeSkeletonFingerprint(bodyDefs)","createCharacterPhysicsAsset(model, opts = {})","validateCharacterPhysicsAsset(asset)","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/assets/rig/CharacterPhysicsAsset.js — the single generated packaging layer for a character's physics structure. This is NOT a new generator: it wraps (RagdollBuilder.js) + (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. Functions 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. Parameters: (object[]) — No description in source JSDoc. Build a for a model. Humanoid path when a humanoid rig is present, otherwise generic topology — identical branch selection to , which this function delegates to. Parameters: (object) — EngineModel (object) — Passed through to / (density, massKg, heal, forceGeneric, …) Returns: CharacterPhysicsAsset Validate a CharacterPhysicsAsset's internal consistency (indices resolve, joint types known, mass/limit values finite). Follows the same pattern as Life's , adapted to this schema's shape. Parameters: (object) — No description in source JSDoc. Returns: } Constants Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API","contentHash":"adb2f152c001a15d93a1558f06f499ab162061b04dd664f141346835411d549f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/CharacterPhysicsAsset.md::0001","path":"engine/reference/assets/rig/CharacterPhysicsAsset.md","title":"assets/rig/CharacterPhysicsAsset.js","description":"","kind":"reference","source":"engine/assets/rig/CharacterPhysicsAsset.js","updated":"","headings":["assets/rig/CharacterPhysicsAsset.js","Functions","computeSkeletonFingerprint(bodyDefs)","createCharacterPhysicsAsset(model, opts = {})","validateCharacterPhysicsAsset(asset)","Constants","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"in source JSDoc. Returns: } Constants Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f25e35f45622e93929aeedae9fe32fc654ab9298c7adc5c69b7180c813b3b4e1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/JointLimits.md::0000","path":"engine/reference/assets/rig/JointLimits.md","title":"assets/rig/JointLimits.js","description":"","kind":"reference","source":"engine/assets/rig/JointLimits.js","updated":"","headings":["assets/rig/JointLimits.js","Functions","hingeAxis(parentPos, jointPos, childPos)","deriveJointType(prof)","deriveSwingCone(prof)","deriveHingeLimit(prof)","deriveTwistLimit(prof)","mirrorLeftRightLimits(leftLimit, rightLimit)","inferDriveType(name = '')","deriveHumanoidJointLimits(model, pose)","deriveSkeletonJointLimits(model, pose)","validJointTypeSet()","validateBoneTopology(bones)","countTypes(limits)","buildJointLimits(model, opts = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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. Joint type carried by an anatomical profile (ball/hinge/saddle/twist/root). Swing cone half angle (degrees) carried by a profile. Hinge bend range (degrees). By Life's hinge convention this value is carried in the profile's field (a hinge drives one axis), so this is semantically distinct from even though both read the same underlying number for a hinge profile. Twist limit (degrees) for a non hinge (ball/saddle/twist) profile. 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 already guarantees implicitly by stripping the left/right prefix before profile lookup.","contentHash":"e398e38517929f936f2ebf21f664a12b1cca6dd340a7af4f1b083abd77553820"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/JointLimits.md::0001","path":"engine/reference/assets/rig/JointLimits.md","title":"assets/rig/JointLimits.js","description":"","kind":"reference","source":"engine/assets/rig/JointLimits.js","updated":"","headings":["assets/rig/JointLimits.js","Functions","hingeAxis(parentPos, jointPos, childPos)","deriveJointType(prof)","deriveSwingCone(prof)","deriveHingeLimit(prof)","deriveTwistLimit(prof)","mirrorLeftRightLimits(leftLimit, rightLimit)","inferDriveType(name = '')","deriveHumanoidJointLimits(model, pose)","deriveSkeletonJointLimits(model, pose)","validJointTypeSet()","validateBoneTopology(bones)","countTypes(limits)","buildJointLimits(model, opts = {})","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"and are left untouched. Explicit, testable version of the symmetry already guarantees implicitly by stripping the left/right prefix before profile lookup. Parameters: (object) — No description in source JSDoc. (object) — No description in source JSDoc. Returns: } 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. Parameters: (string) — No description in source JSDoc. Derive joint limits for a humanoid rig. Parameters: (object) — EngineModel (with model.rigs.humanoid) (Map) — bind pose map (built if omitted) Returns: canonical slot → limit Derive joint limits for ANY skeleton by topology + geometry (spiders, dogs, cats, birds…). No names required. Returns: nodeId → limit The set of valid joint type strings ( / / / / / ) as a , for membership checks — single source of truth so a validator never hand declares its own copy that can silently drift from (this is exactly how and Life's used to each keep their own disconnected copy). Shared bone topology structural validation — the literally duplicated core every ragdoll/body validator needs (bone id uniqueness, parent reference resolution), extracted once so and Life's 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). Returns: } Count joint types in a limit map (for inspectors/gates). Auto derive and attach joint limits to a model. Humanoid path when a humanoid rig is present, otherwise generic topology inference. Returns: } Constants — Alias for — the joint bend","contentHash":"1bf89217465f873cb0771e43f481acbba9b8d07f950f1ad050a5b652d16f9a56"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/JointLimits.md::0002","path":"engine/reference/assets/rig/JointLimits.md","title":"assets/rig/JointLimits.js","description":"","kind":"reference","source":"engine/assets/rig/JointLimits.js","updated":"","headings":["assets/rig/JointLimits.js","Functions","hingeAxis(parentPos, jointPos, childPos)","deriveJointType(prof)","deriveSwingCone(prof)","deriveHingeLimit(prof)","deriveTwistLimit(prof)","mirrorLeftRightLimits(leftLimit, rightLimit)","inferDriveType(name = '')","deriveHumanoidJointLimits(model, pose)","deriveSkeletonJointLimits(model, pose)","validJointTypeSet()","validateBoneTopology(bones)","countTypes(limits)","buildJointLimits(model, opts = {})","Constants","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"joint limits to a model. Humanoid path when a humanoid rig is present, otherwise generic topology inference. Returns: } Constants — Alias for — the joint bend direction deriver, named for the generic \"derive \" family used by RagdollBuilder/CharacterPhysicsAsset. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cba048c18401cf1e9c15b483f1978d89001dc969846577de86bf8e018b95a649"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/RagdollBuilder.md::0000","path":"engine/reference/assets/rig/RagdollBuilder.md","title":"assets/rig/RagdollBuilder.js","description":"","kind":"reference","source":"engine/assets/rig/RagdollBuilder.js","updated":"","headings":["assets/rig/RagdollBuilder.js","Functions","radiusRatio(slot)","buildHumanoidRagdoll(model, rig, pose, opts = {})","buildGenericRagdoll(model, pose, opts = {})","buildRagdoll(model, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 / articulations or the editor's ragdoll. Works for humanoids (canonical bones, incl. healed ones) and for any creature via generic topology. GPU free + deterministic. Functions Build a ragdoll from a humanoid rig (canonical bones, including healed ones). Build a ragdoll from any skeleton by generic topology (spiders, dogs, …). Build a ragdoll for a model and attach it at model.rigs.ragdoll. Humanoid path when a humanoid rig is present, otherwise generic topology. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"44859fe2a6ef470cfbd4e3fbc7a04c0915462b779411a62bf1709c5ecdbbca9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/RagdollSim.md::0000","path":"engine/reference/assets/rig/RagdollSim.md","title":"assets/rig/RagdollSim.js","description":"","kind":"reference","source":"engine/assets/rig/RagdollSim.js","updated":"","headings":["assets/rig/RagdollSim.js","Functions","createRagdollSim(ragdoll, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Parameters: (object) — RagdollBuilder output ({ bones:[{position,parentIndex}] }) (object) — { gravity:[x,y,z], ground:number null, damping, iterations, pinned:number[] } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ff3d59036b875fc55c15dfaa77bfb96aca8c1cd56d0385438fcfd4555b1ec148"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/RagdollSkinning.md::0000","path":"engine/reference/assets/rig/RagdollSkinning.md","title":"assets/rig/RagdollSkinning.js","description":"","kind":"reference","source":"engine/assets/rig/RagdollSkinning.js","updated":"","headings":["assets/rig/RagdollSkinning.js","Functions","buildSkinnedRagdoll(model, opts = {})","ragdollBoneFrames(state)","skinPrimitiveInterleaved(prim, frames, jointCount, outInterleaved)","logSkinnedRagdoll(state, logFn)","ragdollDebugStats(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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. Parameters: (object) — EngineModel (must be baked: bakeSkinnedMeshes already ran) (object) — { gravityMag, importMatrix, damping, iterations, pinned } Returns: null} 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). Returns: } 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 . Parameters: (object) — primitive with bindPosition + attributes.{normal,joints,weights} (object) — ragdollBoneFrames() output (number) — number of ragdoll","contentHash":"9e0f95c987f6070c68c288a6f88ff116b517dbc0266e91e568d48bb441480728"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/RagdollSkinning.md::0001","path":"engine/reference/assets/rig/RagdollSkinning.md","title":"assets/rig/RagdollSkinning.js","description":"","kind":"reference","source":"engine/assets/rig/RagdollSkinning.js","updated":"","headings":["assets/rig/RagdollSkinning.js","Functions","buildSkinnedRagdoll(model, opts = {})","ragdollBoneFrames(state)","skinPrimitiveInterleaved(prim, frames, jointCount, outInterleaved)","logSkinnedRagdoll(state, logFn)","ragdollDebugStats(state)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":". Parameters: (object) — primitive with bindPosition + attributes.{normal,joints,weights} (object) — ragdollBoneFrames() output (number) — number of ragdoll bones (skip weights beyond it) (Float32Array) — stride 8 buffer (pre seeded with baked UVs) 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 for the in app console). 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 flag. Use it to PROVE the limits hold during simulation (and to spot violations). Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"136c639cdb66374d991a583b0ee55cb4933277de4a889ba2f8b3f7c53fcb6da0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/ActiveBodyFallbackReport.md::0000","path":"engine/reference/assets/rig/active-body/ActiveBodyFallbackReport.md","title":"assets/rig/active-body/ActiveBodyFallbackReport.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/ActiveBodyFallbackReport.js","updated":"","headings":["assets/rig/active-body/ActiveBodyFallbackReport.js","Functions","getActiveBodyFallbackReport(gpu = null)","isActiveBodyFallbackReportOk(report)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/ActiveBodyPerformanceBudgets.md::0000","path":"engine/reference/assets/rig/active-body/ActiveBodyPerformanceBudgets.md","title":"assets/rig/active-body/ActiveBodyPerformanceBudgets.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/ActiveBodyPerformanceBudgets.js","updated":"","headings":["assets/rig/active-body/ActiveBodyPerformanceBudgets.js","Functions","getActiveBodyPerformanceBudgetReport(bodyCount = 0, measurements = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/ActiveBodyRigBuilder.md::0000","path":"engine/reference/assets/rig/active-body/ActiveBodyRigBuilder.md","title":"assets/rig/active-body/ActiveBodyRigBuilder.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/ActiveBodyRigBuilder.js","updated":"","headings":["assets/rig/active-body/ActiveBodyRigBuilder.js","Functions","buildHumanoidRig(config)","buildActiveBodyPayload(config, worldPosition = [0, 0, 0])","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build a complete humanoid rig from entity data. Parameters: (object) — No description in source JSDoc. (string) — Entity ID (string) — Entity display name (object) — Body scales (heightScale, widthScale, etc.) (string) — 'poweredBody' 'kinematicFollow' 'animatedOnly' Returns: } Build a spawn ready payload for ActiveBodySystem. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6d4aebb2bc6d9a42afc98d0690fa7dda227b3c5e06ad9e275787945a409a00e8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/ActiveBodySimulationTiers.md::0000","path":"engine/reference/assets/rig/active-body/ActiveBodySimulationTiers.md","title":"assets/rig/active-body/ActiveBodySimulationTiers.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/ActiveBodySimulationTiers.js","updated":"","headings":["assets/rig/active-body/ActiveBodySimulationTiers.js","Functions","classifyActiveBodySimulationTier(input = {})","buildActiveBodySimulationTierReport(bodies = [], observer = {})","estimateActiveBodyImportance(body = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/ActiveBodySystem.md::0000","path":"engine/reference/assets/rig/active-body/ActiveBodySystem.md","title":"assets/rig/active-body/ActiveBodySystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/ActiveBodySystem.js","updated":"","headings":["assets/rig/active-body/ActiveBodySystem.js","Classes","class ActiveBodySystem","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Inject PACER sensors. See constructor for shape. Pass to clear. Called once at startup from GameSetup. Build the per frame sensors packet for one body: terrain heightAt(x,z) closure + the nearest agent lookup resolved NOW. Returns null when no sensors are registered — NN obs will then default to \"flat + empty\". Initialize with a part catalog. Loads body template and assembles spec. Call this once at startup, before adding bodies. Returns the assembled ragdoll spec (or null if init wasn't called with a catalog). Build collision filter options for PBDRagdoll. solveCollisions(). Live body yaw (smoothly slewed in the walking controller). Use this for rendering equipment / fallback meshes / camera follow so visuals stay in sync with the ragdoll's actual orientation instead of snapping to the raw input direction. Request a facing target. The walking controller slews navState.facing toward it at 5 rad/s. Useful when the body should turn in place before moving (e.g. player pushed a direction but hasn't committed to walking). Apply a preset neuro profile to a body's brain. Ramp a neuro profile gradually (0..1). Useful for poison progression. Apply neuro effect to every body (for debug testing). Get training stats for a body's brain. Heal accumulated brain damage. Represents neuroplasticity / medical treatment. Clears brainDamage but does NOT undo weight corruption — the NN has to retrain through normal play to recover those specifically. Directly set intelligence (0 100). Triggers an immediate upgrade check. Useful for character creation, narrative events","contentHash":"57df87cfbe9c6523a089087cd4d50acd920571b47a76134a1cde366138d28189"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/ActiveBodySystem.md::0001","path":"engine/reference/assets/rig/active-body/ActiveBodySystem.md","title":"assets/rig/active-body/ActiveBodySystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/ActiveBodySystem.js","updated":"","headings":["assets/rig/active-body/ActiveBodySystem.js","Classes","class ActiveBodySystem","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"play to recover those specifically. Directly set intelligence (0 100). Triggers an immediate upgrade check. Useful for character creation, narrative events (enlightenment, head injury, potions), or debug. Grow intelligence by a delta. Called by gameplay systems when the character learns (skill use, storylet resolution, reading, teacher interaction). Small deltas (+0.1 to +1) are typical; +10 is a major life event. Flip the magical flag — unlocks supernatural tiers (genius through divine, IQ 100–200). Use this for narrative events: divine ascension, archmage initiation, demonic pact, transcendence. Setting to false REMOVES magic — if their brain is already a magical tier it stays (downgrade not supported) but future growth caps at huge / IQ 100. Auto upgrade check: if the character's intelligence has grown past the next tier threshold AND their current brain has saturated (low loss, enough training), grow the brain via Net2Net (preserves learning). Called every 5s by the update loop. Saturation criteria: framesTrained 3000 (enough data for the current capacity) lossEMA < 0.06 (mastered the task within current capacity) Set the brain tier for an entity BEFORE its brain is first created. Save current brain to IndexedDB now. Returns size in bytes or null. Save to a named slot (e.g. player snapshots). Load a saved brain into an entity (from id or slot name). Delete a saved brain (or slot). List all saved brains across IndexedDB. Export a body's brain as a JSON string (for download/share). Download a body's brain as a .brain.json file. Import a JSON string into a body's brain. Set the body's current intent. The NN sees this in its observation vector and the reward function uses it to shape what counts as success. TRACE integration: pass + optional and the body will auto","contentHash":"a7b28ed081fd9ddfae1ddfc8c420b2bd37dcfe49cac25742a444c0f59fc1a823"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/ActiveBodySystem.md::0002","path":"engine/reference/assets/rig/active-body/ActiveBodySystem.md","title":"assets/rig/active-body/ActiveBodySystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/ActiveBodySystem.js","updated":"","headings":["assets/rig/active-body/ActiveBodySystem.js","Classes","class ActiveBodySystem","Re-exports","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"sees this in its observation vector and the reward function uses it to shape what counts as success. TRACE integration: pass + optional and the body will auto derive from (waypoint pelvis). The NN reward function rewards both proximity to the waypoint AND matching the desired speed, so the character walks toward it at the right pace. When the body reaches the waypoint (within WAYPOINT REACH RADIUS) the caller should advance to the next waypoint — this API does NOT own the waypoint queue; the planner does. Get a body's current pelvis world position as {wx, wy, wz, vx, vz}. Returns null if the body isn't registered or the ragdoll hasn't initialized yet. Used by GameLoop to sync playerState from the physics body (s","contentHash":"937e954c28024d9fac8185b0d2e12dad2992297fef003ced5c07c51182259a8c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/AnimalLocomotion.md::0000","path":"engine/reference/assets/rig/active-body/AnimalLocomotion.md","title":"assets/rig/active-body/AnimalLocomotion.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/AnimalLocomotion.js","updated":"","headings":["assets/rig/active-body/AnimalLocomotion.js","Functions","createAnimalAnatomySpec(skeleton)","createQuadrupedAnatomySpec(skeleton)","createArachnidAnatomySpec(skeleton)","createAnimalBrainProfile(skeleton, options = {}, entityId = 'animal')","cloneAnimalSkeleton(skeleton)","animalVerticalScaleFor(skeleton, scale = 1)","animalPoseVerticalScale(entry)","animalLocalToWorldPosition(origin, yaw, scale, local, verticalScale = scale)","createAnimalPbdRagdoll(skeleton, worldPosition, options = {})","animalParentConstraintStiffness(bone, parent, skeleton)","animalLegSpanConstraintStiffness(skeleton)","computeAnimalStructuralLimits(skeleton, boneMap)","animalBoneMass(bone, skeleton)","animalBoneRadius(bone, skeleton, scale)","stepAnimalActiveBody(entry, dt, groundY = 0, sensors = null)","resolveAnimalMotion(entry, root)","animalGaitPhaseAdvance(entry, motion, dt)","animalGaitDriveSpeed(entry, motion)","animalIntendedSpeedScale(entry, motion)","animalMotionForwardVector(entry, motion)","animalRootForwardVelocityDot(entry, motion)","animalShouldReplantLegsForDirection(entry, motion, moving)","isAnimalDebugTarget(entry)","logAnimalActiveBodyTrace(entry, frame, groundY = 0)","animalDebugBodyAxis(entry)","animalDebugWorstBoneSpeed(entry)","formatAnimalNeuralDebug(entry)","formatAnimalDirectionDebug(entry)","formatAnimalLegDebug(entry, groundY = 0)","formatAnimalTailDebug(entry, groundY = 0)","animalLegDebugLabel(descriptor)","signedAnimalYawDeltaDegrees(a, b)","applyAnimalPoseDrive(entry, dt, groundY, motion)","computeAnimalLegTargets(entry, root, rootLocal, groundY, motion, basis)","applyAnimalNeuralMotor(entry, legTargets, tailTargets, motion, groundY, dt)","animalNeuralTierCap(tier)","animalBodyVerticality(entry, groundY = 0)","animalNeuralReward(entry, motion, currentV, targetV, coreV)","animalNeuralBonesByName(entry)","animalNeuralTargetAliases(entry, legTargets, tailTargets)","applyAnimalNeuralLegOffsets(entry, legTargets, offsets, weight)","animalNeuralOffsetScale(entry, footPlanted)","addAnimalNeuralOffset(target, offsets, alias, weight, footPlanted)","computeAnimalTailTargets(entry, root, rootLocal, groundY, motion, basis, dt)","resolveAnimalTailAffect(entry, motion)","animalTailSpecies(entry, packet = null)","animalTailDriveScale(entry)","animalTailCarryProfile(species)","animalRootTargetY(entry, groundY = 0)","animalLowestSupportFootLocalY(entry)","animalSupportRoot(entry, root, groundY, motion, basis)","animalRootVerticalDriveWeight(entry)","animalBodyPostureOffset(entry, role, basis)","animalStrideLength(entry, speedScale)","animalStrideDriveScale(entry)","animalSwingLateralSweep(entry, descriptor, lift, swingAhead)","animalSwingLiftHeight(entry)","animalPoseDriveGains(role, id, bodyType)","animalRestWorld(root, rootLocal, local, scale, basis, verticalScale = scale)","animalLegPhase(entry, descriptor, legCount, speedScale = null)","animalDutyFactor(entry, legCount, speedScale)","animalStanceRollback(entry, speedScale)","applyAnimalLegChainTargets(entry, targets, info, descriptor, root, bodyRootLocal, footTarget, lift, swing, basis)","animalCurrentSpeedScale(entry)","animalStanceRootPush(entry, descriptor, speedScale)","animalLegShapeWeight(entry, descriptor, swing)","animalLegJointPulse(entry, descriptor, jointIndex, chainLength, lift, swing, basis)","animalStructuralPasses(entry)","clampAnimalBoneVelocities(entry, dt)","enforceAnimalGroundContact(entry, groundY, dt = 1/60, sensors = null)","enforceAnimalPlantedFootContacts(entry, groundY, dt = 1/60, sensors = null, motion = null)","animalPlantedFootHold(entry, moving)","animalPlantedFootDamping(entry, moving)","applyAnimalNoIntentSettleBrake(entry, dt = 1/60, motion = null)","applyAnimalWrongWayBrake(entry, dt = 1/60, motion = null)","computeAnimalBalance(entry, groundY = 0)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2e0c80acd7bb44bd6ffecb2f41626f27fd277caeab05c004e68378c1a68fa9ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BalanceMotor.md::0000","path":"engine/reference/assets/rig/active-body/BalanceMotor.md","title":"assets/rig/active-body/BalanceMotor.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BalanceMotor.js","updated":"","headings":["assets/rig/active-body/BalanceMotor.js","Functions","computeBalance(ragdoll)","makeBalanceState(entry, balance)","toBalanceControllerState(state)","copyBalanceState(balance)","updateState(entry, balance, dt)","snapshotGetupOrientation(entry)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a7ad0ca7793f186455837f5ba3fbf022549b64dde2a62131941ed5bc7ddd1f74"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BodyAssembler.md::0000","path":"engine/reference/assets/rig/active-body/BodyAssembler.md","title":"assets/rig/active-body/BodyAssembler.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BodyAssembler.js","updated":"","headings":["assets/rig/active-body/BodyAssembler.js","Functions","async loadBodyTemplate(url = '/data/bodies/humanoiddefault.json')","assembleBody(template, partCatalog, options = {})","shouldBonesCollide(spec, boneA, boneB, isActive)","getFootBones(spec)","getBone(spec, id)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 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. Functions Load the humanoid body template (cached after first call). Build a ragdoll spec from a body template + part catalog. Parameters: (object) — From loadBodyTemplate() (object) — From loadPartCatalog() — has .parts Map (object) — { preset: 'HumanAverage' 'HumanWeak' ... } Returns: RagdollSpec Test if two bones should collide given a ragdoll spec. Parameters: (object) — From assembleBody() (string) — bone id (string) — bone id (boolean) — true if body is in active mode (vs ragdolled) Get bone IDs that are foot contacts (for ground sensing / balance). Get a bone by id. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"213994b3319acf9066962d07c2bc56d9288952688582f52b15d4dcc786b7233a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BodyPoses.md::0000","path":"engine/reference/assets/rig/active-body/BodyPoses.md","title":"assets/rig/active-body/BodyPoses.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BodyPoses.js","updated":"","headings":["assets/rig/active-body/BodyPoses.js","Functions","normalizePose(data)","async loadPose(id)","async loadSequence(id)","async preloadStandardPoses()","bracketWalkCyclePhase(gaitPhase)","getWalkCycleWorldTargets(gaitPhase, measurements, anchor, yaw)","getWalkCycleWorldPoseTargets(gaitPhase, measurements, anchor, yaw)","blendPositionTargetMaps(base, overlay, t)","blendWorldPoseTargets(base, overlay, t)","getPoseBoneWorldPosition(pose, boneId, measurements, anchor, yaw)","getPoseBoneLocalPosition(pose, boneId)","getPoseBoneLocalRotation(pose, boneId)","getPoseBoneWorldRotation(pose, boneId, yaw)","getPoseWorldTargets(pose, measurements, anchor, yaw)","getPoseWorldPoseTargets(pose, measurements, anchor, yaw)","interpolatePoses(poseA, poseB, t, measurements, anchor, yaw)","interpolatePoseTargets(poseA, poseB, t, measurements, anchor, yaw)","applyKinematicBlend(ragdoll, targets, blendRate = 0.04, options = {})","applyMotorToTargets(ragdoll, targets, options = {})","getSequenceState(sequence, elapsed)","getCachedPose(id)","getVerticalityLadder()","bracketVerticality(v, ladder = null)","getPoseAtVerticality(v, measurements, anchor, yaw)","getPoseTargetsAtVerticality(v, measurements, anchor, yaw)","measureBodyVerticality(ragdoll)","getCachedSequence(id)","getSequenceDuration(sequence)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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","contentHash":"3d9ccf6d29e9e6281097f8e688a44ce44666078fa14eda31cd5e238f88bfea7b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BodyPoses.md::0001","path":"engine/reference/assets/rig/active-body/BodyPoses.md","title":"assets/rig/active-body/BodyPoses.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BodyPoses.js","updated":"","headings":["assets/rig/active-body/BodyPoses.js","Functions","normalizePose(data)","async loadPose(id)","async loadSequence(id)","async preloadStandardPoses()","bracketWalkCyclePhase(gaitPhase)","getWalkCycleWorldTargets(gaitPhase, measurements, anchor, yaw)","getWalkCycleWorldPoseTargets(gaitPhase, measurements, anchor, yaw)","blendPositionTargetMaps(base, overlay, t)","blendWorldPoseTargets(base, overlay, t)","getPoseBoneWorldPosition(pose, boneId, measurements, anchor, yaw)","getPoseBoneLocalPosition(pose, boneId)","getPoseBoneLocalRotation(pose, boneId)","getPoseBoneWorldRotation(pose, boneId, yaw)","getPoseWorldTargets(pose, measurements, anchor, yaw)","getPoseWorldPoseTargets(pose, measurements, anchor, yaw)","interpolatePoses(poseA, poseB, t, measurements, anchor, yaw)","interpolatePoseTargets(poseA, poseB, t, measurements, anchor, yaw)","applyKinematicBlend(ragdoll, targets, blendRate = 0.04, options = {})","applyMotorToTargets(ragdoll, targets, options = {})","getSequenceState(sequence, elapsed)","getCachedPose(id)","getVerticalityLadder()","bracketVerticality(v, ladder = null)","getPoseAtVerticality(v, measurements, anchor, yaw)","getPoseTargetsAtVerticality(v, measurements, anchor, yaw)","measureBodyVerticality(ragdoll)","getCachedSequence(id)","getSequenceDuration(sequence)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"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. ══════════════════════════════════════════════════════════════════════ Functions Load a single pose","contentHash":"cd36ab8b35cebbf7abb7088235ce6944f8fa6228a87bf32260c4279dc07f1664"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BodyPoses.md::0002","path":"engine/reference/assets/rig/active-body/BodyPoses.md","title":"assets/rig/active-body/BodyPoses.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BodyPoses.js","updated":"","headings":["assets/rig/active-body/BodyPoses.js","Functions","normalizePose(data)","async loadPose(id)","async loadSequence(id)","async preloadStandardPoses()","bracketWalkCyclePhase(gaitPhase)","getWalkCycleWorldTargets(gaitPhase, measurements, anchor, yaw)","getWalkCycleWorldPoseTargets(gaitPhase, measurements, anchor, yaw)","blendPositionTargetMaps(base, overlay, t)","blendWorldPoseTargets(base, overlay, t)","getPoseBoneWorldPosition(pose, boneId, measurements, anchor, yaw)","getPoseBoneLocalPosition(pose, boneId)","getPoseBoneLocalRotation(pose, boneId)","getPoseBoneWorldRotation(pose, boneId, yaw)","getPoseWorldTargets(pose, measurements, anchor, yaw)","getPoseWorldPoseTargets(pose, measurements, anchor, yaw)","interpolatePoses(poseA, poseB, t, measurements, anchor, yaw)","interpolatePoseTargets(poseA, poseB, t, measurements, anchor, yaw)","applyKinematicBlend(ragdoll, targets, blendRate = 0.04, options = {})","applyMotorToTargets(ragdoll, targets, options = {})","getSequenceState(sequence, elapsed)","getCachedPose(id)","getVerticalityLadder()","bracketVerticality(v, ladder = null)","getPoseAtVerticality(v, measurements, anchor, yaw)","getPoseTargetsAtVerticality(v, measurements, anchor, yaw)","measureBodyVerticality(ragdoll)","getCachedSequence(id)","getSequenceDuration(sequence)","Constants","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"Human postural muscles do this automatically. ══════════════════════════════════════════════════════════════════════ Functions Load a single pose by id. Cached after first fetch. URL matches the BodyAssembler pattern ( ) since the server roots as . Load a sequence and pre load all poses referenced by its phases. Map gait phase (rad) to two adjacent walk cycle poses and blend factor. Linear blend of bone world positions (stand + walk cycle additive layer). 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. Parameters: (object) — pose JSON (st","contentHash":"60a87d597df06916643e5ec7453726392f06daf1fae994bb1325f685350d6d61"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BodyRhythms.md::0000","path":"engine/reference/assets/rig/active-body/BodyRhythms.md","title":"assets/rig/active-body/BodyRhythms.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BodyRhythms.js","updated":"","headings":["assets/rig/active-body/BodyRhythms.js","Functions","createRhythmState(rng = Math.random)","stepRhythms(state, dt, opts = {})","rhythmSample(state, rhythmIdx)","shatterRhythm(state, severity = 0.5, rng = Math.random)","restoreRhythm(state)","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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.","contentHash":"a0d40db9518f606f98f9f60c2f63a7e38bbdef0cbc952b8509be02671af37259"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BodyRhythms.md::0001","path":"engine/reference/assets/rig/active-body/BodyRhythms.md","title":"assets/rig/active-body/BodyRhythms.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BodyRhythms.js","updated":"","headings":["assets/rig/active-body/BodyRhythms.js","Functions","createRhythmState(rng = Math.random)","stepRhythms(state, dt, opts = {})","rhythmSample(state, rhythmIdx)","shatterRhythm(state, severity = 0.5, rng = Math.random)","restoreRhythm(state)","Constants","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"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. Functions 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). 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 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π). Desynchronize rhythms (simulate arrhythmia / panic breakdown). Adds random noise to phases and reduces coupling strength. Re establish healthy coupling after disruption (recovery). Constants Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet.","contentHash":"c4a3968f1d06369a9763855e0be2e110a6367fc0be0ebc74dbe781e998cf35b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BodyRhythms.md::0002","path":"engine/reference/assets/rig/active-body/BodyRhythms.md","title":"assets/rig/active-body/BodyRhythms.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BodyRhythms.js","updated":"","headings":["assets/rig/active-body/BodyRhythms.js","Functions","createRhythmState(rng = Math.random)","stepRhythms(state, dt, opts = {})","rhythmSample(state, rhythmIdx)","shatterRhythm(state, severity = 0.5, rng = Math.random)","restoreRhythm(state)","Constants","Re-exports","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"strength. Re establish healthy coupling after disruption (recovery). Constants Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3fd6a69a8ee84f1de705f2d7ebaa71c5dc56075a194a2c67da0d510551f9898"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BodySpecValidator.md::0000","path":"engine/reference/assets/rig/active-body/BodySpecValidator.md","title":"assets/rig/active-body/BodySpecValidator.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BodySpecValidator.js","updated":"","headings":["assets/rig/active-body/BodySpecValidator.js","Functions","validateBodyTemplate(template)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/BrainProfile.md::0000","path":"engine/reference/assets/rig/active-body/BrainProfile.md","title":"assets/rig/active-body/BrainProfile.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/BrainProfile.js","updated":"","headings":["assets/rig/active-body/BrainProfile.js","Functions","createHumanoidBrainProfile(entityId, options = {})","neuralTierAuthorityCap(tier)","estimateNeuralMotorTrust(motor, options = {})","getBrainReadback(entry)","getAnatomyReadback(entry)","applyBodySpecMetadata(entry, bodySpec)","ensureBrainLoaded(entry)","defaultMotorProfileKey(entityId, preset, tier)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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(). Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"302138a5279c6c5ee269a6a385210dfbd305f77feb7bba49150bba26a2d61442"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/ContactTelemetry.md::0000","path":"engine/reference/assets/rig/active-body/ContactTelemetry.md","title":"assets/rig/active-body/ContactTelemetry.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/ContactTelemetry.js","updated":"","headings":["assets/rig/active-body/ContactTelemetry.js","Functions","enforceGroundContact(ragdoll, groundY, dt = 1/60, sensors = null)","clampSurfaceFriction(value)","buildContactTelemetry(entry, groundY = 0, sensors = null)","buildAnimalContactTelemetry(entry, groundY = 0, sensors = null)","buildBoneContactRecord(entry, spec, p, groundY, sensors)","buildSensorAnchorTelemetry(entry, groundY = 0, sensors = null)","buildSensorAnchorRecord(entry, anchor, groundY, sensors)","approximateSensorAnchorPoint(entry, anchor, driver, reference = null)","makeSensorAnchorBasis(entry, anchor, driver, reference = null)","isFootAnchor(anchor)","isHandAnchor(anchor)","anchorContactPatch(anchor)","readContactSurface(sensors, x, z)","buildFootContactDerived(entry, side, record)","copyContactTelemetry(contactTelemetry)","copySensorAnchorTelemetry(sensorAnchors)","copyContactRecord(record)","makeContactOverlay(contactTelemetry)","makeContactFootOverlay(record)","contactOverlayColor(record)","logContactTrace(entry)","formatFootContactTrace(record)","scaledAnimalContactWindow(entry, base)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c56063eddd75d77d92f7ddd5d453f5740e405c438a8f92d1aa95374e033fe740"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/DebugOverlay.md::0000","path":"engine/reference/assets/rig/active-body/DebugOverlay.md","title":"assets/rig/active-body/DebugOverlay.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/DebugOverlay.js","updated":"","headings":["assets/rig/active-body/DebugOverlay.js","Functions","makeOverlayToggleMap(source = null, fallback = DEFAULTACTIVEBODYOVERLAYTOGGLES)","resolveOverlayToggle(value, fallback)","makeComOverlay(balance)","makeSupportOverlay(entry)","getSupportFootBoneIds(entry)","makeFatigueOverlay(entry)","makeOrganStatusOverlay(entry)","makePoseTargetOverlay(entry)","makeJointErrorOverlay(entry)","copyRotationTargetSummary(rotationTargets)","copyRotationResidualSummary(residuals)","copyReflexState(reflexState)","copyMotorAuthorityMap(map)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4e5d9e850b662eb3b3acee74f54d5d061fb5ef5d50d4f36ef8f1e80d924bf337"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/DirectionDiagnostics.md::0000","path":"engine/reference/assets/rig/active-body/DirectionDiagnostics.md","title":"assets/rig/active-body/DirectionDiagnostics.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/DirectionDiagnostics.js","updated":"","headings":["assets/rig/active-body/DirectionDiagnostics.js","Functions","updateDirectionMotion(entry, dt)","buildDirectionDiagnostics(entry)","resolveIntentDirection(entry, pelvis)","normalize2(v)","dot2(a, b)","classifyDirectionStatus(intentDotVelocity, speed)","boneNameForParticle(ragdoll, particle)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"61eea233b4c000e74f35c8690767e96e4ad7dbb98dd654290a133d6f9509d7fe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/MotionPriorTraining.md::0000","path":"engine/reference/assets/rig/active-body/MotionPriorTraining.md","title":"assets/rig/active-body/MotionPriorTraining.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/MotionPriorTraining.js","updated":"","headings":["assets/rig/active-body/MotionPriorTraining.js","Functions","createAniMotionPriorState()","getAniMotionPriorReport(state)","async loadAniMotionPrior(state, options = {})","mixAniMotionTeacher(teacher, state, entry, ragdoll, bonesByName, intent = null, options = {})","normalizeAniMotionIndexEnvelope(input)","createAi4AnimationMotionClipFromJson(json, fileName)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/NeuralMotor.md::0000","path":"engine/reference/assets/rig/active-body/NeuralMotor.md","title":"assets/rig/active-body/NeuralMotor.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/NeuralMotor.js","updated":"","headings":["assets/rig/active-body/NeuralMotor.js","Functions","tierFromIntelligence(score, magical = false)","nextTier(currentTier)","createNeuralMotor(tier = DEFAULTTIER, seedSource = null)","buildObservation(ragdoll, bonesByName, currentV, targetV, intent = null, rhythms = null, sensors = null)","neuralMotorForward(motor, obs, time = 0, options = null)","getNeuralInferenceBackendReport(bodyCount = 0, gpu = null)","computeReward(ragdoll, bonesByName, poseTargets, intent)","trainNeuralMotor(motor, obs, teacherOffsets, reward = null, opts = {})","getNeuralMotorDebugReport(motor)","applyNeuralOffsets(offsets, targets)","computeTeacherSignal(kinematicTargets, ragdoll, bonesByName, rate = 0.15)","serializeMotor(motor)","deserializeMotor(motor, data, options = {})","analyzeMotorStorage(motor, packedBytes = null)","async saveBrain(id, motor)","async loadBrain(id)","async deleteBrain(id)","async listBrains()","exportBrainAsJson(motor)","async exportBrainAsCompressedJson(motor)","importBrainFromJson(motor, jsonStr)","async importBrainFromJsonAsync(motor, jsonStr)","upgradeBrain(motor, newTier)","getUpgradeOptions(currentTier)","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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","contentHash":"810eb8996eadd8181edb2a79790d3fa4bc52a387f3c5931b377ff08aa6a18c0d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/NeuralMotor.md::0001","path":"engine/reference/assets/rig/active-body/NeuralMotor.md","title":"assets/rig/active-body/NeuralMotor.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/NeuralMotor.js","updated":"","headings":["assets/rig/active-body/NeuralMotor.js","Functions","tierFromIntelligence(score, magical = false)","nextTier(currentTier)","createNeuralMotor(tier = DEFAULTTIER, seedSource = null)","buildObservation(ragdoll, bonesByName, currentV, targetV, intent = null, rhythms = null, sensors = null)","neuralMotorForward(motor, obs, time = 0, options = null)","getNeuralInferenceBackendReport(bodyCount = 0, gpu = null)","computeReward(ragdoll, bonesByName, poseTargets, intent)","trainNeuralMotor(motor, obs, teacherOffsets, reward = null, opts = {})","getNeuralMotorDebugReport(motor)","applyNeuralOffsets(offsets, targets)","computeTeacherSignal(kinematicTargets, ragdoll, bonesByName, rate = 0.15)","serializeMotor(motor)","deserializeMotor(motor, data, options = {})","analyzeMotorStorage(motor, packedBytes = null)","async saveBrain(id, motor)","async loadBrain(id)","async deleteBrain(id)","async listBrains()","exportBrainAsJson(motor)","async exportBrainAsCompressedJson(motor)","importBrainFromJson(motor, jsonStr)","async importBrainFromJsonAsync(motor, jsonStr)","upgradeBrain(motor, newTier)","getUpgradeOptions(currentTier)","Constants","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"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","contentHash":"e7d2411ad23b41c8c7b0eeae9d21ed9398dd45c91ddfe35674361ac69f00694a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/NeuralMotor.md::0002","path":"engine/reference/assets/rig/active-body/NeuralMotor.md","title":"assets/rig/active-body/NeuralMotor.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/NeuralMotor.js","updated":"","headings":["assets/rig/active-body/NeuralMotor.js","Functions","tierFromIntelligence(score, magical = false)","nextTier(currentTier)","createNeuralMotor(tier = DEFAULTTIER, seedSource = null)","buildObservation(ragdoll, bonesByName, currentV, targetV, intent = null, rhythms = null, sensors = null)","neuralMotorForward(motor, obs, time = 0, options = null)","getNeuralInferenceBackendReport(bodyCount = 0, gpu = null)","computeReward(ragdoll, bonesByName, poseTargets, intent)","trainNeuralMotor(motor, obs, teacherOffsets, reward = null, opts = {})","getNeuralMotorDebugReport(motor)","applyNeuralOffsets(offsets, targets)","computeTeacherSignal(kinematicTargets, ragdoll, bonesByName, rate = 0.15)","serializeMotor(motor)","deserializeMotor(motor, data, options = {})","analyzeMotorStorage(motor, packedBytes = null)","async saveBrain(id, motor)","async loadBrain(id)","async deleteBrain(id)","async listBrains()","exportBrainAsJson(motor)","async exportBrainAsCompressedJson(motor)","importBrainFromJson(motor, jsonStr)","async importBrainFromJsonAsync(motor, jsonStr)","upgradeBrain(motor, newTier)","getUpgradeOptions(currentTier)","Constants","Re-exports","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"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). Functions Map an intelligence score to","contentHash":"73aaf6eca81582abf7bf0d3e6ac48080657feb3f77a2fa2b2b9740d849847144"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/NeuralResidualController.md::0000","path":"engine/reference/assets/rig/active-body/NeuralResidualController.md","title":"assets/rig/active-body/NeuralResidualController.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/NeuralResidualController.js","updated":"","headings":["assets/rig/active-body/NeuralResidualController.js","Functions","dampIdleNeuralOffsets(offsets)","extractRotationTargets(poseTargets)","computeNeuralRotationResidualHints(rotationTargets, poseState, neuralOffsets = null, weight = 1)","neuralOffsetToAxisAngle(neuralOffsets, boneId, weight = 1)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"3bb660372dc8f735161f56c6780203c5cd8ff075a538a6ccff78f715fb8e7fc1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/NeuroModifiers.md::0000","path":"engine/reference/assets/rig/active-body/NeuroModifiers.md","title":"assets/rig/active-body/NeuroModifiers.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/NeuroModifiers.js","updated":"","headings":["assets/rig/active-body/NeuroModifiers.js","Functions","applyNeuroProfile(motor, profileName)","rampNeuroProfile(motor, profileName, t)","clearNeuroModifiers(motor)","applyNeuroJerks(ragdoll, motor, time, dt)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NeuroModifiers — preset effect profiles that corrupt the NeuralMotor's forward pass to produce realistic neurological symptoms. Each profile mutates the 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 Functions Apply a preset profile to a NeuralMotor (replaces current modifiers). Blend toward a profile over time — e.g. poison progression. ∈ [0,1] is how far along the progression is. Reset all neuromodifiers to healthy. Apply neuromodifier effects DIRECTLY to the ragdoll bones, bypassing the NN. Needed because the NN only runs during 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. Constants — NeuroModifiers — preset effect profiles that corrupt the NeuralMotor's forward pass to produce realistic neurological symptoms. Each profile","contentHash":"e9ac31948c0234574f4dbb62d2cde02694c5cee7b8f92a95ca1b31a15a8314de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/NeuroModifiers.md::0001","path":"engine/reference/assets/rig/active-body/NeuroModifiers.md","title":"assets/rig/active-body/NeuroModifiers.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/NeuroModifiers.js","updated":"","headings":["assets/rig/active-body/NeuroModifiers.js","Functions","applyNeuroProfile(motor, profileName)","rampNeuroProfile(motor, profileName, t)","clearNeuroModifiers(motor)","applyNeuroJerks(ragdoll, motor, time, dt)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"loop. Constants — NeuroModifiers — preset effect profiles that corrupt the NeuralMotor's forward pass to produce realistic neurological symptoms. Each profile mutates the 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 <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ca9731583b682376dabcd65c7d56439870df2eaebfd17b18cf71c290527df740"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/OrientationAudit.md::0000","path":"engine/reference/assets/rig/active-body/OrientationAudit.md","title":"assets/rig/active-body/OrientationAudit.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/OrientationAudit.js","updated":"","headings":["assets/rig/active-body/OrientationAudit.js","Functions","logLocomotionTargetTrace(entry, ragdoll, targets, meta)","logOrientationAudit(entry, ragdoll)","logFinalDirectionAudit(entry)","lHandDelta(yaw, bfX, bfZ)","auditAllPoses()","auditPose(pose)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5ac64294b1c5ae276715b9373e647c1ca0063641d33c6429720a1a91fd986a63"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/PhysicsMotor.md::0000","path":"engine/reference/assets/rig/active-body/PhysicsMotor.md","title":"assets/rig/active-body/PhysicsMotor.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/PhysicsMotor.js","updated":"","headings":["assets/rig/active-body/PhysicsMotor.js","Functions","buildWalkingSkeleton(anchor, nav, m)","setRagdollPose(ragdoll, anchor, m, options = {})","currentPelvisPosition(ragdoll)","applyPelvisAnchor(ragdoll, skeleton, dt)","applyJointTorques(ragdoll, skeleton, dt, state, driveByBone = null)","computeHingeLimits(ragdoll, m, jointLimitsByBone = null)","applyHingeLimits(limits)","complianceStrength(jointLimitsByBone)","complianceStrengthFor(jointLimitsByBone, names, fallback = 1)","jointSwingScaleFor(jointLimitsByBone, names, defaultSwingDeg)","jointTwistScaleFor(jointLimitsByBone, names, defaultTwistDeg)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"82f780d04cb799de7f69512cfa1785fd5070e0c489e372dbae9ec3c8ce6ec4b2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/PoseAuthority.md::0000","path":"engine/reference/assets/rig/active-body/PoseAuthority.md","title":"assets/rig/active-body/PoseAuthority.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/PoseAuthority.js","updated":"","headings":["assets/rig/active-body/PoseAuthority.js","Functions","coupleShoulderGirdleTargets(entry, ragdoll, targets, yaw)","getBodySideAxis(entry, ragdoll, yaw = null, preferYaw = false)","clampTargetToSide(targets, name, base, side, minSide, isLeft, strength = 1)","alignFootToeTargets(entry, targets, yaw, leftLegIsSwing = false, rightLegIsSwing = false, isWalking = false)","clampLimbSideTargets(entry, ragdoll, targets, yaw = null)","stabilizeLimbSideFrame(entry, ragdoll, dt)","stabilizeShoulderGirdleFrame(entry, ragdoll)","dampRelativeVelocity(child, parent, keep, dt)","stabilizeHeadNeckFrame(entry, ragdoll, dt)","hasActiveMoveIntent(entry)","applyGroundedNoIntentSettleBrake(entry, ragdoll, dt)","applyBalanceCorrectionToTargets(targets, balanceState, weight = 1)","applyRhythmPoseModulation(targets, rhythms, weight = 1, fatigue = 0)","makeReflexState()","applyContactReflexTargets(entry, ragdoll, targets, options = {})","classifyReflexMode(entry, options)","reflexConfidence(contactTelemetry, mode, leftTrust, rightTrust)","buildMotorAuthorityMap(entry, contactTelemetry)","applyFootReflexTarget(entry, targets, record, options)","applyBraceProtectionTargets(contactTelemetry, targets, options)","resolveActivePoseState(entry)","makePoseStateMeta(stateId)","applyStandingController(ragdoll, entry, dt)","bonesByName(ragdoll)","applyGetupController(ragdoll, entry, dt)","getBoneRadius(boneId, m)","stateToString(state)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7ad898c7cad270a2cba1e5430e0233703a3ae4d6ab79f42d18077947b3650f07"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/UniversalLegScheduler.md::0000","path":"engine/reference/assets/rig/active-body/UniversalLegScheduler.md","title":"assets/rig/active-body/UniversalLegScheduler.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/UniversalLegScheduler.js","updated":"","headings":["assets/rig/active-body/UniversalLegScheduler.js","Functions","makeUniversalLegSchedulerReadback(entry, contactTelemetry)","discoverUniversalLegs(entry)","normalizeUniversalLegDescriptors(descriptors, entry, allowMetadataOnly = true)","defaultUniversalLegRhythmIndex(descriptor)","makeUniversalLegReadback(entry, leg, contactTelemetry)","makeUniversalSupportAnalysis(entry, legs)","universalLegState(contact, swingAmount)","getUniversalLegPhase(entry, leg)","supportModeFor(pointCount, legCount)","supportComMargin(com, points)","recoveryDirection(com, center)","signedPolygonMargin2D(point, polygon)","pointInPolygon2D(point, polygon)","distancePointToSegment2D(point, a, b)","distance2D(a, b)","particlePoint(entry, boneName)","hasBone(entry, boneName)","recommendUniversalGaitPreset(entry, legCount)","copyUniversalGaitPresets(legCount)","copyUniversalGaitPresetMap()","makeGenericOddLegWavePreset(legCount)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"940e43c5ebaa601bc006005b095c5d164182501ba2f7ef924974a40aef568b97"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/BioelectricSignals.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/BioelectricSignals.md","title":"assets/rig/active-body/anatomy/BioelectricSignals.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/BioelectricSignals.js","updated":"","headings":["assets/rig/active-body/anatomy/BioelectricSignals.js","Functions","createBioelectricSignalState()","stepBioelectricSignals(state, inputs = {}, dt = 0)","getBioelectricSignalReadback(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/BreathingBodyCoupling.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/BreathingBodyCoupling.md","title":"assets/rig/active-body/anatomy/BreathingBodyCoupling.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/BreathingBodyCoupling.js","updated":"","headings":["assets/rig/active-body/anatomy/BreathingBodyCoupling.js","Functions","getBreathingBodyCouplingReadback(diaphragm = null, rhythms = null)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/CirculatorySystem.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/CirculatorySystem.md","title":"assets/rig/active-body/anatomy/CirculatorySystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/CirculatorySystem.js","updated":"","headings":["assets/rig/active-body/anatomy/CirculatorySystem.js","Functions","createCirculatoryState()","stepCirculation(state, inputs = {}, dt = 0)","getCirculatoryReadback(state)","getCirculationGraphReadback(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/DiaphragmSystem.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/DiaphragmSystem.md","title":"assets/rig/active-body/anatomy/DiaphragmSystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/DiaphragmSystem.js","updated":"","headings":["assets/rig/active-body/anatomy/DiaphragmSystem.js","Functions","createDiaphragmState(anatomy = null)","stepDiaphragm(state, rhythms = null, dt = 0)","getDiaphragmReadback(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/NervousSystem.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/NervousSystem.md","title":"assets/rig/active-body/anatomy/NervousSystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/NervousSystem.js","updated":"","headings":["assets/rig/active-body/anatomy/NervousSystem.js","Functions","createNervousSystemState()","stepNervousSystem(state, inputs = {}, dt = 0)","getNervousSystemReadback(state)","getNerveGraphReadback(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/OrganDamageSystem.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/OrganDamageSystem.md","title":"assets/rig/active-body/anatomy/OrganDamageSystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/OrganDamageSystem.js","updated":"","headings":["assets/rig/active-body/anatomy/OrganDamageSystem.js","Functions","createOrganDamageState()","applyOrganDamage(state, organs, target, amount, options = {})","stepOrganDamage(state, organs, inputs = {}, dt = 0)","getOrganDamageReadback(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/OrganSystem.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/OrganSystem.md","title":"assets/rig/active-body/anatomy/OrganSystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/OrganSystem.js","updated":"","headings":["assets/rig/active-body/anatomy/OrganSystem.js","Functions","createOrganState(anatomy = null, attachments = null)","getOrganReadback(organs)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/PBPKSystem.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/PBPKSystem.md","title":"assets/rig/active-body/anatomy/PBPKSystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/PBPKSystem.js","updated":"","headings":["assets/rig/active-body/anatomy/PBPKSystem.js","Functions","createPBPKState()","addPBPKDose(state, substanceId, amount, options = {})","stepPBPK(state, inputs = {}, dt = 0)","getPBPKReadback(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/SoftTissueSystem.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/SoftTissueSystem.md","title":"assets/rig/active-body/anatomy/SoftTissueSystem.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/SoftTissueSystem.js","updated":"","headings":["assets/rig/active-body/anatomy/SoftTissueSystem.js","Functions","createSoftTissueState(anatomy = null)","stepSoftTissue(state, inputs = {}, dt = 0)","getSoftTissueReadback(state)","sampleSoftTissueBoneMotion(ragdoll = null)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/VitalSigns.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/VitalSigns.md","title":"assets/rig/active-body/anatomy/VitalSigns.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/VitalSigns.js","updated":"","headings":["assets/rig/active-body/anatomy/VitalSigns.js","Functions","createVitalSignsState()","stepVitalSigns(state, inputs = {}, dt = 0)","getVitalSignsReadback(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/active-body/anatomy/index.md::0000","path":"engine/reference/assets/rig/active-body/anatomy/index.md","title":"assets/rig/active-body/anatomy/index.js","description":"","kind":"reference","source":"engine/assets/rig/active-body/anatomy/index.js","updated":"","headings":["assets/rig/active-body/anatomy/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/assets/rig/active body/anatomy/index.js — anatomy subsystem barrel. Every other subsystem in the engine exposes a barrel ( , , ); 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: per organ integrity, perfusion, oxygenation, function wounds by mechanism, bleeding, hypoxia, shock cardiac output, per limb and per organ blood flow spinal cord, 16 peripheral regions, motor authority, and per region motor/sensory/touch/pain channels heart rate, respiration, blood pressure, SpO2 breathing drive and rib/sternum coupling breathing translated into bone pose offsets mass spring tissue displacement and strain multi compartment pharmacokinetics for any substance low level signal propagation Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d75e7ba656d2595b05facd97e662a9d616a41d1af8d8d70a11e581ea422e63fd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/rig/index.md::0000","path":"engine/reference/assets/rig/index.md","title":"assets/rig/index.js","description":"","kind":"reference","source":"engine/assets/rig/index.js","updated":"","headings":["assets/rig/index.js","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fcb521958f690ab56c25c0aef6bda58ccf5742373a6e3857fdb818f69e69fc23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vehicle/ChassisDetector.md::0000","path":"engine/reference/assets/vehicle/ChassisDetector.md","title":"assets/vehicle/ChassisDetector.js","description":"","kind":"reference","source":"engine/assets/vehicle/ChassisDetector.js","updated":"","headings":["assets/vehicle/ChassisDetector.js","Functions","detectChassis(model, wheelNodeIds = [])","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Identify chassis + body part nodes, excluding the given wheel node ids. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0265d2f100aa3dbf2f69038d1c35b2f53e1338707a00ab61787d0785201eb4bd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vehicle/VehicleMath.md::0000","path":"engine/reference/assets/vehicle/VehicleMath.md","title":"assets/vehicle/VehicleMath.js","description":"","kind":"reference","source":"engine/assets/vehicle/VehicleMath.js","updated":"","headings":["assets/vehicle/VehicleMath.js","Functions","identity()","multiply(a, b)","composeTRS(t = [0, 0, 0], q = [0, 0, 0, 1], s = 1)","quatFromAxisAngle(axis, angle)","quatMul(a, b)","transformPoint(m, p)","nodeLocalMatrix(node)","computeWorldMatrices(model)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Column major multiply: out = a b. Compose a TRS matrix (scale may be a number or [x,y,z]). Quaternion (xyzw) from an axis + angle (radians). Hamilton product a b (xyzw). Transform a point (vec3) by a column major 4x4. Local transform of a node (matrix override or TRS). World matrices for every node, accumulating the parent chain. Returns a Map(nodeId → Float32Array(16)). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5a7fde89a781c3b910f5b82d1e3b3517b268907c33410fdfc9c55513c5ab6374"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vehicle/VehicleRigBuilder.md::0000","path":"engine/reference/assets/vehicle/VehicleRigBuilder.md","title":"assets/vehicle/VehicleRigBuilder.js","description":"","kind":"reference","source":"engine/assets/vehicle/VehicleRigBuilder.js","updated":"","headings":["assets/vehicle/VehicleRigBuilder.js","Functions","buildVehicleRig(model, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Build a vehicle rig for a model and attach it at model.rigs.vehicle. Parameters: (object) — EngineModel (object) — { drivetrain, massKg, physicsMode } Returns: the VehicleAsset <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f575c4a703352fbceea8f9aa18d4546d3c48a2bf4ee26aa07b7ba565cab0e8d2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vehicle/WheelDetector.md::0000","path":"engine/reference/assets/vehicle/WheelDetector.md","title":"assets/vehicle/WheelDetector.js","description":"","kind":"reference","source":"engine/assets/vehicle/WheelDetector.js","updated":"","headings":["assets/vehicle/WheelDetector.js","Functions","detectWheels(model, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Detect wheel candidates in a model. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fab5c8755695f49767d737b4c3084cbf82528204174ef99052c5660327d8e97b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vehicle/WheelPhysics.md::0000","path":"engine/reference/assets/vehicle/WheelPhysics.md","title":"assets/vehicle/WheelPhysics.js","description":"","kind":"reference","source":"engine/assets/vehicle/WheelPhysics.js","updated":"","headings":["assets/vehicle/WheelPhysics.js","Functions","suspensionForce({ restLength, currentLength, stiffness, damping, compressionVelocity = 0 })","tireForce(slip, normalLoad, grip, slipStiffness = 12)","longitudinalSlip(wheelAngularVel, radius, groundSpeed)","freeRollAngularVelocity(groundSpeed, radius)","visualWheelMatrix(chassisWorld, slot, state = {})","advanceSpin(spinAngle, groundSpeed, radius, dt)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Suspension spring + damper force. compression = restLength currentLength springForce = stiffness compression damperForce = damping compressionVelocity normalLoad = max(0, springForce + damperForce) Returns: } A slip based tire force (Pacejka lite): linear near zero slip, saturating at the friction limit . shapes the knee. Longitudinal slip ratio from wheel surface speed vs ground speed. Free rolling angular velocity (rad/s) for a given ground speed. Compose the visual world matrix for a wheel from chassis world + slot + state. Parameters: (Float32Array) — column major 4x4 (object) — WheelSlot (object) — { suspensionOffset, steerAngle, spinAngle } Returns: column major 4x4 Advance a wheel's spin angle from a ground speed (visual integration). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9d4a6b94736533714aedca483952360490b552d20c4ff8f33fe485fb9cddcf75"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vehicle/WheelSlot.md::0000","path":"engine/reference/assets/vehicle/WheelSlot.md","title":"assets/vehicle/WheelSlot.js","description":"","kind":"reference","source":"engine/assets/vehicle/WheelSlot.js","updated":"","headings":["assets/vehicle/WheelSlot.js","Functions","createWheelSlot(init = {})","createSuspension(init = {})","createTireProfile(init = {})","createVehicleAsset(init = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions A wheel slot: the runtime data for one wheel, decoupled from its visual mesh. 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. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fa0b5a5ca1937fc57d2df0e25e30720ed4684e6445e0446d1ccecb40e86372af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vehicle/WheelSpinVisual.md::0000","path":"engine/reference/assets/vehicle/WheelSpinVisual.md","title":"assets/vehicle/WheelSpinVisual.js","description":"","kind":"reference","source":"engine/assets/vehicle/WheelSpinVisual.js","updated":"","headings":["assets/vehicle/WheelSpinVisual.js","Functions","rotAxis(axis, angle)","pivotSpin(pivot, axis, angle)","buildWheelSpinMap(model, importMatrix, rig)","rollAngle(distance, radius)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 / Godot ): the spin is built in the wheel's MESH LOCAL space from the detector's per wheel hub ( ) and axle ( ), then the node hierarchy + import correction carry it to the right world position and orientation automatically (the renderer does ). 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. Functions Column major rotation about an arbitrary (unit normalized) axis. Spin about an axis through a pivot: T(pivot) · R(axis,angle) · T( pivot). 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: ). 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. Parameters: (object) — EngineModel (must be detected/rigged) (Float32Array) — model importTransform matrix (local→world correction) (object) — VehicleAsset (model.rigs.vehicle) with wheelSlots Returns: } keyed by visualNode id Spin angle (radians) for a wheel that has rolled metres. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference","contentHash":"96581b5d9be4f0f7a940c50b5bed37679662dfd1cf3e6f6b72b3e350f9845cee"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vehicle/WheelSpinVisual.md::0001","path":"engine/reference/assets/vehicle/WheelSpinVisual.md","title":"assets/vehicle/WheelSpinVisual.js","description":"","kind":"reference","source":"engine/assets/vehicle/WheelSpinVisual.js","updated":"","headings":["assets/vehicle/WheelSpinVisual.js","Functions","rotAxis(axis, angle)","pivotSpin(pivot, axis, angle)","buildWheelSpinMap(model, importMatrix, rig)","rollAngle(distance, radius)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"for a wheel that has rolled metres. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c44ee5338c6640ffe9fb9eed9a8cc97f7f4e2275161b1bea322f9932d3dd2a43"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/vpath.md::0000","path":"engine/reference/assets/vpath.md","title":"assets/vpath.js","description":"","kind":"reference","source":"engine/assets/vpath.js","updated":"","headings":["assets/vpath.js","Functions","parseVPath(vpath)","isVPath(vpath)","makeVPath(scheme, ...parts)","normalizeSegments(path)","withScheme(vpath, scheme)","vpathBasename(vpath)","vpathExtension(vpath)","cachePathFor(kind, sourceHash, ext)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Parse a virtual path into { scheme, path, segments }. Parameters: (string) — No description in source JSDoc. Returns: null} null if malformed Build a virtual path from a scheme + path parts. Collapse duplicate/empty separators and strip leading/trailing slashes. Swap the scheme of a virtual path, keeping the same path (e.g. for backups). The basename (last segment) and extension of a virtual path. Standard cache path for a converted artifact, keyed by content hash. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7897da3139f95f94f26f9c9b21c098d65675f3cbe14751e440b32adecd5b02ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/weapon/WeaponRig.md::0000","path":"engine/reference/assets/weapon/WeaponRig.md","title":"assets/weapon/WeaponRig.js","description":"","kind":"reference","source":"engine/assets/weapon/WeaponRig.js","updated":"","headings":["assets/weapon/WeaponRig.js","Functions","createWeaponRig(init = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a weapon rig descriptor. Parameters: (object) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"66cfc11f6ca5737b72ac503650f36f7f6ba10782c38a12b1af2227f99c533238"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/weapon/WeaponRigBuilder.md::0000","path":"engine/reference/assets/weapon/WeaponRigBuilder.md","title":"assets/weapon/WeaponRigBuilder.js","description":"","kind":"reference","source":"engine/assets/weapon/WeaponRigBuilder.js","updated":"","headings":["assets/weapon/WeaponRigBuilder.js","Functions","buildWeaponRig(model, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build a weapon rig and attach it at model.rigs.weapon. Parameters: (object) — EngineModel (object) — No description in source JSDoc. Returns: the WeaponRig <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"18c374ea49533d852487e7ac676199d0b0b0665df554ff404925a624c6d7de93"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/weapon/WeaponSocketDetector.md::0000","path":"engine/reference/assets/weapon/WeaponSocketDetector.md","title":"assets/weapon/WeaponSocketDetector.js","description":"","kind":"reference","source":"engine/assets/weapon/WeaponSocketDetector.js","updated":"","headings":["assets/weapon/WeaponSocketDetector.js","Functions","detectWeapon(model)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Detect weapon sockets, moving parts, forward axis, and muzzle. Parameters: (object) — EngineModel Returns: detection result <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"943d5e3008a10a0432c6f2c12e4309df1f7c690d442716e3bfc1a34a93e2e141"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/weapon/WeaponStateMachine.md::0000","path":"engine/reference/assets/weapon/WeaponStateMachine.md","title":"assets/weapon/WeaponStateMachine.js","description":"","kind":"reference","source":"engine/assets/weapon/WeaponStateMachine.js","updated":"","headings":["assets/weapon/WeaponStateMachine.js","Functions","createWeaponStateMachine(init = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Parameters: (object) — { capacity, ammo, chambered, fireMode } Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"221a04726fb240183e1ffd295d6058eed4e5a8bbd9647d2d7bc546bf82528219"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/assets/weapon/WeaponTimeline.md::0000","path":"engine/reference/assets/weapon/WeaponTimeline.md","title":"assets/weapon/WeaponTimeline.js","description":"","kind":"reference","source":"engine/assets/weapon/WeaponTimeline.js","updated":"","headings":["assets/weapon/WeaponTimeline.js","Functions","createWeaponAction(init = {})","defaultFireAction(duration = 0.12)","defaultReloadAction(duration = 2.0)","eventsBetween(action, t0, t1)","createTimelinePlayer(action)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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; 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. Functions Create a single action timeline (e.g. one shot, or a reload). Parameters: (object) — { name, duration, events:[{t,type,payload?}] } A default semi auto fire action (normalized 0..duration seconds). A default reload action. Events whose time t lies in (t0, t1]. Use with an advancing playhead so each event fires exactly once regardless of frame rate. A small play once cursor over an action. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5e8555fc416f9f7ae2da1c120e3d8a5d9332ba88407597eed24bac7b1e1b9ac8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/SpatialAudioEnvironment.md::0000","path":"engine/reference/audio/SpatialAudioEnvironment.md","title":"audio/SpatialAudioEnvironment.js","description":"","kind":"reference","source":"engine/audio/SpatialAudioEnvironment.js","updated":"","headings":["audio/SpatialAudioEnvironment.js","Functions","createSpatialEnvironment(ctx, config = {})","setEnvironmentRaycast(env, fn)","setEntityMaterialLookup(env, fn)","setWaterSurfaceY(env, y)","updateEnvironment(env, listenerPos, listenerFwd)","computeOcclusion(env, srcPos)","computeDiffraction(env, srcPos)","computeFullOcclusion(env, srcPos)","getEnvironmentIR(env, zoneName)","connectToBridge(env, bridge)","getMaterialAbsorption(materialKey)","getEnvironmentPresets()","forceEnvironmentZone(env, zoneName)","getEnvironmentStats(env)","destroySpatialEnvironment(env)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create the spatial audio environment system. Attaches to an existing AudioContext and provides environment processing. Parameters: (AudioContext) — The Web Audio API context (Object) — Configuration options Returns: The environment system handle 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 Set the entity material lookup function. Function signature: (entityId) = 'stone' 'wood' 'metal' etc. Set the water surface Y level. Listener below this = underwater. Pass null to disable underwater detection. Update the environment system each frame. Detects environment zone, updates ground reflection, handles underwater. Parameters: (Object) — The environment system (Array) — [x, y, z] listener position (Array) — [x, y, z] listener forward direction Compute material aware occlusion between a source and the listener. Returns { factor: 0 1, lpfMult: 0 1 } where factor affects volume,","contentHash":"c24471baed3877971430afcb035b1cfaee862a7035a5e9393936f1f5bdc2e7d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/SpatialAudioEnvironment.md::0001","path":"engine/reference/audio/SpatialAudioEnvironment.md","title":"audio/SpatialAudioEnvironment.js","description":"","kind":"reference","source":"engine/audio/SpatialAudioEnvironment.js","updated":"","headings":["audio/SpatialAudioEnvironment.js","Functions","createSpatialEnvironment(ctx, config = {})","setEnvironmentRaycast(env, fn)","setEntityMaterialLookup(env, fn)","setWaterSurfaceY(env, y)","updateEnvironment(env, listenerPos, listenerFwd)","computeOcclusion(env, srcPos)","computeDiffraction(env, srcPos)","computeFullOcclusion(env, srcPos)","getEnvironmentIR(env, zoneName)","connectToBridge(env, bridge)","getMaterialAbsorption(materialKey)","getEnvironmentPresets()","forceEnvironmentZone(env, zoneName)","getEnvironmentStats(env)","destroySpatialEnvironment(env)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":3,"text":"forward direction 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). Parameters: (Object) — The environment system (Array) — [x, y, z] sound source position Returns: } 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). Parameters: (Object) — The environment system (Array) — [x, y, z] sound source position Returns: } 0=fully blocked, 1=clear Compute full spatial occlusion for a sound source. Combines material based occlusion with edge diffraction. Returns 0 1 where 0 = fully blocked, 1 = clear. Parameters: (Object) — The environment system (Array) — [x, y, z] sound source position Returns: Combined occlusion factor (0 1) Generate a procedural impulse response for a given environment. Cached per environment to avoid regeneration. Parameters: (Object) — The environment system (string) — Environment zone name Returns: The generated IR 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. Parameters: (Object) — The environment system (Object) — The audio bridge Get absorption data for a material key. Parameters: (string) — Material name (stone, wood, metal, etc.) Returns: } Get all available environment presets. Returns: Map of preset name → preset data Force a specific environment zone (overrides auto detection). Pass null to re enable auto detection. Get current","contentHash":"046ab211eef93631b19f83c552388b9d03c39237254904e5b240704699d41598"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/SpatialAudioEnvironment.md::0002","path":"engine/reference/audio/SpatialAudioEnvironment.md","title":"audio/SpatialAudioEnvironment.js","description":"","kind":"reference","source":"engine/audio/SpatialAudioEnvironment.js","updated":"","headings":["audio/SpatialAudioEnvironment.js","Functions","createSpatialEnvironment(ctx, config = {})","setEnvironmentRaycast(env, fn)","setEntityMaterialLookup(env, fn)","setWaterSurfaceY(env, y)","updateEnvironment(env, listenerPos, listenerFwd)","computeOcclusion(env, srcPos)","computeDiffraction(env, srcPos)","computeFullOcclusion(env, srcPos)","getEnvironmentIR(env, zoneName)","connectToBridge(env, bridge)","getMaterialAbsorption(materialKey)","getEnvironmentPresets()","forceEnvironmentZone(env, zoneName)","getEnvironmentStats(env)","destroySpatialEnvironment(env)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":2,"chunkCount":3,"text":"Returns: Map of preset name → preset data Force a specific environment zone (overrides auto detection). Pass null to re enable auto detection. Get current environment stats. Destroy the environment system and release all audio nodes. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a nod","contentHash":"8d146fa1e310ef2907eb6b82e6915ee7a67422daa1a36681955cb190ededfec0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/CharacterAudioBridge.md::0000","path":"engine/reference/audio/bridge/CharacterAudioBridge.md","title":"audio/bridge/CharacterAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/CharacterAudioBridge.js","updated":"","headings":["audio/bridge/CharacterAudioBridge.js","Functions","createCharacterAudioBridge(config = {})","tickCharacterAudio(bridge, audioEngine, entityId, state, dt)","removeCharacter(bridge, entityId)","destroyCharacterAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CharacterAudioBridge.js Character Movement → Audio Events Triggers footsteps, jumps, lands, and body foley based on character movement state (velocity, grounded, etc). Functions Create a character movement audio bridge. Parameters: (Object) — No description in source JSDoc. (number) — Seconds between footsteps when walking (default 0.45) (number) — Run cadence = walk cadence × this (default 0.65) (number) — Min m/s horizontal speed to trigger footsteps (default 0.8) (number) — Min m/s vertical speed to trigger land sound (default 2.0) (number) — m/s speed to consider \"running\" (default 3.5) (number) — Max distance from listener to play sounds (default 50) Tick the character audio bridge for a single character. Call once per frame per character entity. Parameters: (Object) — CharacterAudioBridge instance (Object) — AudioEngine instance (string number) — Unique character entity ID (Object) — Character state (number[]) — [x, y, z] world position (number[]) — [x, y, z] velocity in m/s (boolean) — Is character on ground (number string null) — Ground material ID or string (number) — Entity weight multiplier (default 1.0) (number) — Delta time in seconds Clean up character state when entity is destroyed. Parameters: (Object) — No description in source JSDoc. (string number) — No description in source JSDoc. Destroy the character audio bridge and clean up all state. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on","contentHash":"a6f9d2a080e6a7ae3f5e95e99e059815b837db7f188ea3491f3f35ed1cb68f67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/CharacterAudioBridge.md::0001","path":"engine/reference/audio/bridge/CharacterAudioBridge.md","title":"audio/bridge/CharacterAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/CharacterAudioBridge.js","updated":"","headings":["audio/bridge/CharacterAudioBridge.js","Functions","createCharacterAudioBridge(config = {})","tickCharacterAudio(bridge, audioEngine, entityId, state, dt)","removeCharacter(bridge, entityId)","destroyCharacterAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"3d539287725d219c297fc87ce33a34bdc33d24e2904250ab4b27ab0656f60830"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/DestructionAudioBridge.md::0000","path":"engine/reference/audio/bridge/DestructionAudioBridge.md","title":"audio/bridge/DestructionAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/DestructionAudioBridge.js","updated":"","headings":["audio/bridge/DestructionAudioBridge.js","Functions","createDestructionAudioBridge(config = {})","processDamageAudioEvent(bridge, event, currentTime)","processFractureAudioEvent(bridge, event, currentTime)","processSeismicAudioEvent(bridge, event, currentTime)","flushDestructionAudio(bridge)","setDestructionAudioListenerPos(bridge, pos)","destroyDestructionAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DestructionAudioBridge.js Destruction Events → Audio Hooks into VoronoiFracture, UnifiedDamageSystem, SeismicSystem, and ShockPropagation to trigger shattering, crumbling, rumble, and explosion sounds. Functions Create a destruction audio bridge. Parameters: (Object) — No description in source JSDoc. (number) — (default 4) (number) — Min seconds between same position triggers (default 0.2) (number) — (default 150) Process a damage event. Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. (string) — 'impact' 'explosion' 'erosion' 'pierce' 'crush' 'heat' 'acid' (number[]) — [x,y,z] (number) — Damage magnitude (0 100+) (string) — Material name hint (number) — No description in source JSDoc. Process a fracture event (Voronoi fracture). Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. (number[]) — No description in source JSDoc. (string) — 'glass' 'stone' 'wood' 'metal' (number) — Number of pieces (number) — No description in source JSDoc. Process a seismic event (earthquake rumble). Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. (number[]) — Epicenter (number) — Richter like scale (number) — No description in source JSDoc. Flush pending destruction audio events. Parameters: (Object) — No description in source JSDoc. Update listener position. Parameters: (Object) — No description in source JSDoc. (number[]) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects","contentHash":"129702576218c4a8742bb89706c926a18ab0179d818fe5cd9004302288dc270a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/DestructionAudioBridge.md::0001","path":"engine/reference/audio/bridge/DestructionAudioBridge.md","title":"audio/bridge/DestructionAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/DestructionAudioBridge.js","updated":"","headings":["audio/bridge/DestructionAudioBridge.js","Functions","createDestructionAudioBridge(config = {})","processDamageAudioEvent(bridge, event, currentTime)","processFractureAudioEvent(bridge, event, currentTime)","processSeismicAudioEvent(bridge, event, currentTime)","flushDestructionAudio(bridge)","setDestructionAudioListenerPos(bridge, pos)","destroyDestructionAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"4a66f63cb2f4f5d7d10e1fdda51977a43ce7c5ac5e931fd47ad94487215028d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/EmitterAmbientBridge.md::0000","path":"engine/reference/audio/bridge/EmitterAmbientBridge.md","title":"audio/bridge/EmitterAmbientBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/EmitterAmbientBridge.js","updated":"","headings":["audio/bridge/EmitterAmbientBridge.js","Functions","createEmitterAmbientBridge(config = {})","syncEmitterAmbients(bridge, emitters)","registerEmitterLoop(bridge, emitterId, sourceId, substanceId, position)","stopAllEmitterAmbients(bridge)","destroyEmitterAmbientBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create an emitter ambient bridge. Parameters: (Object) — No description in source JSDoc. (number) — Max simultaneous ambient loops (default 8) (number) — Fade in time in seconds (default 0.5) (number) — Fade out time in seconds (default 1.0) Sync active emitters with ambient audio loops. Call each frame with the current list of active emitters. Parameters: (Object) — No description in source JSDoc. (Object[]) — Array of active emitter objects Returns: Array of actions: { action: 'start' 'stop' 'update', ... } Register that a loop was started (store sourceId). Parameters: (Object) — No description in source JSDoc. (number string) — No description in source JSDoc. (number) — AudioEngine source ID (string) — No description in source JSDoc. (number[]) — No description in source JSDoc. Stop all active ambient loops. Parameters: (Object) — No description in source JSDoc. Returns: Stop actions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes","contentHash":"8cd21e348ee306ec5dc90e341228f2d3f9faf5075d2b3bef494598f710f77291"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/EmitterAmbientBridge.md::0001","path":"engine/reference/audio/bridge/EmitterAmbientBridge.md","title":"audio/bridge/EmitterAmbientBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/EmitterAmbientBridge.js","updated":"","headings":["audio/bridge/EmitterAmbientBridge.js","Functions","createEmitterAmbientBridge(config = {})","syncEmitterAmbients(bridge, emitters)","registerEmitterLoop(bridge, emitterId, sourceId, substanceId, position)","stopAllEmitterAmbients(bridge)","destroyEmitterAmbientBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"4468d5062ef32f34cec942a1252cb7a9a04eec777773fb49d3f7ab53d79503ed"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/FluidAudioBridge.md::0000","path":"engine/reference/audio/bridge/FluidAudioBridge.md","title":"audio/bridge/FluidAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/FluidAudioBridge.js","updated":"","headings":["audio/bridge/FluidAudioBridge.js","Functions","createFluidAudioBridge(config = {})","processFluidSplash(bridge, position, magnitude, currentTime)","processPhaseChangeAudio(bridge, phaseType, position, magnitude, currentTime)","flushFluidAudio(bridge)","setFluidAudioListenerPos(bridge, pos)","destroyFluidAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FluidAudioBridge.js Fluid Events → Audio Hooks into fluid simulation (splashes, phase changes) and triggers appropriate audio events. Functions Create a fluid audio bridge. Parameters: (Object) — No description in source JSDoc. (number) — (default 4) (number) — (default 0.1) (number) — (default 100) Process a fluid splash event. Parameters: (Object) — No description in source JSDoc. (number[]) — [x,y,z] (number) — Splash intensity (0 1+) (number) — No description in source JSDoc. Process a phase change event. Parameters: (Object) — No description in source JSDoc. (string) — 'freeze' 'melt' 'boil' 'crystallize' (number[]) — [x,y,z] (number) — Intensity (number) — No description in source JSDoc. Flush pending fluid audio events. Parameters: (Object) — No description in source JSDoc. Update listener position. Parameters: (Object) — No description in source JSDoc. (number[]) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain","contentHash":"09147034b566127bbfdb71c2deb2fc914071220281b2b9c15afe7fc6c11b0f2c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/FluidAudioBridge.md::0001","path":"engine/reference/audio/bridge/FluidAudioBridge.md","title":"audio/bridge/FluidAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/FluidAudioBridge.js","updated":"","headings":["audio/bridge/FluidAudioBridge.js","Functions","createFluidAudioBridge(config = {})","processFluidSplash(bridge, position, magnitude, currentTime)","processPhaseChangeAudio(bridge, phaseType, position, magnitude, currentTime)","flushFluidAudio(bridge)","setFluidAudioListenerPos(bridge, pos)","destroyFluidAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"(speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"c9715cdc34747a72e4093a101f7c662a47063ea2eb724bc70d23bc3ff1cc2264"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/PhysicsAudioBridge.md::0000","path":"engine/reference/audio/bridge/PhysicsAudioBridge.md","title":"audio/bridge/PhysicsAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/PhysicsAudioBridge.js","updated":"","headings":["audio/bridge/PhysicsAudioBridge.js","Functions","createPhysicsAudioBridge(config = {})","processPhysicsContact(bridge, contact, currentTime)","flushPhysicsAudio(bridge)","setPhysicsAudioListenerPos(bridge, pos)","destroyPhysicsAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PhysicsAudioBridge.js Physics Collision → Audio Events Hooks into physics contact callbacks (PhysX/PBD) and triggers material aware impact sounds via the AudioEngine. Functions Create a physics audio bridge. Parameters: (Object) — No description in source JSDoc. (number) — Max audio triggers per frame (default 4) (number) — Min seconds between triggers for same body pair (default 0.1) (number) — Minimum collision speed to trigger audio (default 2.0) (number) — Max distance from listener (default 100) Process a physics contact event. Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. (number[]) — [x,y,z] contact point (number[]) — [x,y,z] relative velocity (number) — Impact impulse magnitude (number) — Material ID of body A (number) — Material ID of body B (number) — Body handle A (number) — Body handle B (number) — Engine time Flush pending physics audio events. Parameters: (Object) — No description in source JSDoc. Returns: Array of trigger configs Update listener position. Parameters: (Object) — No description in source JSDoc. (number[]) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator,","contentHash":"5631918fbda8b1b8f204a05c1a4f3949c46e393bc97dbace36591b93bd6ae940"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/PhysicsAudioBridge.md::0001","path":"engine/reference/audio/bridge/PhysicsAudioBridge.md","title":"audio/bridge/PhysicsAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/PhysicsAudioBridge.js","updated":"","headings":["audio/bridge/PhysicsAudioBridge.js","Functions","createPhysicsAudioBridge(config = {})","processPhysicsContact(bridge, contact, currentTime)","flushPhysicsAudio(bridge)","setPhysicsAudioListenerPos(bridge, pos)","destroyPhysicsAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"ecf4607cb0b7ef82a1224dee152e4bbcb7d9a9e88c3727c29fbf0bd9bbc5f595"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/SpellAudioBridge.md::0000","path":"engine/reference/audio/bridge/SpellAudioBridge.md","title":"audio/bridge/SpellAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/SpellAudioBridge.js","updated":"","headings":["audio/bridge/SpellAudioBridge.js","Functions","createSpellAudioBridge(config = {})","buildSpellAudioTrigger(bridge, spell, position, currentTime)","buildSoundHintTrigger(bridge, soundHint, position, currentTime)","destroySpellAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SpellAudioBridge.js Spell Cast → Audio Events Resolves soundHint strings from SpellGenerator and SpellElementMixer into AudioEngine trigger calls. Functions Create a spell audio bridge. Parameters: (Object) — No description in source JSDoc. (number) — Min seconds between spell sounds (default 0.05) Build audio trigger config from a spell cast. Parameters: (Object) — No description in source JSDoc. (Object) — Generated spell object (from SpellGenerator) (number[]) — [x,y,z] cast position (number) — Engine time Returns: Trigger config for AudioEngine Build audio trigger from a raw soundHint string. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers","contentHash":"1b1ec5a96ae4f6614778a663441f9e43181f7b44332e1f28e49af7ba0bf363e7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/SpellAudioBridge.md::0001","path":"engine/reference/audio/bridge/SpellAudioBridge.md","title":"audio/bridge/SpellAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/SpellAudioBridge.js","updated":"","headings":["audio/bridge/SpellAudioBridge.js","Functions","createSpellAudioBridge(config = {})","buildSpellAudioTrigger(bridge, spell, position, currentTime)","buildSoundHintTrigger(bridge, soundHint, position, currentTime)","destroySpellAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"a199fcb3bb623ccfc277a95365c210680eefd8e24c37b0c4482e40e5312340d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/SubstanceAudioResolver.md::0000","path":"engine/reference/audio/bridge/SubstanceAudioResolver.md","title":"audio/bridge/SubstanceAudioResolver.js","description":"","kind":"reference","source":"engine/audio/bridge/SubstanceAudioResolver.js","updated":"","headings":["audio/bridge/SubstanceAudioResolver.js","Functions","resolveSubstanceAudio(substanceId)","getSubstanceImpactSound(substanceId)","getSubstanceAmbientLoop(substanceId)","getSubstanceCollisionSound(substanceId)","getSubstanceProceduralPatch(substanceId)","getSubstanceParamMap(substanceId)","getSubstanceAudioDefaults(substanceId)","applySubstanceParamMap(substanceId, params = {}, mapOverrides = null)","buildSubstancePreviewParams(substanceId, overrides = {}, sourceParams = {})","buildSubstanceTriggerConfig(substanceId, eventType, params = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SubstanceAudioResolver.js Resolve substance key → audio config Maps substance IDs to audio event configurations, supporting both sample based fallback and procedural patch references. Functions Resolve a substance key to its audio configuration. Parameters: (string) — e.g. 'fire', 'water', 'metal' Returns: { impactSound, ambientLoop, collisionSound, volume, pitchRange, proceduralPatch?, paramMap? } Get the impact sound event ID for a substance. Parameters: (string) — No description in source JSDoc. Get the ambient loop event ID for a substance. Parameters: (string) — No description in source JSDoc. Get the collision sound event ID for a substance. Parameters: (string) — No description in source JSDoc. Get procedural patch ID for a substance (if defined). Parameters: (string) — No description in source JSDoc. Get parameter mapping for procedural synthesis. Maps emitter params → synth params. Parameters: (string) — No description in source JSDoc. Returns: e.g. { 'emitRate': { target: 'crackle.density', scale: 0.1, offset: 0 } } Get normalized default procedural params for a substance. Parameters: (string) — No description in source JSDoc. Returns: } Apply a substance paramMap to source params. Supports runtime map override keys: map <src scale / map <src offset. Parameters: (string) — No description in source JSDoc. (Object) — No description in source JSDoc. (Object null) — No description in source JSDoc. Build preview/runtime friendly patch params with shared defaults + paramMap transform. Parameters: (string) — No description in source JSDoc. (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. Build a complete audio trigger config from substance","contentHash":"f93ad2ccbb898daa2edda6ea72e9ce0eef936c1f3adf282c2c78ef9d3c535c1c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/SubstanceAudioResolver.md::0001","path":"engine/reference/audio/bridge/SubstanceAudioResolver.md","title":"audio/bridge/SubstanceAudioResolver.js","description":"","kind":"reference","source":"engine/audio/bridge/SubstanceAudioResolver.js","updated":"","headings":["audio/bridge/SubstanceAudioResolver.js","Functions","resolveSubstanceAudio(substanceId)","getSubstanceImpactSound(substanceId)","getSubstanceAmbientLoop(substanceId)","getSubstanceCollisionSound(substanceId)","getSubstanceProceduralPatch(substanceId)","getSubstanceParamMap(substanceId)","getSubstanceAudioDefaults(substanceId)","applySubstanceParamMap(substanceId, params = {}, mapOverrides = null)","buildSubstancePreviewParams(substanceId, overrides = {}, sourceParams = {})","buildSubstanceTriggerConfig(substanceId, eventType, params = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"in source JSDoc. (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. Build a complete audio trigger config from substance + event params. Parameters: (string) — No description in source JSDoc. (string) — 'impact' 'ambient' 'collision' (Object) — { position, velocity, volume, pitch } Returns: Ready to trigger config for AudioEngine <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"17f5fd90e052562bb18b0908e4c1229e7e6dca611fddd13779a5318f4155083c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/WeatherAudioBridge.md::0000","path":"engine/reference/audio/bridge/WeatherAudioBridge.md","title":"audio/bridge/WeatherAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/WeatherAudioBridge.js","updated":"","headings":["audio/bridge/WeatherAudioBridge.js","Functions","createWeatherAudioBridge(config = {})","tickWeatherAudio(bridge, worldTime, weather, currentTime)","destroyWeatherAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WeatherAudioBridge.js Weather/Time → Ambient Audio Crossfades ambient audio loops based on WorldTime day/night cycle, seasons, and weather conditions. Functions Create a weather audio bridge. Parameters: (Object) — No description in source JSDoc. (number) — Seconds to crossfade between ambients (default 3.0) Tick weather audio — check time of day and weather, crossfade ambients. Parameters: (Object) — No description in source JSDoc. (Object) — WorldTime state (from WorldTime.js) (string) — Current weather condition key (number) — Engine time Returns: Array of trigger configs (start/stop ambient sources) <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also:","contentHash":"fbdfd7db6c2de72799db2f3b1d18b53664d4c55db4a6da4e8bfd2f2d2c73c414"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/WeatherAudioBridge.md::0001","path":"engine/reference/audio/bridge/WeatherAudioBridge.md","title":"audio/bridge/WeatherAudioBridge.js","description":"","kind":"reference","source":"engine/audio/bridge/WeatherAudioBridge.js","updated":"","headings":["audio/bridge/WeatherAudioBridge.js","Functions","createWeatherAudioBridge(config = {})","tickWeatherAudio(bridge, worldTime, weather, currentTime)","destroyWeatherAudioBridge(bridge)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"8071ef567006763a01bf981658c6fd0f9f06c18f908a84074e3ae63f492773ab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/bridge/index.md::0000","path":"engine/reference/audio/bridge/index.md","title":"audio/bridge/index.js","description":"","kind":"reference","source":"engine/audio/bridge/index.js","updated":"","headings":["audio/bridge/index.js","Re-exports","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/audio/bridge/index.js — Barrel export for audio bridges. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"d79c18528a5e30f45070426a01c3afe356c0cd6c6382d38a065c9c3196d4fdcc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioAssetManager.md::0000","path":"engine/reference/audio/core/AudioAssetManager.md","title":"audio/core/AudioAssetManager.js","description":"","kind":"reference","source":"engine/audio/core/AudioAssetManager.js","updated":"","headings":["audio/core/AudioAssetManager.js","Functions","createAudioAssetManager(context)","async loadAudioAsset(manager, path)","async preloadAudioAssets(manager, paths)","registerAudioBuffer(manager, path, buffer)","getAudioBuffer(manager, path)","hasAudioBuffer(manager, path)","unloadAudioAsset(manager, path)","clearAudioCache(manager)","setAudioBaseUrl(manager, url)","destroyAudioAssetManager(manager)","Re-exports","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioAssetManager.js Audio Asset Loading & Caching Fetches, decodes, and caches AudioBuffers. Supports pooling and streaming for large files (music). Functions Create an audio asset manager. Parameters: (AudioContext) — No description in source JSDoc. Returns: Asset manager instance Load and decode an audio file. Returns cached buffer if already loaded. Parameters: (Object) — No description in source JSDoc. (string) — URL or relative path to audio file Preload multiple audio assets. Parameters: (Object) — No description in source JSDoc. (string[]) — No description in source JSDoc. Register a pre decoded AudioBuffer directly. Parameters: (Object) — No description in source JSDoc. (string) — Key for retrieval (AudioBuffer) — No description in source JSDoc. Get a cached buffer (synchronous). Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Check if a buffer is cached. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Remove a cached buffer. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Clear all cached buffers. Parameters: (Object) — No description in source JSDoc. Set base URL for relative asset paths. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Destroy the asset manager and clear all caches. Parameters: (Object) — No description in source JSDoc. Re exports <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) →","contentHash":"8094d7f3b9a152a4acfe9f7008228fedeb853a90d736dd2f5e1a7ee94eded72f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioAssetManager.md::0001","path":"engine/reference/audio/core/AudioAssetManager.md","title":"audio/core/AudioAssetManager.js","description":"","kind":"reference","source":"engine/audio/core/AudioAssetManager.js","updated":"","headings":["audio/core/AudioAssetManager.js","Functions","createAudioAssetManager(context)","async loadAudioAsset(manager, path)","async preloadAudioAssets(manager, paths)","registerAudioBuffer(manager, path, buffer)","getAudioBuffer(manager, path)","hasAudioBuffer(manager, path)","unloadAudioAsset(manager, path)","clearAudioCache(manager)","setAudioBaseUrl(manager, url)","destroyAudioAssetManager(manager)","Re-exports","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"13f8a534f54770859804a3e60e5d937fa22356e565e3a27d84d4cf7fdae54e6c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioBus.md::0000","path":"engine/reference/audio/core/AudioBus.md","title":"audio/core/AudioBus.js","description":"","kind":"reference","source":"engine/audio/core/AudioBus.js","updated":"","headings":["audio/core/AudioBus.js","Functions","createAudioBus(context, destination, config = {})","setBusVolume(bus, volume, currentTime)","setBusMute(bus, muted)","setBusDuck(bus, amount)","getBusOutput(bus)","destroyAudioBus(bus)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create an audio bus. Parameters: (AudioContext) — No description in source JSDoc. (AudioNode) — Parent node to connect to (usually masterGain) (Object) — No description in source JSDoc. (number) — Initial volume 0 1 (default 1.0) Returns: Bus instance Set bus volume. Parameters: (Object) — No description in source JSDoc. (number) — 0 to 1 (number) — AudioContext.currentTime Mute/unmute the bus. Parameters: (Object) — No description in source JSDoc. (boolean) — No description in source JSDoc. Set duck amount (used for automatic ducking, e.g. voice ducks music). Parameters: (Object) — No description in source JSDoc. (number) — 0 (no duck) to 1 (fully ducked) Get the bus's output node (for sources to connect to). Parameters: (Object) — No description in source JSDoc. Destroy a bus and disconnect it. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) →","contentHash":"15068ebfece39bc57ace6cf4c3fe859641920127e98c90acb1c472bc3898431e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioBus.md::0001","path":"engine/reference/audio/core/AudioBus.md","title":"audio/core/AudioBus.js","description":"","kind":"reference","source":"engine/audio/core/AudioBus.js","updated":"","headings":["audio/core/AudioBus.js","Functions","createAudioBus(context, destination, config = {})","setBusVolume(bus, volume, currentTime)","setBusMute(bus, muted)","setBusDuck(bus, amount)","getBusOutput(bus)","destroyAudioBus(bus)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"d78aba045626bbe376cc28ff8744b0acd9bdd8ec0dff425a145a8ec709b0c018"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioConcurrency.md::0000","path":"engine/reference/audio/core/AudioConcurrency.md","title":"audio/core/AudioConcurrency.js","description":"","kind":"reference","source":"engine/audio/core/AudioConcurrency.js","updated":"","headings":["audio/core/AudioConcurrency.js","Functions","createAudioConcurrency(config = {})","tickConcurrency(concurrency, activeSources, time)","canAddVoice(concurrency, activeSources, newPriority)","destroyAudioConcurrency(concurrency)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create a concurrency manager. Parameters: (Object) — No description in source JSDoc. (number) — Maximum concurrent voices (default 64) (string) — 'quietest' 'oldest' 'farthest' (default 'quietest') Tick concurrency — steal voices if over limit. Parameters: (Object) — No description in source JSDoc. (Map) — Map of id → AudioSource (number) — Current engine time Check if a new voice can be added, or which voice to steal. Parameters: (Object) — No description in source JSDoc. (Map) — No description in source JSDoc. (number) — Priority of the new voice Returns: true if the new voice can play Destroy concurrency manager. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets","contentHash":"4e60b25deffb625a4e4c27ecf7c6f950ac724042100b7dc591cc6cf7bd368103"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioConcurrency.md::0001","path":"engine/reference/audio/core/AudioConcurrency.md","title":"audio/core/AudioConcurrency.js","description":"","kind":"reference","source":"engine/audio/core/AudioConcurrency.js","updated":"","headings":["audio/core/AudioConcurrency.js","Functions","createAudioConcurrency(config = {})","tickConcurrency(concurrency, activeSources, time)","canAddVoice(concurrency, activeSources, newPriority)","destroyAudioConcurrency(concurrency)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"258d5d5e9a181abd17a831a1e37a51654b142951fc0c8317200b30a996731a3f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioDoppler.md::0000","path":"engine/reference/audio/core/AudioDoppler.md","title":"audio/core/AudioDoppler.js","description":"","kind":"reference","source":"engine/audio/core/AudioDoppler.js","updated":"","headings":["audio/core/AudioDoppler.js","Functions","createAudioDoppler(config = {})","tickDoppler(doppler, activeSources, listenerPos, listenerVel)","destroyAudioDoppler(doppler)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Create a Doppler processor. Parameters: (Object) — No description in source JSDoc. (number) — Speed of sound in world units/sec (default 343) (number) — Max pitch multiplier shift (default 0.5, so range 0.5 1.5) (number) — Smoothing factor 0 1 (default 0.1) Tick Doppler — adjust pitch of all spatial sources based on relative velocity. Parameters: (Object) — No description in source JSDoc. (Map) — Map of id → AudioSource (number[]) — [x, y, z] (number[]) — [x, y, z] Destroy Doppler processor. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio","contentHash":"734c9dff60526f713b96e393fcd5307b3d607a81668bf05cc7180f8e9bcfa063"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioDoppler.md::0001","path":"engine/reference/audio/core/AudioDoppler.md","title":"audio/core/AudioDoppler.js","description":"","kind":"reference","source":"engine/audio/core/AudioDoppler.js","updated":"","headings":["audio/core/AudioDoppler.js","Functions","createAudioDoppler(config = {})","tickDoppler(doppler, activeSources, listenerPos, listenerVel)","destroyAudioDoppler(doppler)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"b83152db27e61dc7379d63dbabbc9c5ccd7b8891407171dd6ec561c86c336ffa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioEngine.md::0000","path":"engine/reference/audio/core/AudioEngine.md","title":"audio/core/AudioEngine.js","description":"","kind":"reference","source":"engine/audio/core/AudioEngine.js","updated":"","headings":["audio/core/AudioEngine.js","Functions","createAudioEngine(config = {})","async initAudioEngine(engine)","async resumeAudioEngine(engine)","tickAudioEngine(engine, dt)","triggerAudioEvent(engine, eventId, options = {})","playSound(engine, eventId, options = {})","playBuffer(engine, buffer, options = {})","stopSource(engine, sourceId, fadeOut = 0.05)","stopAllSources(engine, fadeOut = 0.1)","registerAudioEvent(engine, eventId, descriptor)","unregisterAudioEvent(engine, eventId)","setMasterVolume(engine, volume)","setBusVolumeByName(engine, busName, volume)","destroyAudioEngine(engine)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create an audio engine instance. Parameters: (Object) — No description in source JSDoc. (number) — Master volume 0 1 (default 1.0) (number) — SFX bus volume (default 1.0) (number) — Music bus volume (default 0.7) (number) — Ambient bus volume (default 0.8) (number) — Voice bus volume (default 1.0) (number) — UI bus volume (default 0.8) (number) — Max concurrent voices (default 64) (boolean) — Enable 3D audio (default true) (string) — Audio quality: 'low' 'medium' 'high' (default 'high') (AudioContext) — Use this shared context instead of creating one (AudioNode) — Connect masterGain here instead of context.destination Returns: Audio engine instance Initialize the audio engine. Creates AudioContext and all subsystems. Must be called after a user gesture (click/tap) to comply with autoplay policy. Parameters: (Object) — Audio engine instance Returns: true if initialized successfully Ensure the AudioContext is resumed (call after user gesture). Parameters: (Object) — No description in source JSDoc. Tick the audio engine. Updates active sources, cleans up finished ones. Parameters: (Object) — No description in source JSDoc. (number) — Delta time in seconds Trigger an audio event by ID. Parameters: (Object) — No description in source JSDoc. (string) — Registered event ID or direct sound asset path (Object) — No description in source JSDoc.","contentHash":"858ed8582c246f9f1ca18c7e0419badb7981072259a972a5af9368bc278f31fc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioEngine.md::0001","path":"engine/reference/audio/core/AudioEngine.md","title":"audio/core/AudioEngine.js","description":"","kind":"reference","source":"engine/audio/core/AudioEngine.js","updated":"","headings":["audio/core/AudioEngine.js","Functions","createAudioEngine(config = {})","async initAudioEngine(engine)","async resumeAudioEngine(engine)","tickAudioEngine(engine, dt)","triggerAudioEvent(engine, eventId, options = {})","playSound(engine, eventId, options = {})","playBuffer(engine, buffer, options = {})","stopSource(engine, sourceId, fadeOut = 0.05)","stopAllSources(engine, fadeOut = 0.1)","registerAudioEvent(engine, eventId, descriptor)","unregisterAudioEvent(engine, eventId)","setMasterVolume(engine, volume)","setBusVolumeByName(engine, busName, volume)","destroyAudioEngine(engine)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":3,"text":"ID. Parameters: (Object) — No description in source JSDoc. (string) — Registered event ID or direct sound asset path (Object) — No description in source JSDoc. (number[]) — [x, y, z] world position (number[]) — [x, y, z] source velocity (number) — Volume override (0 1) (number) — Pitch multiplier (default 1.0) (string) — Bus name: 'sfx' 'music' 'ambient' 'voice' 'ui' (number) — Priority for voice stealing (higher = keep) (boolean) — Loop the sound Returns: Source ID, or null if couldn't play Backward compatible alias used by older bridge code. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (Object) — No description in source JSDoc. Play a buffer directly (bypasses event resolution). Parameters: (Object) — No description in source JSDoc. (AudioBuffer) — No description in source JSDoc. (Object) — Same as triggerAudioEvent options Stop a specific source by ID. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Fade out time in seconds (default 0.05) Stop all active sources. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Register an audio event descriptor. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (Object) — See AudioEvent.js for format Unregister an audio event. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Set master volume. Parameters: (Object) — No description in source JSDoc. (number) — 0 to 1 Set volume for a specific bus. Parameters: (Object) — No description in source JSDoc. (string) — 'sfx' 'music' 'ambient' 'voice' 'ui' (number) — 0 to 1 Destroy the audio engine and release all resources. Parameters:","contentHash":"f3853b0765fb22a722bfabaf874d06359a8d9dcf6a526ae8d68a3a76b3d46fdb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioEngine.md::0002","path":"engine/reference/audio/core/AudioEngine.md","title":"audio/core/AudioEngine.js","description":"","kind":"reference","source":"engine/audio/core/AudioEngine.js","updated":"","headings":["audio/core/AudioEngine.js","Functions","createAudioEngine(config = {})","async initAudioEngine(engine)","async resumeAudioEngine(engine)","tickAudioEngine(engine, dt)","triggerAudioEvent(engine, eventId, options = {})","playSound(engine, eventId, options = {})","playBuffer(engine, buffer, options = {})","stopSource(engine, sourceId, fadeOut = 0.05)","stopAllSources(engine, fadeOut = 0.1)","registerAudioEvent(engine, eventId, descriptor)","unregisterAudioEvent(engine, eventId)","setMasterVolume(engine, volume)","setBusVolumeByName(engine, busName, volume)","destroyAudioEngine(engine)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":2,"chunkCount":3,"text":"description in source JSDoc. (string) — 'sfx' 'music' 'ambient' 'voice' 'ui' (number) — 0 to 1 Destroy the audio engine and release all resources. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes co","contentHash":"f49dd5947e40cfdb6efa7076da21c455c24cf29028ed186a286a97cf013b6ed1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioEvent.md::0000","path":"engine/reference/audio/core/AudioEvent.md","title":"audio/core/AudioEvent.js","description":"","kind":"reference","source":"engine/audio/core/AudioEvent.js","updated":"","headings":["audio/core/AudioEvent.js","Functions","resolveAudioEvent(event, eventId, options, time)","createAudioEventDescriptor(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) } Functions Resolve an audio event descriptor to concrete play parameters. Parameters: (Object null) — Registered event descriptor (or null for direct path) (string) — The event ID (used as sound path if no descriptor) (Object) — Trigger options (position, volume overrides, etc.) (number) — Current engine time Returns: { sound, volume, pitch, loop, priority, bus } Create an audio event descriptor. Parameters: (Object) — No description in source JSDoc. Returns: Event descriptor <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing","contentHash":"e7dda309f08ff637cfa939a4529fb750b7118ba93330dd0cfd2389a94b421f08"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioEvent.md::0001","path":"engine/reference/audio/core/AudioEvent.md","title":"audio/core/AudioEvent.js","description":"","kind":"reference","source":"engine/audio/core/AudioEvent.js","updated":"","headings":["audio/core/AudioEvent.js","Functions","resolveAudioEvent(event, eventId, options, time)","createAudioEventDescriptor(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"b9aaf465cd36efd2498fcb0597653553c3f7eb031623d48b8ad9e31ee4a5217c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioListener.md::0000","path":"engine/reference/audio/core/AudioListener.md","title":"audio/core/AudioListener.js","description":"","kind":"reference","source":"engine/audio/core/AudioListener.js","updated":"","headings":["audio/core/AudioListener.js","Functions","createAudioListener(context)","updateAudioListener(listener, position, forward, up, dt)","getListenerPosition(listener)","getListenerVelocity(listener)","destroyAudioListener(listener)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioListener.js 3D Audio Listener Wraps the Web Audio API AudioListener, syncing camera position, orientation, and velocity for accurate 3D spatialization. Functions Create an audio listener wrapper. Parameters: (AudioContext) — No description in source JSDoc. Returns: Listener instance Update listener position, orientation, and velocity. Call once per frame with camera data. Parameters: (Object) — No description in source JSDoc. (number[]) — [x, y, z] (number[]) — [x, y, z] normalized forward direction (number[]) — [x, y, z] normalized up direction (number) — Delta time for velocity calculation Get the listener's current position. Parameters: (Object) — No description in source JSDoc. Returns: [x, y, z] Get the listener's current velocity. Parameters: (Object) — No description in source JSDoc. Returns: [x, y, z] Destroy the listener wrapper. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced:","contentHash":"c10bcc85da0601ce960d474c53c7831dbb3b16960c4f64d3e2b776b8229f0ce8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioListener.md::0001","path":"engine/reference/audio/core/AudioListener.md","title":"audio/core/AudioListener.js","description":"","kind":"reference","source":"engine/audio/core/AudioListener.js","updated":"","headings":["audio/core/AudioListener.js","Functions","createAudioListener(context)","updateAudioListener(listener, position, forward, up, dt)","getListenerPosition(listener)","getListenerVelocity(listener)","destroyAudioListener(listener)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"d811a22ea3927dcdd510f3ee415b8f5275c0c90b087db2fac1a6469f32b3d44f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioOcclusion.md::0000","path":"engine/reference/audio/core/AudioOcclusion.md","title":"audio/core/AudioOcclusion.js","description":"","kind":"reference","source":"engine/audio/core/AudioOcclusion.js","updated":"","headings":["audio/core/AudioOcclusion.js","Functions","createAudioOcclusion(config = {})","addOccluder(occlusion, min, max, transmission = 0.2)","removeOccluder(occlusion, index)","clearOccluders(occlusion)","tickOcclusion(occlusion, activeSources, listenerPos, context, dt)","destroyAudioOcclusion(occlusion)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create an occlusion system. Parameters: (Object) — No description in source JSDoc. (number) — Max tracked occluders (default 64) (number) — Seconds between occlusion updates (default 0.1) (number) — Lowpass frequency when fully occluded (default 300 Hz) (number) — Lowpass frequency when not occluded (default 20000 Hz) (number) — Volume multiplier when fully occluded (default 0.3) Add an AABB occluder. Parameters: (Object) — No description in source JSDoc. (number[]) — [x, y, z] box min corner (number[]) — [x, y, z] box max corner (number) — 0 (fully blocks) to 1 (transparent). Default 0.2 Returns: Occluder index Remove an occluder by index. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Clear all occluders. Parameters: (Object) — No description in source JSDoc. Tick occlusion: check sources against occluders and apply filters. Parameters: (Object) — No description in source JSDoc. (Map) — Map of id → AudioSource (number[]) — [x, y, z] (AudioContext) — For creating filter nodes (number) — Delta time Destroy occlusion system. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator,","contentHash":"92d8f0d26739e5eec49a174c652c3c2f4bf946c8aefe1e2e62b46a4858d3eebc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioOcclusion.md::0001","path":"engine/reference/audio/core/AudioOcclusion.md","title":"audio/core/AudioOcclusion.js","description":"","kind":"reference","source":"engine/audio/core/AudioOcclusion.js","updated":"","headings":["audio/core/AudioOcclusion.js","Functions","createAudioOcclusion(config = {})","addOccluder(occlusion, min, max, transmission = 0.2)","removeOccluder(occlusion, index)","clearOccluders(occlusion)","tickOcclusion(occlusion, activeSources, listenerPos, context, dt)","destroyAudioOcclusion(occlusion)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"& Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"10a540fe0d7ab5970828b32f277900ec3fc72220ca67351255ae87967d8b593e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioReverbZone.md::0000","path":"engine/reference/audio/core/AudioReverbZone.md","title":"audio/core/AudioReverbZone.js","description":"","kind":"reference","source":"engine/audio/core/AudioReverbZone.js","updated":"","headings":["audio/core/AudioReverbZone.js","Functions","createReverbZoneSystem(context, destination)","addReverbZone(system, config = {})","removeReverbZone(system, index)","tickReverbZones(system, listenerPos)","connectSourceToReverb(system, source, sendLevel = 0.3)","destroyReverbZoneSystem(system)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a reverb zone system. Parameters: (AudioContext) — No description in source JSDoc. (AudioNode) — Node to connect reverb output to (usually masterGain) Add a reverb zone. Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. (string) — 'box' 'sphere' (default 'box') (number[]) — [x, y, z] (number[]) — [w, h, d] for box (number) — Radius for sphere (string) — Key from REVERB PRESETS (number) — Higher takes precedence in overlaps (default 0) Returns: Zone index Remove a reverb zone. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Tick reverb zones — blend based on listener position. Parameters: (Object) — No description in source JSDoc. (number[]) — [x, y, z] Connect a source to the reverb system's convolver (send). Parameters: (Object) — No description in source JSDoc. (Object) — AudioSource (number) — How much signal goes to reverb (0 1) Destroy reverb zone system. Parameters: (Object) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains:","contentHash":"62a7c2d1ad076590949c9f529a4adf60a3477f5d985673cde76bdbb6cd107167"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioReverbZone.md::0001","path":"engine/reference/audio/core/AudioReverbZone.md","title":"audio/core/AudioReverbZone.js","description":"","kind":"reference","source":"engine/audio/core/AudioReverbZone.js","updated":"","headings":["audio/core/AudioReverbZone.js","Functions","createReverbZoneSystem(context, destination)","addReverbZone(system, config = {})","removeReverbZone(system, index)","tickReverbZones(system, listenerPos)","connectSourceToReverb(system, source, sendLevel = 0.3)","destroyReverbZoneSystem(system)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"1f76d032aa48c8929077490716776c7e3e41d8456c2f36fa2501129635095b9d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioSource.md::0000","path":"engine/reference/audio/core/AudioSource.md","title":"audio/core/AudioSource.js","description":"","kind":"reference","source":"engine/audio/core/AudioSource.js","updated":"","headings":["audio/core/AudioSource.js","Functions","createAudioSource(context, config = {})","tickAudioSource(source, dt)","setSourcePosition(source, position)","setSourceVolume(source, volume)","setSourcePitch(source, pitch)","stopAudioSource(source, fadeOut = 0.05)","isSourceDone(source)","getSourceEffectiveVolume(source)","destroyAudioSource(source)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioSource.js 3D Sound Emitter Wraps a BufferSourceNode + PannerNode (HRTF) + GainNode chain. Represents a single playing sound in 3D space. Functions Create and start an audio source. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — Unique source ID (AudioBuffer) — Decoded audio buffer (Object) — AudioBus to connect to (number[]) — [x,y,z] or null for 2D (number[]) — [x,y,z] source velocity (number) — Volume 0 2 (default 1.0) (number) — Playback rate (default 1.0) (boolean) — Loop playback (default false) (number) — Priority for voice stealing (default 0) (boolean) — Use 3D panner (default false) (number) — PannerNode refDistance (default 1) (number) — PannerNode maxDistance (default 100) (number) — PannerNode rolloffFactor (default 1) (number) — Engine time at creation Returns: Source instance Tick a source (per frame update). Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Update source 3D position explicitly. Parameters: (Object) — No description in source JSDoc. (number[]) — [x, y, z] Set source volume. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Set source pitch/playback rate. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Stop a source with optional fade out. Parameters: (Object) — No description in source JSDoc. (number) — Seconds to fade (default 0.05) Check if source is finished playing. Parameters: (Object) — No description in source JSDoc. Get effective volume (volume × occlusion). Parameters: (Object) — No description in source JSDoc. Destroy a","contentHash":"99066f087e5d4fca95e8f6998b881d630b19b830291857c3ec26a380962c4dcc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/AudioSource.md::0001","path":"engine/reference/audio/core/AudioSource.md","title":"audio/core/AudioSource.js","description":"","kind":"reference","source":"engine/audio/core/AudioSource.js","updated":"","headings":["audio/core/AudioSource.js","Functions","createAudioSource(context, config = {})","tickAudioSource(source, dt)","setSourcePosition(source, position)","setSourceVolume(source, volume)","setSourcePitch(source, pitch)","stopAudioSource(source, fadeOut = 0.05)","isSourceDone(source)","getSourceEffectiveVolume(source)","destroyAudioSource(source)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"(Object) — No description in source JSDoc. Get effective volume (volume × occlusion). Parameters: (Object) — No description in source JSDoc. Destroy a source and disconnect all nodes. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"bec4cd105fbec3fc889f475a781b729fb01df7e4eb97313720c0036841747d6a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/FootstepEvents.md::0000","path":"engine/reference/audio/core/FootstepEvents.md","title":"audio/core/FootstepEvents.js","description":"","kind":"reference","source":"engine/audio/core/FootstepEvents.js","updated":"","headings":["audio/core/FootstepEvents.js","Functions","registerFootstepEvents(audioEngine)","unregisterFootstepEvents(audioEngine)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FootstepEvents.js Footstep Audio Event Registration Registers all footstep and land audio events with the AudioEngine. Called during engine initialization. Functions Register all footstep audio events with the AudioEngine. Should be called once during engine initialization. Parameters: (Object) — AudioEngine instance Unregister all footstep events (for cleanup). Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"40d5981281f36fca7f0caabb98045974b9bc8a9186c8e4a727132af7aa31a90f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/FootstepMaterials.md::0000","path":"engine/reference/audio/core/FootstepMaterials.md","title":"audio/core/FootstepMaterials.js","description":"","kind":"reference","source":"engine/audio/core/FootstepMaterials.js","updated":"","headings":["audio/core/FootstepMaterials.js","Functions","resolveFootstepMaterial(material)","getFootstepConfig(materialKey)","getAllFootstepMaterials()","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Resolve a physics material ID to a footstep material key. Parameters: (number string null) — Physics material ID or voxel material string Returns: Footstep material key (defaults to 'dirt') Get footstep material config. Parameters: (string) — Footstep material key Returns: { patch, variants } Get all footstep material keys. Constants — Footstep material configurations. Each defines the procedural patch to use and number of variants. — Map physics material IDs to footstep materials. Physics materials are from PhysicsAudioBridge.js MATERIAL TO SUBSTANCE. — Map voxel/terrain material strings to footstep materials. Used when querying terrain directly. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced:","contentHash":"ae250a0d6ca37e6ddc1c6a574a79bed60c2cd09330d1feacfdc37aac5e26c679"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/FootstepMaterials.md::0001","path":"engine/reference/audio/core/FootstepMaterials.md","title":"audio/core/FootstepMaterials.js","description":"","kind":"reference","source":"engine/audio/core/FootstepMaterials.js","updated":"","headings":["audio/core/FootstepMaterials.js","Functions","resolveFootstepMaterial(material)","getFootstepConfig(materialKey)","getAllFootstepMaterials()","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"74d004e868ae12fb2f10e3b2fdd2c14805db12a7243075686a60d23b4fdf00fd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/core/index.md::0000","path":"engine/reference/audio/core/index.md","title":"audio/core/index.js","description":"","kind":"reference","source":"engine/audio/core/index.js","updated":"","headings":["audio/core/index.js","Re-exports","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/audio/core/index.js — Barrel export for core audio engine. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"03df8acf5a4417ab380d83af48edd263c8b916147cb96bc069da21b4105c61f9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/index.md::0000","path":"engine/reference/audio/index.md","title":"audio/index.js","description":"","kind":"reference","source":"engine/audio/index.js","updated":"","headings":["audio/index.js","Re-exports","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Re exports , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"6afd2a718ecae5901c2b7fe0cc8fc41599f56355b5e73663f0fc57fdb4da2d3d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/BodyFoleyPatches.md::0000","path":"engine/reference/audio/synth/BodyFoleyPatches.md","title":"audio/synth/BodyFoleyPatches.js","description":"","kind":"reference","source":"engine/audio/synth/BodyFoleyPatches.js","updated":"","headings":["audio/synth/BodyFoleyPatches.js","Functions","bodyjumpeffort(ctx, dest, p)","bodyslide(ctx, dest, p)","bodycloth(ctx, dest, p)","bodybreathlight(ctx, dest, p)","bodybreathheavy(ctx, dest, p)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Jump effort sound — short vocal grunt (bandpassed noise + formant) Slide friction sound — continuous lowpass swept noise Cloth rustle — short high freq noise burst Light breathing — soft airy noise with bandpass Heavy breathing — louder breath with low end rumble Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"81183213c80bf4caa2ace7eb8931ad73a882bf43b98806dee49101070a265956"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/FootstepPatches.md::0000","path":"engine/reference/audio/synth/FootstepPatches.md","title":"audio/synth/FootstepPatches.js","description":"","kind":"reference","source":"engine/audio/synth/FootstepPatches.js","updated":"","headings":["audio/synth/FootstepPatches.js","Functions","footstepdirt(ctx, dest, p)","footstepgrass(ctx, dest, p)","footstepsand(ctx, dest, p)","footstepgravel(ctx, dest, p)","footstepmud(ctx, dest, p)","footstepsnow(ctx, dest, p)","footstepstone(ctx, dest, p)","footstepconcrete(ctx, dest, p)","footstepmarble(ctx, dest, p)","footstepbrick(ctx, dest, p)","footstepwoodplank(ctx, dest, p)","footstepwoodcreak(ctx, dest, p)","footstepmetalsolid(ctx, dest, p)","footstepmetalgrate(ctx, dest, p)","footstepwatershallow(ctx, dest, p)","footstepwaterpuddle(ctx, dest, p)","footstepleaves(ctx, dest, p)","footstepglass(ctx, dest, p)","footstepice(ctx, dest, p)","landgeneric(ctx, dest, p)","getFootstepPatch(material)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Dirt footstep — muffled thud + grain scatter Grass footstep — soft rustle + muffled thud Sand footstep — soft grain scatter + muffled impact Gravel footstep — sharp scatter + rattle Mud footstep — wet squelch + suction release Snow footstep — soft crunch + squeak Stone footstep — hard impact + high freq crack Concrete footstep — dull thud + mid freq resonance Marble footstep — bright click + ring Brick footstep — textured impact + dust scatter Wood plank footstep — resonant body + plank slap Wood creak footstep — creaking friction + resonance Metal solid footstep — clang + ring Metal grate footstep — rattle + metallic ring Water shallow footstep — splash + plop Water puddle footstep — small splash Leaves footstep — crunch + rustle Glass footstep — delicate clink + shimmer Ice footstep — crack + slide Generic land sound — reuses footstep patch but with heavier weight/volume Can be used as a wrapper for any footstep material Get footstep patch function by material key. Parameters: (string) — Material key (e.g., 'dirt', 'stone') Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain","contentHash":"d6e95f00e1fa9d0345a5bd84ac334fd8be9000a4a89ed7d2b38cb607c58fdb1f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/FootstepPatches.md::0001","path":"engine/reference/audio/synth/FootstepPatches.md","title":"audio/synth/FootstepPatches.js","description":"","kind":"reference","source":"engine/audio/synth/FootstepPatches.js","updated":"","headings":["audio/synth/FootstepPatches.js","Functions","footstepdirt(ctx, dest, p)","footstepgrass(ctx, dest, p)","footstepsand(ctx, dest, p)","footstepgravel(ctx, dest, p)","footstepmud(ctx, dest, p)","footstepsnow(ctx, dest, p)","footstepstone(ctx, dest, p)","footstepconcrete(ctx, dest, p)","footstepmarble(ctx, dest, p)","footstepbrick(ctx, dest, p)","footstepwoodplank(ctx, dest, p)","footstepwoodcreak(ctx, dest, p)","footstepmetalsolid(ctx, dest, p)","footstepmetalgrate(ctx, dest, p)","footstepwatershallow(ctx, dest, p)","footstepwaterpuddle(ctx, dest, p)","footstepleaves(ctx, dest, p)","footstepglass(ctx, dest, p)","footstepice(ctx, dest, p)","landgeneric(ctx, dest, p)","getFootstepPatch(material)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"(speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"092440b87dd5e2782781ab0a8d37f51bf504c60f3b7bdd759f6f28248ec82547"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/NodeRegistry.md::0000","path":"engine/reference/audio/synth/NodeRegistry.md","title":"audio/synth/NodeRegistry.js","description":"","kind":"reference","source":"engine/audio/synth/NodeRegistry.js","updated":"","headings":["audio/synth/NodeRegistry.js","Functions","getNodeFactory(type)","getRegisteredTypes()","getNodeCategory(type)","hasWorkletProcessor(type)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Get the Web Audio factory function for a node type. Returns a function: (ctx, nodeDefinition, pitchRatio) = { output, input, sources } Parameters: (string) — Node type name Get all registered type names. Get the category for a node type. Parameters: (string) — No description in source JSDoc. Check if a type has a worklet processor implementation. Parameters: (string) — No description in source JSDoc. Constants — Node category definitions for organization/UI. — All registered node type names (flat list). <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio","contentHash":"6abe38d754d4a14075176df8c47a5d8e37c37d59edcb4a5559b2069bd24da679"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/NodeRegistry.md::0001","path":"engine/reference/audio/synth/NodeRegistry.md","title":"audio/synth/NodeRegistry.js","description":"","kind":"reference","source":"engine/audio/synth/NodeRegistry.js","updated":"","headings":["audio/synth/NodeRegistry.js","Functions","getNodeFactory(type)","getRegisteredTypes()","getNodeCategory(type)","hasWorkletProcessor(type)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"b83152db27e61dc7379d63dbabbc9c5ccd7b8891407171dd6ec561c86c336ffa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/PatchCompiler.md::0000","path":"engine/reference/audio/synth/PatchCompiler.md","title":"audio/synth/PatchCompiler.js","description":"","kind":"reference","source":"engine/audio/synth/PatchCompiler.js","updated":"","headings":["audio/synth/PatchCompiler.js","Functions","registerNodeType(type, def)","getNodeTypes()","compilePatch(patch)","validatePatch(patch)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Register a node type for the compiler. Parameters: (string) — Node type name (e.g. 'Oscillator', 'Filter') (Object) — { inputs: string[], outputs: string[], params: Object } Get all registered node types. Compile a patch JSON into an execution plan. Parameters: (Object) — Patch descriptor { id, name, nodes, wires, exposed } Returns: } Validate a patch without fully compiling. Parameters: (Object) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when","contentHash":"8269e9844d1a9350c5e023411079fb661fb1a7cc26b09adeec8e04406d05b796"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/PatchCompiler.md::0001","path":"engine/reference/audio/synth/PatchCompiler.md","title":"audio/synth/PatchCompiler.js","description":"","kind":"reference","source":"engine/audio/synth/PatchCompiler.js","updated":"","headings":["audio/synth/PatchCompiler.js","Functions","registerNodeType(type, def)","getNodeTypes()","compilePatch(patch)","validatePatch(patch)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"97ab3eaccdeb2a9ddfbc89a2551fe8f5c0613fa60c4ecc935a02eb27e4616bfa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/PatchRunner.worklet.md::0000","path":"engine/reference/audio/synth/PatchRunner.worklet.md","title":"audio/synth/PatchRunner.worklet.js","description":"","kind":"reference","source":"engine/audio/synth/PatchRunner.worklet.js","updated":"","headings":["audio/synth/PatchRunner.worklet.js","Exports","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"5452d60af7cab7fc663a2f81d950154c33f71d8543f3a297d3df6db1c8f1f7bc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/ProceduralPatches.md::0000","path":"engine/reference/audio/synth/ProceduralPatches.md","title":"audio/synth/ProceduralPatches.js","description":"","kind":"reference","source":"engine/audio/synth/ProceduralPatches.js","updated":"","headings":["audio/synth/ProceduralPatches.js","Functions","impactfluid(ctx, dest, p)","impactmetal(ctx, dest, p)","impactglass(ctx, dest, p)","impactstone(ctx, dest, p)","impactwood(ctx, dest, p)","impactice(ctx, dest, p)","impactcombustion(ctx, dest, p)","impactsand(ctx, dest, p)","impactdrop(ctx, dest, p)","impacthiss(ctx, dest, p)","impactcrackle(ctx, dest, p)","impactelectric(ctx, dest, p)","ambientcombustion(ctx, dest, p)","ambientfluid(ctx, dest, p)","ambientelectric(ctx, dest, p)","ambientwind(ctx, dest, p)","getImpactPatch(key)","getAmbientPatch(key)","setPatchOverride(key, param, value)","setPatchOverrides(key, overrides)","getPatchOverride(key)","clearPatchOverrides()","getAllPatchKeys()","getAllMaterialAliases()","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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 Metal clang — multi partial ring + noise transient Glass clink — high FM harmonics, crystalline Stone/debris thud — low filtered noise + crack + sub thump Wood knock — multi mode resonant body + knock transient Ice crack — sharp noise + crystalline inharmonic pings Fire/lava impact burst — noise burst + low boom + rumble tail Sand soft impact — muffled body + grain scatter Viscous liquid drop/drip — thicker plop than water, low resonance, no spray Gas/vapor/granular hiss — soft broadband whoosh, not a hard impact Spark/debris crackle —","contentHash":"536ce4268fc5cd4adc70667e320c7c54e1e20a219f6d4a34de77c553974f6b25"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/ProceduralPatches.md::0001","path":"engine/reference/audio/synth/ProceduralPatches.md","title":"audio/synth/ProceduralPatches.js","description":"","kind":"reference","source":"engine/audio/synth/ProceduralPatches.js","updated":"","headings":["audio/synth/ProceduralPatches.js","Functions","impactfluid(ctx, dest, p)","impactmetal(ctx, dest, p)","impactglass(ctx, dest, p)","impactstone(ctx, dest, p)","impactwood(ctx, dest, p)","impactice(ctx, dest, p)","impactcombustion(ctx, dest, p)","impactsand(ctx, dest, p)","impactdrop(ctx, dest, p)","impacthiss(ctx, dest, p)","impactcrackle(ctx, dest, p)","impactelectric(ctx, dest, p)","ambientcombustion(ctx, dest, p)","ambientfluid(ctx, dest, p)","ambientelectric(ctx, dest, p)","ambientwind(ctx, dest, p)","getImpactPatch(key)","getAmbientPatch(key)","setPatchOverride(key, param, value)","setPatchOverrides(key, overrides)","getPatchOverride(key)","clearPatchOverrides()","getAllPatchKeys()","getAllMaterialAliases()","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":3,"text":"liquid drop/drip — thicker plop than water, low resonance, no spray Gas/vapor/granular hiss — soft broadband whoosh, not a hard impact Spark/debris crackle — scattered hard micro transients Plasma/spark electric snap Fire/lava crackling ambient — random noise bursts + low rumble Viscous/fluid flow ambient — subtle high freq trickle. Shared by water + viscous liquids through AMBIENT PATCHES aliases. Plasma/electric buzz ambient — FM buzz + noise crackle Smoke/steam/wind ambient — airy bandpass sweep Get the impact patch function for a substance key. If runtime overrides exist for this key, returns a wrapper that merges them. Parameters: (string) — Substance key or proceduralPatch name Get the ambient patch function for a substance key. If runtime overrides exist for this key, returns a wrapper that merges them. Parameters: (string) — Substance key or proceduralPatch name Set a param override for a material patch. These overrides are merged into patch params at call time. Parameters: (string) — Material key (e.g. 'water', 'metal', 'fire') (string) — Param name ('volume', 'pitch', 'speed', 'temperature', 'quality') (number) — No description in source JSDoc. Set all overrides for a material at once. Parameters: (string) — No description in source JSDoc. (Object) — { volume, pitch, speed, temperature, quality } Get current overrides for a material. Parameters: (string) — No description in source JSDoc. Clear all runtime overrides (reset to defaults). Get all unique canonical material keys (de duplicated patch function names). Returns objects with { key, type, patchFn } for both impact and ambient. Get a flat list of all material alias keys (including duplicates). Constants — Map of proceduralPatch strings → impact patch functions — Map of proceduralPatch strings → ambient","contentHash":"384726dffd495092785e64323945744d718aeb9cd84973a1c61660f6a8822cee"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/ProceduralPatches.md::0002","path":"engine/reference/audio/synth/ProceduralPatches.md","title":"audio/synth/ProceduralPatches.js","description":"","kind":"reference","source":"engine/audio/synth/ProceduralPatches.js","updated":"","headings":["audio/synth/ProceduralPatches.js","Functions","impactfluid(ctx, dest, p)","impactmetal(ctx, dest, p)","impactglass(ctx, dest, p)","impactstone(ctx, dest, p)","impactwood(ctx, dest, p)","impactice(ctx, dest, p)","impactcombustion(ctx, dest, p)","impactsand(ctx, dest, p)","impactdrop(ctx, dest, p)","impacthiss(ctx, dest, p)","impactcrackle(ctx, dest, p)","impactelectric(ctx, dest, p)","ambientcombustion(ctx, dest, p)","ambientfluid(ctx, dest, p)","ambientelectric(ctx, dest, p)","ambientwind(ctx, dest, p)","getImpactPatch(key)","getAmbientPatch(key)","setPatchOverride(key, param, value)","setPatchOverrides(key, overrides)","getPatchOverride(key)","clearPatchOverrides()","getAllPatchKeys()","getAllMaterialAliases()","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":2,"chunkCount":3,"text":"all material alias keys (including duplicates). Constants — Map of proceduralPatch strings → impact patch functions — Map of proceduralPatch strings → ambient patch functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing ch","contentHash":"b13ca53e91c5fb7fe8135eb637b9d472ab7296e6b45ae5ca87d4baf6b6349cf6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SfxGenerator.md::0000","path":"engine/reference/audio/synth/SfxGenerator.md","title":"audio/synth/SfxGenerator.js","description":"","kind":"reference","source":"engine/audio/synth/SfxGenerator.js","updated":"","headings":["audio/synth/SfxGenerator.js","Functions","createSfxParams()","randomizePreset(preset)","randomizeFull()","mutateSfx(params, amount = 0.05)","getPresetNames()","renderSfx(ctx, params)","playSfx(ctx, buffer, options = {})","renderAndPlay(ctx, params, options = {})","encodeSfxParams(params)","decodeSfxParams(str)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create a default SFX parameter set. All values normalized to sensible ranges. Generate a randomized SFX from a preset category. Parameters: (string) — One of: pickup, laser, explosion, powerup, hit, jump, blip, click, coin, error Returns: SFX params Fully random SFX (no preset bias). Mutate an existing SFX params slightly (small random nudge to each param). Parameters: (Object) — Source params (number) — Mutation strength 0 1 (default 0.05) Returns: New mutated params Get list of available preset names. Render an SFX to an AudioBuffer. This is a pure software synthesizer — runs offline, produces a buffer. Parameters: (AudioContext) — Web Audio context (for sample rate and buffer creation) (Object) — SFX params from createSfxParams/randomizePreset/mutateSfx Play a rendered SFX buffer. Parameters: (AudioContext) — No description in source JSDoc. (AudioBuffer) — No description in source JSDoc. (Object) — { volume, playbackRate, destination } Render and immediately play an SFX.","contentHash":"718f5b924bcde104037059c4b5e1c972282a2cecc8d22a6467c64abfce3287de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SfxGenerator.md::0001","path":"engine/reference/audio/synth/SfxGenerator.md","title":"audio/synth/SfxGenerator.js","description":"","kind":"reference","source":"engine/audio/synth/SfxGenerator.js","updated":"","headings":["audio/synth/SfxGenerator.js","Functions","createSfxParams()","randomizePreset(preset)","randomizeFull()","mutateSfx(params, amount = 0.05)","getPresetNames()","renderSfx(ctx, params)","playSfx(ctx, buffer, options = {})","renderAndPlay(ctx, params, options = {})","encodeSfxParams(params)","decodeSfxParams(str)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"in source JSDoc. (AudioBuffer) — No description in source JSDoc. (Object) — { volume, playbackRate, destination } Render and immediately play an SFX. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: } Encode SFX params to a compact JSON string. Parameters: (Object) — No description in source JSDoc. Decode SFX params from a JSON string. Parameters: (string) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"7165e6d707cd02b980af85d20530620c8024ebf508139d3f19bd5675bc934924"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SharedParamBuffer.md::0000","path":"engine/reference/audio/synth/SharedParamBuffer.md","title":"audio/synth/SharedParamBuffer.js","description":"","kind":"reference","source":"engine/audio/synth/SharedParamBuffer.js","updated":"","headings":["audio/synth/SharedParamBuffer.js","Functions","createSharedParamBuffer()","writeEmitterStats(view, emitterIndex, stats)","clearAllEmitterStats(view)","clearEmitterStats(view, emitterIndex)","readEmitterParam(view, emitterIndex, paramIndex)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a shared parameter buffer. Returns: { sharedBuffer, mainView, workletBuffer } Write emitter aggregate stats to the shared buffer. Parameters: (Float32Array) — mainView from createSharedParamBuffer (number) — 0 to MAX EMITTERS 1 (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Clear all emitter stats (e.g. when emitters stop). Parameters: (Float32Array) — No description in source JSDoc. Clear stats for a specific emitter. Parameters: (Float32Array) — No description in source JSDoc. (number) — No description in source JSDoc. Read a single param value from the shared buffer. Parameters: (Float32Array) — Float32Array wrapping SharedArrayBuffer (number) — No description in source JSDoc. (number) — PARAM LAYOUT value Constants — Standard parameter indices for emitter → synth streaming. Each active emitter gets one set of these slots. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing","contentHash":"a29d7f4cd518d9e82ce0b845fbbdce9524dd88fdc88e76f5189f93186faf2541"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SharedParamBuffer.md::0001","path":"engine/reference/audio/synth/SharedParamBuffer.md","title":"audio/synth/SharedParamBuffer.js","description":"","kind":"reference","source":"engine/audio/synth/SharedParamBuffer.js","updated":"","headings":["audio/synth/SharedParamBuffer.js","Functions","createSharedParamBuffer()","writeEmitterStats(view, emitterIndex, stats)","clearAllEmitterStats(view)","clearEmitterStats(view, emitterIndex)","readEmitterParam(view, emitterIndex, paramIndex)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"slots. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"eac9e059d64b43bbafb68e44ba4bb98cf3096a19963b851c6bdc50ab45c253d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SoundBlender.md::0000","path":"engine/reference/audio/synth/SoundBlender.md","title":"audio/synth/SoundBlender.js","description":"","kind":"reference","source":"engine/audio/synth/SoundBlender.js","updated":"","headings":["audio/synth/SoundBlender.js","Functions","createBlendPreset(buffers = [], config = {})","addLayer(preset, buffer, layerConfig = {})","removeLayer(preset, index)","playBlend(ctx, preset, options = {})","async renderBlend(ctx, preset)","async generateVariations(ctx, preset, count = 10)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create a blend preset from source buffers and layer config. Parameters: (AudioBuffer[]) — Source audio buffers (1 4) (Object) — No description in source JSDoc. (Object[]) — Per layer settings (string) — 'simultaneous' 'sequential' 'random' 'roundrobin' (string) — 'linear' 'equalpower' 'cosine' (number) — 0 1 Returns: Blend preset Add a layer to an existing preset. Parameters: (Object) — No description in source JSDoc. (AudioBuffer) — No description in source JSDoc. (Object) — No description in source JSDoc. Remove a layer by index. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Play a blend preset. Returns an object with stop() method. Parameters: (AudioContext) — No description in source JSDoc. (Object) — From createBlendPreset (Object) — { destination, onEnded } Returns: } Render a blend preset to a single AudioBuffer (offline). Parameters: (AudioContext) — No description in source JSDoc. (Object) — No","contentHash":"74dd8b37c79c694971675071ed31d80bdd3d9513e6b265e176f373616d335c64"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SoundBlender.md::0001","path":"engine/reference/audio/synth/SoundBlender.md","title":"audio/synth/SoundBlender.js","description":"","kind":"reference","source":"engine/audio/synth/SoundBlender.js","updated":"","headings":["audio/synth/SoundBlender.js","Functions","createBlendPreset(buffers = [], config = {})","addLayer(preset, buffer, layerConfig = {})","removeLayer(preset, index)","playBlend(ctx, preset, options = {})","async renderBlend(ctx, preset)","async generateVariations(ctx, preset, count = 10)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"onEnded } Returns: } Render a blend preset to a single AudioBuffer (offline). Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Generate N unique variations of a blend preset. Each variation resolves random ranges differently. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"243cccd47e1671cece6deb715a604523dbb56155b78f89bc685fff9fe6936943"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SoundSchema.md::0000","path":"engine/reference/audio/synth/SoundSchema.md","title":"audio/synth/SoundSchema.js","description":"","kind":"reference","source":"engine/audio/synth/SoundSchema.js","updated":"","headings":["audio/synth/SoundSchema.js","Functions","getSchema(type)","getSchemaNames()","validateParams(params, schema)","defaultsFromSchema(schema)","variationRangesFromSchema(schema, proportion = 0.1)","getParamGroups(schema)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Get a schema by type name. Parameters: (string) — 'sfx', 'fm', 'karplus', 'granular', 'formant', 'blend', 'blendLayer' Get all schema names. 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. Parameters: (Object) — The parameter object to validate (Object) — The schema to validate against Returns: , sanitized: Object }} Create default params from a schema. Parameters: (Object) — No description in source JSDoc. Extract variation ranges from a schema (for VariationGenerator). Returns { ranges, limits } where: ranges[key] = (max min) proportion limits[key] = [min, max] Parameters: (Object) — No description in source JSDoc. (number) — What fraction of the full range to vary (default 0.1 = 10%) Returns: } Get parameter groups from a schema (for UI grouping). Parameters: (Object) — No description in source JSDoc. Returns: group name → array of param keys Constants <! HUMAN NOTES Notes & Examples Audio Graph","contentHash":"1837b2a5b1ec326764a68d7e8678f806783c9d5eb1bdad6e6d2d039ed125980f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SoundSchema.md::0001","path":"engine/reference/audio/synth/SoundSchema.md","title":"audio/synth/SoundSchema.js","description":"","kind":"reference","source":"engine/audio/synth/SoundSchema.js","updated":"","headings":["audio/synth/SoundSchema.js","Functions","getSchema(type)","getSchemaNames()","validateParams(params, schema)","defaultsFromSchema(schema)","variationRangesFromSchema(schema, proportion = 0.1)","getParamGroups(schema)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"Parameters: (Object) — No description in source JSDoc. Returns: group name → array of param keys Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"f0ffc49a7bb938f270ea74def3ca19483f639f15752477e326b1522075586923"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SynthManager.md::0000","path":"engine/reference/audio/synth/SynthManager.md","title":"audio/synth/SynthManager.js","description":"","kind":"reference","source":"engine/audio/synth/SynthManager.js","updated":"","headings":["audio/synth/SynthManager.js","Functions","createSynthManager(context, destination)","async initSynthManager(manager, workletUrl)","registerPatch(manager, patchJson)","getPatch(manager, patchId)","createPatchInstance(manager, patchId, options = {})","setInstanceParam(manager, instanceId, paramName, value)","setInstanceVolume(manager, instanceId, volume)","destroyPatchInstance(manager, instanceId, fadeOut = 0.05)","destroyAllInstances(manager)","destroySynthManager(manager)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SynthManager.js Main Thread Synthesis Orchestrator Manages AudioWorklet registration, patch instance lifecycle, parameter updates via MessagePort and SharedArrayBuffer. Functions Create a synth manager. Parameters: (AudioContext) — No description in source JSDoc. (AudioNode) — Node to connect synth output to Initialize the synth manager — register the AudioWorklet. Parameters: (Object) — No description in source JSDoc. (string) — URL to PatchRunner.worklet.js Register a patch in the library (compile and cache). Parameters: (Object) — No description in source JSDoc. (Object) — Raw patch JSON Returns: true if compiled successfully Get a compiled patch plan. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Create and start a patch instance (a playing synth voice). Parameters: (Object) — No description in source JSDoc. (string) — ID of registered patch (Object) — No description in source JSDoc. (number) — Output volume (default 1.0) (AudioNode) — Override destination node Returns: Instance ID Set an exposed parameter on a running instance. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (string) — Exposed parameter name (number) — No description in source JSDoc. Set volume on a running instance. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Stop and destroy a patch instance. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Seconds (default 0.05) Stop all instances. Parameters: (Object) — No description in source JSDoc. Destroy the","contentHash":"024d741be611b57bb6fff006b6e253994f1f16e41b6193cb7d8f69de645aefa2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/SynthManager.md::0001","path":"engine/reference/audio/synth/SynthManager.md","title":"audio/synth/SynthManager.js","description":"","kind":"reference","source":"engine/audio/synth/SynthManager.js","updated":"","headings":["audio/synth/SynthManager.js","Functions","createSynthManager(context, destination)","async initSynthManager(manager, workletUrl)","registerPatch(manager, patchJson)","getPatch(manager, patchId)","createPatchInstance(manager, patchId, options = {})","setInstanceParam(manager, instanceId, paramName, value)","setInstanceVolume(manager, instanceId, volume)","destroyPatchInstance(manager, instanceId, fadeOut = 0.05)","destroyAllInstances(manager)","destroySynthManager(manager)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"— No description in source JSDoc. (number) — Seconds (default 0.05) Stop all instances. Parameters: (Object) — No description in source JSDoc. Destroy the synth manager. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"ccc9bb1561abd010838d929370fe0b30aada5a9aaa219b7f7959b006b3dc25ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/VariationGenerator.md::0000","path":"engine/reference/audio/synth/VariationGenerator.md","title":"audio/synth/VariationGenerator.js","description":"","kind":"reference","source":"engine/audio/synth/VariationGenerator.js","updated":"","headings":["audio/synth/VariationGenerator.js","Functions","createVariationConfig(baseParams, ranges = {}, options = {})","createVariationConfigFromSchema(baseParams, schema, proportion = 0.1, options = {})","lockParam(vc, key)","unlockParam(vc, key)","setRange(vc, key, range)","setLimits(vc, key, min, max)","generateVariations(vc, count = 10)","generateOneVariation(vc)","renderVariationBatch(ctx, paramsList, renderFn)","async renderVariationBatchAsync(ctx, paramsList, renderFn, onProgress = null)","readSoundPaletteRecord(storage = globalThis.localStorage)","writeSoundPaletteRecord(palette, storage = globalThis.localStorage)","createSoundPalette()","addToPalette(palette, entry)","removeFromPalette(palette, id)","searchPalette(palette, query = {})","savePalette(palette, storage = globalThis.localStorage)","loadPalette(storage = globalThis.localStorage)","exportPalette(palette)","importPalette(json)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create a variation configuration. Parameters: (Object) — Base parameter object (e.g., from createSfxParams) (Object) — Per key random range amounts (absolute ±). Keys must match baseParams. (Object) — No description in source JSDoc. (boolean) — If true, variations stay within [base range, base+range]. Otherwise unclamped. (Object) — Per key [min, max] clamp limits Returns: Variation config Create a variation config from a SoundSchema. Auto derives ranges and limits from the schema definition. Parameters: (Object) — Base parameter object (Object) — Schema from SoundSchema.js (e.g., SFX SCHEMA) (number) — Fraction of full range to vary (default 0.1 = 10%) (Object) — { lockedKeys } Returns: Variation config Lock a parameter so it won't be varied. Parameters: (Object) — Variation config (string) — No description in source JSDoc. Unlock a parameter for variation. Parameters: (Object) — Variation config (string) — No description in source JSDoc. Set the random range for a","contentHash":"47a85380a3c2097a3b07943158a56b0d4378f4444f64b21d606297acb69b1d52"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/VariationGenerator.md::0001","path":"engine/reference/audio/synth/VariationGenerator.md","title":"audio/synth/VariationGenerator.js","description":"","kind":"reference","source":"engine/audio/synth/VariationGenerator.js","updated":"","headings":["audio/synth/VariationGenerator.js","Functions","createVariationConfig(baseParams, ranges = {}, options = {})","createVariationConfigFromSchema(baseParams, schema, proportion = 0.1, options = {})","lockParam(vc, key)","unlockParam(vc, key)","setRange(vc, key, range)","setLimits(vc, key, min, max)","generateVariations(vc, count = 10)","generateOneVariation(vc)","renderVariationBatch(ctx, paramsList, renderFn)","async renderVariationBatchAsync(ctx, paramsList, renderFn, onProgress = null)","readSoundPaletteRecord(storage = globalThis.localStorage)","writeSoundPaletteRecord(palette, storage = globalThis.localStorage)","createSoundPalette()","addToPalette(palette, entry)","removeFromPalette(palette, id)","searchPalette(palette, query = {})","savePalette(palette, storage = globalThis.localStorage)","loadPalette(storage = globalThis.localStorage)","exportPalette(palette)","importPalette(json)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":3,"text":"source JSDoc. Unlock a parameter for variation. Parameters: (Object) — Variation config (string) — No description in source JSDoc. Set the random range for a specific parameter. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (number) — Absolute ± range Set per key min/max limits. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Generate N parameter variations from a variation config. Parameters: (Object) — Variation config from createVariationConfig (number) — Number of variations to generate Returns: Array of parameter objects Generate a single variation. Parameters: (Object) — No description in source JSDoc. Render an array of parameter variations to AudioBuffers. Parameters: (AudioContext) — No description in source JSDoc. (Object[]) — Array of parameter objects (Function) — Render function: (ctx, params) = AudioBuffer Render variations async (yields between each to avoid blocking). Parameters: (AudioContext) — No description in source JSDoc. (Object[]) — No description in source JSDoc. (Function) — No description in source JSDoc. (Function) — (index, total) callback Create a sound palette for organizing favorite sounds. Add a sound to the palette. Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — e.g., 'sfx', 'fm', 'karplus', 'blend' (Object) — The parameter object (string[]) — Optional tags Returns: Entry ID Remove a sound from the palette. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Find sounds in the palette by category or tag.","contentHash":"500574c40dbb307661db45c9b069475dc89bae1451bb0078697633f6dd054c9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/VariationGenerator.md::0002","path":"engine/reference/audio/synth/VariationGenerator.md","title":"audio/synth/VariationGenerator.js","description":"","kind":"reference","source":"engine/audio/synth/VariationGenerator.js","updated":"","headings":["audio/synth/VariationGenerator.js","Functions","createVariationConfig(baseParams, ranges = {}, options = {})","createVariationConfigFromSchema(baseParams, schema, proportion = 0.1, options = {})","lockParam(vc, key)","unlockParam(vc, key)","setRange(vc, key, range)","setLimits(vc, key, min, max)","generateVariations(vc, count = 10)","generateOneVariation(vc)","renderVariationBatch(ctx, paramsList, renderFn)","async renderVariationBatchAsync(ctx, paramsList, renderFn, onProgress = null)","readSoundPaletteRecord(storage = globalThis.localStorage)","writeSoundPaletteRecord(palette, storage = globalThis.localStorage)","createSoundPalette()","addToPalette(palette, entry)","removeFromPalette(palette, id)","searchPalette(palette, query = {})","savePalette(palette, storage = globalThis.localStorage)","loadPalette(storage = globalThis.localStorage)","exportPalette(palette)","importPalette(json)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":2,"chunkCount":3,"text":"the palette. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Find sounds in the palette by category or tag. Parameters: (Object) — No description in source JSDoc. (Object) — { category?, tag?, name? } Save palette to localStorage. Parameters: (Object) — No description in source JSDoc. Load palette from localStorage. Export palette as JSON string (for sharing/backup). Parameters: (Object) — No description in source JSDoc. Import palette from JSON string. Parameters: (string) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form proces","contentHash":"3883f2d379c539ab10153c1b9f1bf93b1fdb6b6146f8aa17846dfa1118605882"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/WebAudioNodeFactory.md::0000","path":"engine/reference/audio/synth/WebAudioNodeFactory.md","title":"audio/synth/WebAudioNodeFactory.js","description":"","kind":"reference","source":"engine/audio/synth/WebAudioNodeFactory.js","updated":"","headings":["audio/synth/WebAudioNodeFactory.js","Functions","normalizeWaveShape(shape)","buildVoice(ctx, patch, pitchRatio = 1.0)","createWebAudioNode(ctx, node, pitchRatio = 1.0)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Normalize oscillator wave shape names to Web Audio API values. Build a complete voice from a patch graph, scaling frequencies by pitchRatio. Parameters: (AudioContext) — No description in source JSDoc. (Object) — { nodes: [...], wires: [...] } (number) — No description in source JSDoc. Returns: null} Create a Web Audio node (or subgraph) for a given patch graph node definition. Returns { output, input, inputMap?, sources } or null. Parameters: (AudioContext) — No description in source JSDoc. (Object) — { id, type, params } (number) — Frequency scaling factor <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens","contentHash":"f680c677c0ff91216d14513e4cd73adff66173f53a855b4ed0cefe5ec46a045d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/WebAudioNodeFactory.md::0001","path":"engine/reference/audio/synth/WebAudioNodeFactory.md","title":"audio/synth/WebAudioNodeFactory.js","description":"","kind":"reference","source":"engine/audio/synth/WebAudioNodeFactory.js","updated":"","headings":["audio/synth/WebAudioNodeFactory.js","Functions","normalizeWaveShape(shape)","buildVoice(ctx, patch, pitchRatio = 1.0)","createWebAudioNode(ctx, node, pitchRatio = 1.0)","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"b9aaf465cd36efd2498fcb0597653553c3f7eb031623d48b8ad9e31ee4a5217c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/index.md::0000","path":"engine/reference/audio/synth/index.md","title":"audio/synth/index.js","description":"","kind":"reference","source":"engine/audio/synth/index.js","updated":"","headings":["audio/synth/index.js","Re-exports","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/audio/synth/index.js — Barrel export for procedural synthesis engine. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"0d50998d92a873a0a36cf342dfb2c9ea2aa3eda121aef155560fa4069d65e87a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/FMOperatorNode.md::0000","path":"engine/reference/audio/synth/nodes/FMOperatorNode.md","title":"audio/synth/nodes/FMOperatorNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/FMOperatorNode.js","updated":"","headings":["audio/synth/nodes/FMOperatorNode.js","Functions","renderFM(ctx, config = {})","renderFM4(ctx, config = {})","playFM(ctx, config = {}, destination = null)","getFMPresetNames()","createFMPatch(config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 }); Functions Render 2 operator FM synthesis to an AudioBuffer. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Render a 4 operator FM stack. Operators are chained: op4 → op3 → op2 → op1 (carrier). Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (Object[]) — Array of 4 operator configs Play FM synthesis directly. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (AudioNode) — No description in source JSDoc. Get list of FM preset names. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects","contentHash":"33dfd88855d4e4adec18ccda12f01334e4894cb28f922a154b8e65eff2268f8f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/FMOperatorNode.md::0001","path":"engine/reference/audio/synth/nodes/FMOperatorNode.md","title":"audio/synth/nodes/FMOperatorNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/FMOperatorNode.js","updated":"","headings":["audio/synth/nodes/FMOperatorNode.js","Functions","renderFM(ctx, config = {})","renderFM4(ctx, config = {})","playFM(ctx, config = {}, destination = null)","getFMPresetNames()","createFMPatch(config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"73bf466bc38bb893b1fa982bc2df89033f51caafc76c7103a7730bf5acdacba8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/FormantFilterNode.md::0000","path":"engine/reference/audio/synth/nodes/FormantFilterNode.md","title":"audio/synth/nodes/FormantFilterNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/FormantFilterNode.js","updated":"","headings":["audio/synth/nodes/FormantFilterNode.js","Functions","createFormantFilter(ctx, config = {})","setFormantVowel(instance, vowelName)","setFormantFrequencies(instance, frequencies, bandwidths, gains)","morphFormants(instance, vowelA, vowelB, blend)","setFormantMorphTime(instance, seconds)","destroyFormantFilter(instance)","getFormantPresetNames()","createFormantPatch(config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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'); Functions Create a formant filter bank. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (string) — Initial vowel preset name (default 'A') (number) — Number of formants to use 1 5 (default 5) (number) — Time to morph between vowels in seconds (default 0.1) Returns: Formant filter instance Set the formant filter to a vowel preset. Parameters: (Object) — No description in source JSDoc. (string) — Key from FORMANT PRESETS Set formant frequencies directly (bypass presets). Parameters: (Object) — No description in source JSDoc. (number[]) — Array of formant frequencies (number[]) — Array of bandwidths (number[]) — Array of gain values Morph between two vowel presets. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (number) — 0 = fully A, 1 = fully B Set morph time (transition speed). Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Destroy the formant filter and","contentHash":"49d564b5aa2b93327ae5d1b0812b622871e72807659d55b7848962c2ab8473b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/FormantFilterNode.md::0001","path":"engine/reference/audio/synth/nodes/FormantFilterNode.md","title":"audio/synth/nodes/FormantFilterNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/FormantFilterNode.js","updated":"","headings":["audio/synth/nodes/FormantFilterNode.js","Functions","createFormantFilter(ctx, config = {})","setFormantVowel(instance, vowelName)","setFormantFrequencies(instance, frequencies, bandwidths, gains)","morphFormants(instance, vowelA, vowelB, blend)","setFormantMorphTime(instance, seconds)","destroyFormantFilter(instance)","getFormantPresetNames()","createFormantPatch(config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"morph time (transition speed). Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Destroy the formant filter and release resources. Parameters: (Object) — No description in source JSDoc. Get list of available formant preset names. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"cb8a858a3272b1094bae53b6b9de65c32f4cbc0810c13e2ca9d065c9c3820c4e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/GranularNode.md::0000","path":"engine/reference/audio/synth/nodes/GranularNode.md","title":"audio/synth/nodes/GranularNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/GranularNode.js","updated":"","headings":["audio/synth/nodes/GranularNode.js","Functions","createGranularEngine(ctx, buffer, config = {})","startGranular(engine)","stopGranular(engine, fadeTime = 0.1)","setGranularParam(engine, key, value)","setGranularBuffer(engine, buffer)","connectGranular(engine, destination)","destroyGranular(engine)","createGranularPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a granular synthesis engine. Parameters: (AudioContext) — No description in source JSDoc. (AudioBuffer) — Source sample to granulate (Object) — No description in source JSDoc. Returns: Granular engine instance Start the granular engine — begins spawning grains. Parameters: (Object) — No description in source JSDoc. Stop the granular engine. Parameters: (Object) — No description in source JSDoc. (number) — Fade out in seconds Set a granular parameter. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. ( ) — No description in source JSDoc. Replace the source buffer. Parameters: (Object) — No description in source JSDoc. (AudioBuffer) — No description in source JSDoc. Connect granular output to a destination. Parameters: (Object) — No description in source JSDoc. (AudioNode) — No description in source JSDoc. Destroy and clean up. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All","contentHash":"e06e4f1c5b4d921290074f77e9e5dee9dc92f61c966ebf4ca466816941b53fd4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/GranularNode.md::0001","path":"engine/reference/audio/synth/nodes/GranularNode.md","title":"audio/synth/nodes/GranularNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/GranularNode.js","updated":"","headings":["audio/synth/nodes/GranularNode.js","Functions","createGranularEngine(ctx, buffer, config = {})","startGranular(engine)","stopGranular(engine, fadeTime = 0.1)","setGranularParam(engine, key, value)","setGranularBuffer(engine, buffer)","connectGranular(engine, destination)","destroyGranular(engine)","createGranularPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"10f0783b9c3fe23c36cbc1a28ad3c10409529b8dda447cb6ae0bb01c2ef79428"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/ImpulseNode.md::0000","path":"engine/reference/audio/synth/nodes/ImpulseNode.md","title":"audio/synth/nodes/ImpulseNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/ImpulseNode.js","updated":"","headings":["audio/synth/nodes/ImpulseNode.js","Functions","createImpulseEngine(ctx, config = {})","generateImpulseBuffer(ctx, config = {})","isValidImpulseShape(shape)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a real time impulse generator engine. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: Engine instance Generate a single impulse as an AudioBuffer. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"eccf3d231e97a3f124ec1e95bdfccfc436b1d581fc352fba64eec84fa2e9d5c3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/KarplusStrongNode.md::0000","path":"engine/reference/audio/synth/nodes/KarplusStrongNode.md","title":"audio/synth/nodes/KarplusStrongNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/KarplusStrongNode.js","updated":"","headings":["audio/synth/nodes/KarplusStrongNode.js","Functions","renderKarplusStrong(ctx, config = {})","playKarplusStrong(ctx, config = {}, destination = null)","createKarplusStrongPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Render a Karplus Strong plucked string to an AudioBuffer. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — Pitch in Hz (default 220) (number) — Decay time in seconds (default 2.0) (number) — LP filter amount 0 1 (1=bright, 0=dark) (default 0.5) (string) — 'noise' 'impulse' 'sine' (default 'noise') (number) — Allpass stretch factor 0 1 (default 0) (number) — Output volume 0 1 (default 0.8) (number) — Max render duration in seconds (default decay 1.5) Play a Karplus Strong sound directly. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (AudioNode) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas:","contentHash":"3b3fb7499ea0d8cfd8cbcae32ded233dc5fa3b142b46d2ea811a3734d5d2afa5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/KarplusStrongNode.md::0001","path":"engine/reference/audio/synth/nodes/KarplusStrongNode.md","title":"audio/synth/nodes/KarplusStrongNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/KarplusStrongNode.js","updated":"","headings":["audio/synth/nodes/KarplusStrongNode.js","Functions","renderKarplusStrong(ctx, config = {})","playKarplusStrong(ctx, config = {}, destination = null)","createKarplusStrongPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"ed22e9c265e8b263f1d1b66017deef665a5fb909557226c9eee25dad0206595c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/MidiInputNode.md::0000","path":"engine/reference/audio/synth/nodes/MidiInputNode.md","title":"audio/synth/nodes/MidiInputNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/MidiInputNode.js","updated":"","headings":["audio/synth/nodes/MidiInputNode.js","Functions","async requestMidiAccess()","getMidiInputs()","createMidiInput(config = {})","createMidiCCMap(config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Request MIDI access from the browser. Returns: True if access granted Get list of available MIDI inputs. Returns: } Create a MIDI input node that processes incoming MIDI messages. Parameters: (Object) — No description in source JSDoc. (number) — MIDI channel (0 15, or 1 for omni) (number) — CC number to track (number) — Note transpose amount (string) — Velocity response curve Returns: MIDI input instance Create a CC mapper that scales CC values to a target range. Parameters: (Object) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a","contentHash":"865a2cc5ee751fb737b69810e5340914ba530256cc3d90e55278d14d2df615cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/MidiInputNode.md::0001","path":"engine/reference/audio/synth/nodes/MidiInputNode.md","title":"audio/synth/nodes/MidiInputNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/MidiInputNode.js","updated":"","headings":["audio/synth/nodes/MidiInputNode.js","Functions","async requestMidiAccess()","getMidiInputs()","createMidiInput(config = {})","createMidiCCMap(config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"22f9204b6a320dfd896bc4aaa08adcca05eb7d72a3cc2a171379a708062ad158"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/ModalBankNode.md::0000","path":"engine/reference/audio/synth/nodes/ModalBankNode.md","title":"audio/synth/nodes/ModalBankNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/ModalBankNode.js","updated":"","headings":["audio/synth/nodes/ModalBankNode.js","Functions","calculateModeFrequencies(formula, f0, modeCount, inharmonicity = 0)","calculateModeAmplitudes(modeCount, strikePosition, brightness = 0.5)","calculateModeDecays(frequencies, baseDamping, highDamp, f0)","createModalBank(ctx, config = {})","isValidMaterial(material)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Calculate modal frequencies based on material formula. Parameters: (string) — 'stiffString', 'beam', 'circularMembrane', 'plate' (number) — Fundamental frequency (number) — Number of modes to generate (number) — Stretch factor B Returns: Array of mode frequencies Calculate mode amplitudes based on strike position. Parameters: (number) — Number of modes (number) — 0 1 position along resonator (number) — Spectral tilt 0 1 Returns: Array of mode amplitudes Calculate mode decay times based on frequency and damping. Parameters: (number[]) — Mode frequencies (number) — Base decay time (0 1, higher = longer) (number) — High frequency damping (0 1, higher = more damping) (number) — Reference frequency for scaling Returns: Array of decay times in seconds Create a modal bank synthesis engine. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: Modal bank instance Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay,","contentHash":"9cedcaa3fbb60044b7617c90e109721f483276806ac3599f41101dd8398830e4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/ModalBankNode.md::0001","path":"engine/reference/audio/synth/nodes/ModalBankNode.md","title":"audio/synth/nodes/ModalBankNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/ModalBankNode.js","updated":"","headings":["audio/synth/nodes/ModalBankNode.js","Functions","calculateModeFrequencies(formula, f0, modeCount, inharmonicity = 0)","calculateModeAmplitudes(modeCount, strikePosition, brightness = 0.5)","calculateModeDecays(frequencies, baseDamping, highDamp, f0)","createModalBank(ctx, config = {})","isValidMaterial(material)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"f9ff57a7645d5bfad45e98ab6a3aded81cb1d203da6c6f5be2d86e4d5a702df2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/NoiseGeneratorNode.md::0000","path":"engine/reference/audio/synth/nodes/NoiseGeneratorNode.md","title":"audio/synth/nodes/NoiseGeneratorNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/NoiseGeneratorNode.js","updated":"","headings":["audio/synth/nodes/NoiseGeneratorNode.js","Functions","createNoiseBuffer(ctx, color = 'white', duration = DEFAULTDURATION, options = {})","createNoiseSource(ctx, color = 'white', options = {})","createStereoNoiseSource(ctx, color = 'white', options = {})","isValidNoiseColor(color)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a noise AudioBuffer of the specified color. Parameters: (AudioContext) — No description in source JSDoc. (string) — Noise color (white pink brown blue violet grey velvet crackle) (number) — Buffer duration in seconds (Object) — No description in source JSDoc. (number) — Impulses/sec for velvet/crackle (default 100) (boolean) — Generate stereo buffer (default false) Create a looping noise source node. Parameters: (AudioContext) — No description in source JSDoc. (string) — Noise color (Object) — No description in source JSDoc. (number) — Buffer duration (default 2s) (number) — For velvet/crackle (number) — LP filter cutoff (null = no filter) (boolean) — Stereo decorrelation Returns: } Create stereo noise with decorrelated channels. Parameters: (AudioContext) — No description in source JSDoc. (string) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: } Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread","contentHash":"a0aa1b33707421f65d2325c12ac03f4fb88b204382225a9dad38247a328d3b9f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/NoiseGeneratorNode.md::0001","path":"engine/reference/audio/synth/nodes/NoiseGeneratorNode.md","title":"audio/synth/nodes/NoiseGeneratorNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/NoiseGeneratorNode.js","updated":"","headings":["audio/synth/nodes/NoiseGeneratorNode.js","Functions","createNoiseBuffer(ctx, color = 'white', duration = DEFAULTDURATION, options = {})","createNoiseSource(ctx, color = 'white', options = {})","createStereoNoiseSource(ctx, color = 'white', options = {})","isValidNoiseColor(color)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"c802d5d64a7fc964fe3c9ee3d2a553e8bd226fed61ea9822f7d012e4de18f09b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/OscillatorNode.md::0000","path":"engine/reference/audio/synth/nodes/OscillatorNode.md","title":"audio/synth/nodes/OscillatorNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/OscillatorNode.js","updated":"","headings":["audio/synth/nodes/OscillatorNode.js","Functions","createOscillator(ctx, config = {})","isValidShape(shape)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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(); Functions Create an advanced oscillator node. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — Base frequency in Hz (number) — Detune in cents (string) — Waveform shape (number) — Duty cycle for pulse wave (0 1) (number) — Number of unison voices for supersaw (number) — Detune spread in cents for supersaw (number) — Sub oscillator: 0=off, 1= 1oct, 2= 2oct (number) — Sub oscillator mix level (0 1) (Float32Array) — Custom wavetable harmonics Returns: Oscillator instance Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form","contentHash":"43963d3cee8dc2297d5bff58be2c51ef5d27b13781928e8d6092c2e4a4b90278"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/OscillatorNode.md::0001","path":"engine/reference/audio/synth/nodes/OscillatorNode.md","title":"audio/synth/nodes/OscillatorNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/OscillatorNode.js","updated":"","headings":["audio/synth/nodes/OscillatorNode.js","Functions","createOscillator(ctx, config = {})","isValidShape(shape)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"a0946ea37f6984ebba40d0f8a5f0622dfdf64ab78219c5318fce27b9972140b3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/SamplePlayerNode.md::0000","path":"engine/reference/audio/synth/nodes/SamplePlayerNode.md","title":"audio/synth/nodes/SamplePlayerNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/SamplePlayerNode.js","updated":"","headings":["audio/synth/nodes/SamplePlayerNode.js","Functions","createSamplePlayer(ctx, buffer, config = {})","createCrossfadeLoopBuffer(ctx, buffer, loopStart, loopEnd, crossfadeDuration)","isValidLoopMode(mode)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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(); Functions Create an advanced sample player. Parameters: (AudioContext) — No description in source JSDoc. (AudioBuffer) — Source audio buffer (Object) — No description in source JSDoc. Returns: Sample player instance Create a crossfade loop buffer. Blends the end of the loop region back into the start for seamless looping. Parameters: (AudioContext) — No description in source JSDoc. (AudioBuffer) — No description in source JSDoc. (number) — Loop start in seconds (number) — Loop end in seconds (number) — Crossfade length in seconds Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion.","contentHash":"28d50f9e634f9a8d7917c2cb040c67100fe39a44e3c168660452a0be17635d87"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/SamplePlayerNode.md::0001","path":"engine/reference/audio/synth/nodes/SamplePlayerNode.md","title":"audio/synth/nodes/SamplePlayerNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/SamplePlayerNode.js","updated":"","headings":["audio/synth/nodes/SamplePlayerNode.js","Functions","createSamplePlayer(ctx, buffer, config = {})","createCrossfadeLoopBuffer(ctx, buffer, loopStart, loopEnd, crossfadeDuration)","isValidLoopMode(mode)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"(filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"d3a491e420b422fb095513176c325eb9bcbf7b9eac34434efd67a5892ac07e21"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/SequencerNode.md::0000","path":"engine/reference/audio/synth/nodes/SequencerNode.md","title":"audio/synth/nodes/SequencerNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/SequencerNode.js","updated":"","headings":["audio/synth/nodes/SequencerNode.js","Functions","createClock(ctx, config = {})","createStepSequencer(ctx, config = {})","createArpeggiator(ctx, config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a master clock with BPM and time signature. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Create a step sequencer. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Create an arpeggiator. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"361ec2089dcda8f0f391aada6bf210049a313f187ff0a02edc4764089aa233c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/SynthesisTypes.md::0000","path":"engine/reference/audio/synth/nodes/SynthesisTypes.md","title":"audio/synth/nodes/SynthesisTypes.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/SynthesisTypes.js","updated":"","headings":["audio/synth/nodes/SynthesisTypes.js","Functions","createAdditiveSynth(ctx, config = {})","createWavetableSynth(ctx, config = {})","createPhaseDistortionSynth(ctx, config = {})","createSubtractiveSynth(ctx, config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 }); Functions Create an additive synthesizer. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Create a wavetable synthesizer. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Create a phase distortion synthesizer (CZ style). Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Create a classic subtractive synthesizer voice. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API","contentHash":"416d22952c296411a4abac8511546be2b64afd3f3497c5b16deeaf8cf2417a7a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/SynthesisTypes.md::0001","path":"engine/reference/audio/synth/nodes/SynthesisTypes.md","title":"audio/synth/nodes/SynthesisTypes.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/SynthesisTypes.js","updated":"","headings":["audio/synth/nodes/SynthesisTypes.js","Functions","createAdditiveSynth(ctx, config = {})","createWavetableSynth(ctx, config = {})","createPhaseDistortionSynth(ctx, config = {})","createSubtractiveSynth(ctx, config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"84e6e0bca367703e7f3381ab863b3c3662d5318d41b7c26f3b8302eed91d1999"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/WaveguideNode.md::0000","path":"engine/reference/audio/synth/nodes/WaveguideNode.md","title":"audio/synth/nodes/WaveguideNode.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/WaveguideNode.js","updated":"","headings":["audio/synth/nodes/WaveguideNode.js","Functions","renderWaveguide(ctx, config = {})","createWaveguide(ctx, config = {})","isValidTermination(term)","isValidWaveguideMode(mode)","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Render a waveguide to an AudioBuffer (offline). Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Create a real time waveguide engine using Web Audio nodes. This is a simplified version using delay + filter + feedback. Parameters: (AudioContext) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: Waveguide instance Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"80c0bebbc024b770c8fff92407dc470953b0e4dfd3a44e2f46649fb79d0dbdd0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/atoms/CrackleAtom.md::0000","path":"engine/reference/audio/synth/nodes/atoms/CrackleAtom.md","title":"audio/synth/nodes/atoms/CrackleAtom.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/atoms/CrackleAtom.js","updated":"","headings":["audio/synth/nodes/atoms/CrackleAtom.js","Functions","createCrackleAtomPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"86990dc08045b4f0ca079e27f3567530fd79929308683516ff0636c29c8fdd6c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/atoms/DropAtom.md::0000","path":"engine/reference/audio/synth/nodes/atoms/DropAtom.md","title":"audio/synth/nodes/atoms/DropAtom.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/atoms/DropAtom.js","updated":"","headings":["audio/synth/nodes/atoms/DropAtom.js","Functions","createDropAtomPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"9924ca6d7ea09b5f3f2811a3105fcbd50f2c7654386a51c1fe7cf6528a8140f8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/atoms/HissAtom.md::0000","path":"engine/reference/audio/synth/nodes/atoms/HissAtom.md","title":"audio/synth/nodes/atoms/HissAtom.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/atoms/HissAtom.js","updated":"","headings":["audio/synth/nodes/atoms/HissAtom.js","Functions","createHissAtomPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"3062c90803950f07bbbed74eccf342d4389e0c14adc3999df2a556b3fe183565"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/atoms/RumbleAtom.md::0000","path":"engine/reference/audio/synth/nodes/atoms/RumbleAtom.md","title":"audio/synth/nodes/atoms/RumbleAtom.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/atoms/RumbleAtom.js","updated":"","headings":["audio/synth/nodes/atoms/RumbleAtom.js","Functions","createRumbleAtomPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"8ebc9dfbf8e6be65186d4ac875c2d72e4c79e1b92a9028a8b90c5ee241504b46"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/atoms/WhooshAtom.md::0000","path":"engine/reference/audio/synth/nodes/atoms/WhooshAtom.md","title":"audio/synth/nodes/atoms/WhooshAtom.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/atoms/WhooshAtom.js","updated":"","headings":["audio/synth/nodes/atoms/WhooshAtom.js","Functions","createWhooshAtomPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"2e9fb185a827d0de712035c36999635e626e227b8893afe97cd0d6d1d743bd0b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/instruments/InstrumentPresets.md::0000","path":"engine/reference/audio/synth/nodes/instruments/InstrumentPresets.md","title":"audio/synth/nodes/instruments/InstrumentPresets.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/instruments/InstrumentPresets.js","updated":"","headings":["audio/synth/nodes/instruments/InstrumentPresets.js","Functions","midiToFreq(note)","freqToMidi(freq)","createPianoInstrument(ctx, config = {})","createStringsInstrument(ctx, config = {})","createBrassInstrument(ctx, config = {})","createPadSynth(ctx, config = {})","createLeadSynth(ctx, config = {})","createBassSynth(ctx, config = {})","createDrumSynth(ctx, config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Convert MIDI note number to frequency. Parameters: (number) — MIDI note (0 127) Returns: Frequency in Hz Convert frequency to MIDI note number. Parameters: (number) — Frequency in Hz Returns: MIDI note (fractional) Create a piano instrument using Karplus Strong + FM. Create a string ensemble instrument. Create a brass instrument with growl and brightness. Create a lush pad synthesizer. Create a mono lead synthesizer with glide. Create a bass synthesizer. Create an analog style drum synthesizer. Constants <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See","contentHash":"52f0e3a40a17a5825f0a08bb726bc47c4989e73674c1db3e3d46fce313b3c966"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/instruments/InstrumentPresets.md::0001","path":"engine/reference/audio/synth/nodes/instruments/InstrumentPresets.md","title":"audio/synth/nodes/instruments/InstrumentPresets.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/instruments/InstrumentPresets.js","updated":"","headings":["audio/synth/nodes/instruments/InstrumentPresets.js","Functions","midiToFreq(note)","freqToMidi(freq)","createPianoInstrument(ctx, config = {})","createStringsInstrument(ctx, config = {})","createBrassInstrument(ctx, config = {})","createPadSynth(ctx, config = {})","createLeadSynth(ctx, config = {})","createBassSynth(ctx, config = {})","createDrumSynth(ctx, config = {})","Constants","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"48ab433f634881e360c00bf870bab1b42c35dbb0e40e1eb76ad9caaeb543ae79"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/physics/CombustionModel.md::0000","path":"engine/reference/audio/synth/nodes/physics/CombustionModel.md","title":"audio/synth/nodes/physics/CombustionModel.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/physics/CombustionModel.js","updated":"","headings":["audio/synth/nodes/physics/CombustionModel.js","Functions","createCombustionPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"1fcd7a3fd96c8a170184d31417fccb3cc47e5699713fe0de959f15342e335329"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/physics/FluidModel.md::0000","path":"engine/reference/audio/synth/nodes/physics/FluidModel.md","title":"audio/synth/nodes/physics/FluidModel.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/physics/FluidModel.js","updated":"","headings":["audio/synth/nodes/physics/FluidModel.js","Functions","createFluidPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FluidModel.js Fluid/Water Synthesis Model Combines Drop atoms (splashes) + Hiss (flow) for liquid sounds. Driven by: emitRate, velocity, splash rate Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"568d62e92797c550f3c8ac6118c9c7eb7bba2d0cd3e4e34ecea5b8dd25bd0068"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/physics/ModalImpactModel.md::0000","path":"engine/reference/audio/synth/nodes/physics/ModalImpactModel.md","title":"audio/synth/nodes/physics/ModalImpactModel.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/physics/ModalImpactModel.js","updated":"","headings":["audio/synth/nodes/physics/ModalImpactModel.js","Functions","getModalPreset(material)","getModalMaterials()","createModalImpactPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Get modal preset for a material. Parameters: (string) — No description in source JSDoc. Get all available material names. Generate a ModalImpact patch descriptor for a given material. Parameters: (Object) — No description in source JSDoc. (string) — 'metal' 'glass' 'wood' 'stone' 'ice' 'ceramic' (number) — Scale all mode frequencies (default 1.0) (number) — Output volume (default 0.8) Returns: Patch JSON <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large","contentHash":"77c5c7e85f98cb6da6f202eacfb03847e1d764ca442ca34459aa9db5ec369a83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/physics/ModalImpactModel.md::0001","path":"engine/reference/audio/synth/nodes/physics/ModalImpactModel.md","title":"audio/synth/nodes/physics/ModalImpactModel.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/physics/ModalImpactModel.js","updated":"","headings":["audio/synth/nodes/physics/ModalImpactModel.js","Functions","getModalPreset(material)","getModalMaterials()","createModalImpactPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":1,"chunkCount":2,"text":"Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"546cb04b0c4c561ebbff5c4e7470092aa7b411868342dd2357508df2b5ebe5dd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/physics/WeatherModel.md::0000","path":"engine/reference/audio/synth/nodes/physics/WeatherModel.md","title":"audio/synth/nodes/physics/WeatherModel.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/physics/WeatherModel.js","updated":"","headings":["audio/synth/nodes/physics/WeatherModel.js","Functions","createWeatherPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WeatherModel.js Weather Synthesis Model Rain (grain cloud of drops), hail, thunder (rumble). Driven by: weather type, intensity Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"3abe1ca451cefb38e8f493b762d47f26067889db5c5b956d31c94adfade02d33"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/audio/synth/nodes/physics/WindModel.md::0000","path":"engine/reference/audio/synth/nodes/physics/WindModel.md","title":"audio/synth/nodes/physics/WindModel.js","description":"","kind":"reference","source":"engine/audio/synth/nodes/physics/WindModel.js","updated":"","headings":["audio/synth/nodes/physics/WindModel.js","Functions","createWindPatch(config = {})","Notes & Examples","Audio Graph Architecture","Audio Graph Architecture"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WindModel.js Wind Synthesis Model Combines Whoosh + Rumble, with gust modulation from WindSystem. Driven by: windSpeed, gustiness Functions <! HUMAN NOTES Notes & Examples Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain See also: Audio · Engine Overview Audio Graph Architecture The audio system uses a node based graph architecture. AudioNodes connect to form processing chains: sources (oscillator, buffer) → effects (filter, delay, reverb) → destination (speakers). All processing happens on the audio thread via the Web Audio API with automatic sample rate conversion. Example: Creating a sound effect chain Advanced: Loading and playing audio assets Advanced: 3D spatial audio Advanced: Mixing and buses Gotchas: AudioContext state : Browsers block audio until user interaction. Call after a click. Memory : holds raw PCM — unload large files when not needed. Scheduling : Use for precise rhythm; drifts vs . See also: Audio · Engine Overview","contentHash":"2745224b7f1340e2babaf8dcf0ac5cae4599320ccb819c7bdfae8a2a80db470e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabAnonymousRelay.md::0000","path":"engine/reference/collab/CollabAnonymousRelay.md","title":"collab/CollabAnonymousRelay.js","description":"","kind":"reference","source":"engine/collab/CollabAnonymousRelay.js","updated":"","headings":["collab/CollabAnonymousRelay.js","Functions","collabAnonTimestampReport(timestamp, nowMs = Date.now()","collabAnonScoreReport(scoreData, nowMs = Date.now()","getAnonUsername(anonId)","createAnonymousRelay(config)","registerAnonPeer(relay, realPeerId, ecdhPublicKey)","removeAnonPeer(relay, realPeerId)","resolveRealToAnon(relay, realPeerId)","resolveAnonToReal(relay, anonId)","resolveAnonUsername(relay, anonIdOrRealId)","sanitizeOutgoingOp(relay, op)","deanonymizeIncomingOp(relay, op)","reanonymizeForForward(relay, op, senderRealPeerId)","async wrapGarlic(relay, op, recipientAnonId, ownEcdhPrivateKey)","async unwrapGarlic(relay, garlicOp, ownEcdhPrivateKey)","buildAnonHello(relay, realHello)","processAnonHello(relay, realPeerId, anonHello)","getAnonIceConfig(iceServers)","sanitizePresence(relay, presenceEntry)","getAnonRelayStats(relay)","isAnonEnabled(relay)","generateSessionSeed()","async generateAnonSigningKey()","async buildAnonCredential(persistentIdentity, sessionSeed)","async verifyAnonCredential(persistentPubKeyRaw, sessionSeed, credential)","async signAnonScoreReceipt(sessionKeyPair, scoreData)","async verifyAnonScoreReceipt(certifiedSessionKeys, scoreData, signature, signerPublicKey = null, nowMs = Date.now()","async anonRelayPayloadHash(payloadStr)","async signAnonCriticalOp(sessionKeyPair, sessionPubKeyRaw, op, anonId)","async verifyAnonCriticalOp(op, senderAnonId, certifiedSessionKeys, relay = null, nowMs = Date.now()","initAnonCredentials(relay, sessionSeed, ownSessionKey)","certifySessionKey(relay, sessionPubKeyRaw)","setCertifiedSessionKeys(relay, keyList)","getCertifiedSessionKeys(relay)","buildAnonCredentialOp(relay, credential)","buildAnonKeylistOp(relay)","async buildAnonScoreReportOp(relay, targetAnonId, score)","isAnonCredentialsReady(relay)","resetAnonymousRelay(relay)","destroyAnonymousRelay(relay)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Generate an anonymous username from an anonId. Format: \"Anon XXXX\"","contentHash":"993666a696955e3d29a2d1d01f6055ad930d272e46de9729172d4ae819dd72b3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabAnonymousRelay.md::0001","path":"engine/reference/collab/CollabAnonymousRelay.md","title":"collab/CollabAnonymousRelay.js","description":"","kind":"reference","source":"engine/collab/CollabAnonymousRelay.js","updated":"","headings":["collab/CollabAnonymousRelay.js","Functions","collabAnonTimestampReport(timestamp, nowMs = Date.now()","collabAnonScoreReport(scoreData, nowMs = Date.now()","getAnonUsername(anonId)","createAnonymousRelay(config)","registerAnonPeer(relay, realPeerId, ecdhPublicKey)","removeAnonPeer(relay, realPeerId)","resolveRealToAnon(relay, realPeerId)","resolveAnonToReal(relay, anonId)","resolveAnonUsername(relay, anonIdOrRealId)","sanitizeOutgoingOp(relay, op)","deanonymizeIncomingOp(relay, op)","reanonymizeForForward(relay, op, senderRealPeerId)","async wrapGarlic(relay, op, recipientAnonId, ownEcdhPrivateKey)","async unwrapGarlic(relay, garlicOp, ownEcdhPrivateKey)","buildAnonHello(relay, realHello)","processAnonHello(relay, realPeerId, anonHello)","getAnonIceConfig(iceServers)","sanitizePresence(relay, presenceEntry)","getAnonRelayStats(relay)","isAnonEnabled(relay)","generateSessionSeed()","async generateAnonSigningKey()","async buildAnonCredential(persistentIdentity, sessionSeed)","async verifyAnonCredential(persistentPubKeyRaw, sessionSeed, credential)","async signAnonScoreReceipt(sessionKeyPair, scoreData)","async verifyAnonScoreReceipt(certifiedSessionKeys, scoreData, signature, signerPublicKey = null, nowMs = Date.now()","async anonRelayPayloadHash(payloadStr)","async signAnonCriticalOp(sessionKeyPair, sessionPubKeyRaw, op, anonId)","async verifyAnonCriticalOp(op, senderAnonId, certifiedSessionKeys, relay = null, nowMs = Date.now()","initAnonCredentials(relay, sessionSeed, ownSessionKey)","certifySessionKey(relay, sessionPubKeyRaw)","setCertifiedSessionKeys(relay, keyList)","getCertifiedSessionKeys(relay)","buildAnonCredentialOp(relay, credential)","buildAnonKeylistOp(relay)","async buildAnonScoreReportOp(relay, targetAnonId, score)","isAnonCredentialsReady(relay)","resetAnonymousRelay(relay)","destroyAnonymousRelay(relay)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"encrypted payload 7. Garlic: unwrapGarlic(op, ownEcdhPrivate) → decrypted payload Functions Generate an anonymous username from an anonId. Format: \"Anon XXXX\" where XXXX is first 4 chars of the anonId. Parameters: (string) — No description in source JSDoc. Create an anonymous relay state. Parameters: (Object) — No description in source JSDoc. (string) — our real peer ID (boolean) — =false] host maintains full mapping (boolean) — =false] enable garlic encryption Returns: relay state 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). Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (Uint8Array number[]) — peer's ECDH key for garlic Returns: the assigned anonId Remove a peer from the anonymous mapping. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Resolve a real peer ID to its anonymous ID. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Returns: anonId or null if not registered Resolve an anonymous ID back to the real peer ID. HOST ONLY — non host peers cannot resolve other peers' anonIds. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Returns: realPeerId or null Get the anonymous username for a peer. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Sanitize an outgoing op: replace all real peer IDs with anonymous IDs. This is called before broadcasting — peers only see anonIds. Parameters: (Object) — No description in source JSDoc. (Object) — the op to sanitize (will be shallow cloned) Returns: sanitized op","contentHash":"9b29bfe755afa4c7e73e6325f375147c1c4aaaf29347e7efeb834733fe6b684b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabAnonymousRelay.md::0002","path":"engine/reference/collab/CollabAnonymousRelay.md","title":"collab/CollabAnonymousRelay.js","description":"","kind":"reference","source":"engine/collab/CollabAnonymousRelay.js","updated":"","headings":["collab/CollabAnonymousRelay.js","Functions","collabAnonTimestampReport(timestamp, nowMs = Date.now()","collabAnonScoreReport(scoreData, nowMs = Date.now()","getAnonUsername(anonId)","createAnonymousRelay(config)","registerAnonPeer(relay, realPeerId, ecdhPublicKey)","removeAnonPeer(relay, realPeerId)","resolveRealToAnon(relay, realPeerId)","resolveAnonToReal(relay, anonId)","resolveAnonUsername(relay, anonIdOrRealId)","sanitizeOutgoingOp(relay, op)","deanonymizeIncomingOp(relay, op)","reanonymizeForForward(relay, op, senderRealPeerId)","async wrapGarlic(relay, op, recipientAnonId, ownEcdhPrivateKey)","async unwrapGarlic(relay, garlicOp, ownEcdhPrivateKey)","buildAnonHello(relay, realHello)","processAnonHello(relay, realPeerId, anonHello)","getAnonIceConfig(iceServers)","sanitizePresence(relay, presenceEntry)","getAnonRelayStats(relay)","isAnonEnabled(relay)","generateSessionSeed()","async generateAnonSigningKey()","async buildAnonCredential(persistentIdentity, sessionSeed)","async verifyAnonCredential(persistentPubKeyRaw, sessionSeed, credential)","async signAnonScoreReceipt(sessionKeyPair, scoreData)","async verifyAnonScoreReceipt(certifiedSessionKeys, scoreData, signature, signerPublicKey = null, nowMs = Date.now()","async anonRelayPayloadHash(payloadStr)","async signAnonCriticalOp(sessionKeyPair, sessionPubKeyRaw, op, anonId)","async verifyAnonCriticalOp(op, senderAnonId, certifiedSessionKeys, relay = null, nowMs = Date.now()","initAnonCredentials(relay, sessionSeed, ownSessionKey)","certifySessionKey(relay, sessionPubKeyRaw)","setCertifiedSessionKeys(relay, keyList)","getCertifiedSessionKeys(relay)","buildAnonCredentialOp(relay, credential)","buildAnonKeylistOp(relay)","async buildAnonScoreReportOp(relay, targetAnonId, score)","isAnonCredentialsReady(relay)","resetAnonymousRelay(relay)","destroyAnonymousRelay(relay)","Constants","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"— peers only see anonIds. Parameters: (Object) — No description in source JSDoc. (Object) — the op to sanitize (will be shallow cloned) Returns: sanitized op with anonIds 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. Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: op with real peer IDs restored (or anonIds if non host) 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. Parameters: (Object) — No","contentHash":"6c2a3600b399c36a76ff51ae228db68a5032026f03fc96f1d3d76e150cd58411"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabCameraInterp.md::0000","path":"engine/reference/collab/CollabCameraInterp.md","title":"collab/CollabCameraInterp.js","description":"","kind":"reference","source":"engine/collab/CollabCameraInterp.js","updated":"","headings":["collab/CollabCameraInterp.js","Functions","createCameraInterpState()","pushCameraSnapshot(state, peerId, pos, target, vel, targetVel, remoteTs)","getInterpolatedCamera(state, peerId)","pruneStaleInterpBuffers(state)","removePeerInterpBuffer(state, peerId)","getInterpStats(state)","destroyCameraInterpState(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create the global camera interpolation state. Attach to editor.collab or pass around explicitly. Push a camera sync snapshot into the interpolation buffer. Call this from the camera sync op handler instead of snapping peer.camera directly. Parameters: (Object) — from createCameraInterpState() (string) — No description in source JSDoc. (number[]) — [x,y,z] camera position (full precision) (number[]) — [x,y,z] camera look at target (number[]) — [vx,vy,vz] camera velocity (units/sec) (number[]) — [vx,vy,vz] target velocity (number) — performance.now() timestamp from sender Get the smoothly interpolated camera position for a remote peer. Call this every render frame from CollabOverlayRenderer. Parameters: (Object) — from createCameraInterpState() (string) — No description in source JSDoc. Returns: null} Remove stale peer buffers. Call periodically ( 1Hz). Remove a specific peer's buffer (on disconnect). Get interpolation stats for UI display. Destroy all state. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or","contentHash":"3eab8f40d23bae287044a2766d3e007bc98e4b9a5a1a9a7cc8a97d0c4a95d649"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabCameraInterp.md::0001","path":"engine/reference/collab/CollabCameraInterp.md","title":"collab/CollabCameraInterp.js","description":"","kind":"reference","source":"engine/collab/CollabCameraInterp.js","updated":"","headings":["collab/CollabCameraInterp.js","Functions","createCameraInterpState()","pushCameraSnapshot(state, peerId, pos, target, vel, targetVel, remoteTs)","getInterpolatedCamera(state, peerId)","pruneStaleInterpBuffers(state)","removePeerInterpBuffer(state, peerId)","getInterpStats(state)","destroyCameraInterpState(state)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"(on disconnect). Get interpolation stats for UI display. Destroy all state. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1974f5b7b3c6367392f168d25a0512bf4b29e22e1cbb23518ddc31e09ff5b702"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabCodec.md::0000","path":"engine/reference/collab/CollabCodec.md","title":"collab/CollabCodec.js","description":"","kind":"reference","source":"engine/collab/CollabCodec.js","updated":"","headings":["collab/CollabCodec.js","Functions","encode(value, options = {})","codecEncodeReport(value, options = {})","decode(data, options = {})","codecDecodeReport(data, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Encode a JS value into a msgpack Uint8Array. Parameters: ( ) — No description in source JSDoc. Decode a msgpack Uint8Array (or ArrayBuffer) back into a JS value. Parameters: (Uint8Array ArrayBuffer) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d1d7462b55f46c97afaef490f6e2c83fca6a53ac114aaaebad805d09114b3664"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabCore.md::0000","path":"engine/reference/collab/CollabCore.md","title":"collab/CollabCore.js","description":"","kind":"reference","source":"engine/collab/CollabCore.js","updated":"","headings":["collab/CollabCore.js","Functions","createCollabCore(config)","startCollab(core)","forceDiscovery(core)","broadcastOp(core, op)","broadcastPresence(core, presenceData)","collabChunkEnvelopeReport(data)","sendToPeer(core, peerId, data)","relayOp(core, fromPeerId, op)","computeDynamicCapacity(core, peerReputation)","collabRelayThresholdReport(value)","collabPeerScoreReport(value)","checkRelayMode(core, peerReputation)","setCoreRelayConfig(core, opts)","setCoreFastChannel(core, fastChannel)","setCoreTopology(core, topology)","isPeerTrusted(core, peerId, peerScore)","getPeerConnectionTier(core, peerId, peerScore, fastChannel)","getMaxBufferedAmount(core)","collabBufferedAmountReport(value)","getSelfId(core)","getPeers(core)","connectCollabPeer(core, peerId, username = 'Remote')","disconnectCollabPeer(core, peerId)","async observeCollabPeerMetrics(core, peerId)","destroyCollabCore(core)","async deriveCollabChannelId(selfId, peerId)","collabReconnectPlanReport(attempts)","collabHeartbeatReport(lastPongMs, timestampMs)","broadcastGoodbye(core)","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Create a collab core instance. config: { projectId, selfId, username, onOp, onPresence, onPeerDiscovered, shouldConnectPeer, onPeerJoin, onPeerLeave } Start signaling and begin peer discovery. 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. 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) Broadcast presence data to all connected peers (unreliable channel). Prefers fast channel for same origin peers. Send data to a specific peer only. Prefers fast channel for same origin peers. Auto chunks large messages to avoid SCTP size limits. Relay an op from one peer to all other peers (host only, relay mode). Optionally filters by spatial interest set. Parameters: (Object) — No description in source JSDoc. (string) — peer who sent the op (Object) — the op to relay Compute the dynamic peer capacity based on connection quality. Fast channel peers are free. Trusted peers expand the mesh limit. Parameters: (Object) — No description in source JSDoc. (Object) — reputation state for score lookups Returns: } Check peer count and toggle relay mode if threshold is crossed. Now uses","contentHash":"e5fa5e9d24855d5ce61488c472c96bcf9e28f97a53bd507d0a72619335024924"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabCore.md::0001","path":"engine/reference/collab/CollabCore.md","title":"collab/CollabCore.js","description":"","kind":"reference","source":"engine/collab/CollabCore.js","updated":"","headings":["collab/CollabCore.js","Functions","createCollabCore(config)","startCollab(core)","forceDiscovery(core)","broadcastOp(core, op)","broadcastPresence(core, presenceData)","collabChunkEnvelopeReport(data)","sendToPeer(core, peerId, data)","relayOp(core, fromPeerId, op)","computeDynamicCapacity(core, peerReputation)","collabRelayThresholdReport(value)","collabPeerScoreReport(value)","checkRelayMode(core, peerReputation)","setCoreRelayConfig(core, opts)","setCoreFastChannel(core, fastChannel)","setCoreTopology(core, topology)","isPeerTrusted(core, peerId, peerScore)","getPeerConnectionTier(core, peerId, peerScore, fastChannel)","getMaxBufferedAmount(core)","collabBufferedAmountReport(value)","getSelfId(core)","getPeers(core)","connectCollabPeer(core, peerId, username = 'Remote')","disconnectCollabPeer(core, peerId)","async observeCollabPeerMetrics(core, peerId)","destroyCollabCore(core)","async deriveCollabChannelId(selfId, peerId)","collabReconnectPlanReport(attempts)","collabHeartbeatReport(lastPongMs, timestampMs)","broadcastGoodbye(core)","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"description in source JSDoc. (Object) — reputation state for score lookups Returns: } 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. Parameters: (Object) — No description in source JSDoc. (Object) — optional reputation state Returns: true if relay mode changed Set the spatial authority reference for interest filtered relay. Set the fast channel reference on the core. Called by EditorCollab after creating the fast channel. Set the mesh topology reference on the core. Called by EditorCollab after creating the topology manager. 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. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (number) — reputation score 0 1000 Returns: true if peer is trusted Get the connection tier label for a peer. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (number) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: } Get the maximum bufferedAmount across all peer ops channels. Used by CollabMessageRouter for backpressure detection. Get the local peer ID. Get all connected peers. Begin a targeted WebRTC connection to an already discovered peer. Close one direct peer connection without tearing down discovery. Collect locally observed transport quality. Remote peers cannot supply or inflate these values, which makes them suitable input for topology roles. Destroy all connections and signaling. Derive a shared AES 256 GCM key from ECDH key exchange. Called after hello handshake when both peers have ECDH public keys.","contentHash":"f1e0fdeaaf6973333c527827e8d85f78a1ed4d60fade21a42e70569d2664d9a3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabCore.md::0002","path":"engine/reference/collab/CollabCore.md","title":"collab/CollabCore.js","description":"","kind":"reference","source":"engine/collab/CollabCore.js","updated":"","headings":["collab/CollabCore.js","Functions","createCollabCore(config)","startCollab(core)","forceDiscovery(core)","broadcastOp(core, op)","broadcastPresence(core, presenceData)","collabChunkEnvelopeReport(data)","sendToPeer(core, peerId, data)","relayOp(core, fromPeerId, op)","computeDynamicCapacity(core, peerReputation)","collabRelayThresholdReport(value)","collabPeerScoreReport(value)","checkRelayMode(core, peerReputation)","setCoreRelayConfig(core, opts)","setCoreFastChannel(core, fastChannel)","setCoreTopology(core, topology)","isPeerTrusted(core, peerId, peerScore)","getPeerConnectionTier(core, peerId, peerScore, fastChannel)","getMaxBufferedAmount(core)","collabBufferedAmountReport(value)","getSelfId(core)","getPeers(core)","connectCollabPeer(core, peerId, username = 'Remote')","disconnectCollabPeer(core, peerId)","async observeCollabPeerMetrics(core, peerId)","destroyCollabCore(core)","async deriveCollabChannelId(selfId, peerId)","collabReconnectPlanReport(attempts)","collabHeartbeatReport(lastPongMs, timestampMs)","broadcastGoodbye(core)","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"all connections and signaling. Derive a shared AES 256 GCM key from ECDH key exchange. Called after hello handshake when both peers have ECDH public keys. 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"207a6aa61103301d7024177deb2a80fcfa0829d1de74e0c30f19774516dad5d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabCrypto.md::0000","path":"engine/reference/collab/CollabCrypto.md","title":"collab/CollabCrypto.js","description":"","kind":"reference","source":"engine/collab/CollabCrypto.js","updated":"","headings":["collab/CollabCrypto.js","Functions","async generateKeyPair()","async importPublicKey(rawKey)","async deriveSharedKey(privateKey, remotePublicKey, salt)","async deriveHmacKey(privateKey, remotePublicKey, salt)","cryptoNonceReport(counter, channelId = null)","encryptedMessageReport(message, channelId = null)","nextCryptoSendCounter(state)","resetCryptoCounters(state)","async encrypt(key, plaintext, counter, channelId)","async decrypt(key, message, channelId, replayState = null)","generateChallenge()","async signChallenge(hmacKey, challenge)","async verifyChallenge(hmacKey, challenge, signature)","createPeerCryptoState()","async initPeerCrypto(state)","async completePeerCrypto(state, remotePublicKeyRaw, roomPassword)","isCryptoAvailable()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Generate an ECDH P 256 key pair for key exchange. Returns: } Import a raw public key (65 bytes) received from a remote peer. Parameters: (ArrayBuffer Uint8Array) — No description in source JSDoc. Derive a shared AES 256 GCM key from our private key + remote public key. Optionally mixes in a room password for authentication. Parameters: (CryptoKey) — Our ECDH private key (CryptoKey) — Remote peer's imported public key (string) — Optional room password / salt for HKDF Returns: AES 256 GCM key Derive an HMAC SHA256 key from ECDH shared bits for challenge response auth. Parameters: (CryptoKey) — No description in source JSDoc. (CryptoKey) — No description in source JSDoc. (string) — No description in source JSDoc. Encrypt a msgpack payload with AES 256 GCM. Parameters: (CryptoKey) — AES 256 GCM key from deriveSharedKey (Uint8Array) — Raw msgpack bytes (number) — Monotonic nonce counter (must never repeat) (Uint8Array) — 8 byte channel identifier (default: zeros) Returns: Encrypted message: [4 byte counter][N byte ciphertext+tag] Decrypt an AES 256 GCM encrypted message. Parameters: (CryptoKey) — AES 256 GCM key","contentHash":"bcdfcdd0083b057024c0a8f66200604a2a30da8ce318c3aedb697ef027e608f4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabCrypto.md::0001","path":"engine/reference/collab/CollabCrypto.md","title":"collab/CollabCrypto.js","description":"","kind":"reference","source":"engine/collab/CollabCrypto.js","updated":"","headings":["collab/CollabCrypto.js","Functions","async generateKeyPair()","async importPublicKey(rawKey)","async deriveSharedKey(privateKey, remotePublicKey, salt)","async deriveHmacKey(privateKey, remotePublicKey, salt)","cryptoNonceReport(counter, channelId = null)","encryptedMessageReport(message, channelId = null)","nextCryptoSendCounter(state)","resetCryptoCounters(state)","async encrypt(key, plaintext, counter, channelId)","async decrypt(key, message, channelId, replayState = null)","generateChallenge()","async signChallenge(hmacKey, challenge)","async verifyChallenge(hmacKey, challenge, signature)","createPeerCryptoState()","async initPeerCrypto(state)","async completePeerCrypto(state, remotePublicKeyRaw, roomPassword)","isCryptoAvailable()","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"zeros) Returns: Encrypted message: [4 byte counter][N byte ciphertext+tag] Decrypt an AES 256 GCM encrypted message. Parameters: (CryptoKey) — AES 256 GCM key (Uint8Array) — Wire format from encrypt() (Uint8Array) — Same channelId used during encrypt (Object) — Optional peer state from createPeerCryptoState() Returns: Decrypted msgpack bytes Generate a random 32 byte challenge. Sign a challenge with HMAC SHA256. Parameters: (CryptoKey) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. Verify a challenge signature. Parameters: (CryptoKey) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. Create crypto state for a single peer connection. Initialize crypto state with a fresh key pair. Parameters: (Object) — From createPeerCryptoState() Complete the handshake: import remote public key, derive shared keys. Parameters: (Object) — No description in source JSDoc. (Uint8Array ArrayBuffer) — 65 byte raw public key (string) — No description in source JSDoc. Check if crypto is available in this environment. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b588111213ea8dcaca67fe408a087768d51b0640d2c21f036aebeaf28f190d85"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabDivergenceTracker.md::0000","path":"engine/reference/collab/CollabDivergenceTracker.md","title":"collab/CollabDivergenceTracker.js","description":"","kind":"reference","source":"engine/collab/CollabDivergenceTracker.js","updated":"","headings":["collab/CollabDivergenceTracker.js","Functions","createDivergenceTracker()","divergenceHeartbeatReport(payload)","divergenceFrameHashReport(samples)","recordLocalFrame(tracker, simTime, editor)","receiveRemoteHash(tracker, peerId, simTime, frameHash)","removePeerDivergence(tracker, peerId)","getDivergenceLog(tracker)","resetDivergenceTracker(tracker)","exportDivergenceReport(tracker, localUsername)","computeFrameHash(editor)","collabDivergenceFrameHash(samples)","injectDivergenceDeps(deps)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Record a local frame hash. Call every simHistoryInterval during play. Receive a remote heartbeat hash from a peer. Remove a peer's data on disconnect. Get all recorded divergence events. Clear all tracking data (call on exitPlayMode). Export a JSON report of all divergences + local timeline. Compute a fast FNV 1a hash of all entity positions in the scene. Quantizes positions to 3 decimal places for float stability. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"822b886e5e2eac7c845943393855c58bac9ab02f3912c1dffdf6217c8a88731f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabEntityAuthority.md::0000","path":"engine/reference/collab/CollabEntityAuthority.md","title":"collab/CollabEntityAuthority.js","description":"","kind":"reference","source":"engine/collab/CollabEntityAuthority.js","updated":"","headings":["collab/CollabEntityAuthority.js","Functions","createEntityAuthority(selfId)","getEntityOwner(auth, entityId)","isLocallyOwned(auth, entityId)","isEntityClaimed(auth, entityId)","getEntitiesOwnedBy(auth, peerId)","getLocallyOwnedSet(auth)","shouldBroadcastEntity(auth, entityId, isPlayAuthority)","shouldAcceptRemoteTransform(auth, entityId)","claimEntity(auth, entityId, priority)","releaseEntity(auth, entityId)","releaseAllLocal(auth)","onRemoteAuthorityOp(auth, op)","tickAuthority(auth)","onPeerDisconnected(auth, peerId)","getHandoffBlend(auth, entityId)","onOwnershipChanged(auth, callback)","destroyEntityAuthority(auth)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create an entity authority state object. Parameters: (string) — This peer's unique ID Returns: authority state Get the current owner of an entity. Returns: null} Check if the local peer owns an entity. Check if an entity is owned by anyone (not default authority). Get all entities owned by a specific peer. Returns: array of entity IDs Get all locally owned entity IDs as a Set (for fast lookup in sync loops). 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. Check if the local peer should accept remote transforms for an entity. Returns true if we do NOT own it. Claim ownership of an entity at a given priority. Returns the op to","contentHash":"4fd89464db5c396996f90258e25bd270d8af28ef0ca5b1c7c17138e43b6f4470"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabEntityAuthority.md::0001","path":"engine/reference/collab/CollabEntityAuthority.md","title":"collab/CollabEntityAuthority.js","description":"","kind":"reference","source":"engine/collab/CollabEntityAuthority.js","updated":"","headings":["collab/CollabEntityAuthority.js","Functions","createEntityAuthority(selfId)","getEntityOwner(auth, entityId)","isLocallyOwned(auth, entityId)","isEntityClaimed(auth, entityId)","getEntitiesOwnedBy(auth, peerId)","getLocallyOwnedSet(auth)","shouldBroadcastEntity(auth, entityId, isPlayAuthority)","shouldAcceptRemoteTransform(auth, entityId)","claimEntity(auth, entityId, priority)","releaseEntity(auth, entityId)","releaseAllLocal(auth)","onRemoteAuthorityOp(auth, op)","tickAuthority(auth)","onPeerDisconnected(auth, peerId)","getHandoffBlend(auth, entityId)","onOwnershipChanged(auth, callback)","destroyEntityAuthority(auth)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"local peer should accept remote transforms for an entity. Returns true if we do NOT own it. Claim ownership of an entity at a given priority. Returns the op to broadcast, or null if claim was rejected locally. Release ownership of an entity. Reverts to default authority. Returns the op to broadcast, or null if we didn't own it. Release ALL claims owned by the local peer (e.g. on disconnect or exit play mode). Returns array of ops to broadcast. 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. Build refresh ops for all local claims (call at 2Hz from the collab loop). Also prunes stale remote claims. Returns: array of ops to broadcast Handle a peer disconnecting — release all their claims. Get handoff blend factor for an entity (0 = fully old owner, 1 = fully new owner). Used by interpolation to smoothly blend during ownership transfer. Set callback for ownership changes. Destroy / reset authority state. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0824de1a04731e928eb5ab5f2696f0a1dcddb5b63ba4f16ee4bb47512610e6f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabFastChannel.md::0000","path":"engine/reference/collab/CollabFastChannel.md","title":"collab/CollabFastChannel.js","description":"","kind":"reference","source":"engine/collab/CollabFastChannel.js","updated":"","headings":["collab/CollabFastChannel.js","Functions","createFastChannel(projectId, selfId, callbacks = {})","fastChannelSendOp(fc, op)","fastChannelSendPresence(fc, presenceData)","fastChannelSendToPeer(fc, peerId, op)","isFastPeer(fc, peerId)","getFastPeerIds(fc)","getFastChannelStats(fc)","destroyFastChannel(fc)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a fast channel instance. Parameters: (string) — room/project identifier (string) — this peer's unique ID (Object) — { onOp, onPresence, onFastPeerDetected, onFastPeerLost } Returns: fast channel state, or null if BroadcastChannel unavailable Send an op via fast channel to all same origin peers. Uses structured clone (no msgpack encode/decode). Parameters: (Object) — fast channel state (Object) — the operation to send Returns: true if sent (false if no fast channel or no fast peers) Send presence data via fast channel. Send an op to a specific peer via fast channel. Returns: true if the peer is a fast peer and message was sent Check if a specific peer is reachable via fast channel. Get the set of all fast peer IDs.","contentHash":"bf71f735c34362dc80aff6e89c428ca5f9d2a58fdb58c8cb5ec41c0fa7e87644"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabFastChannel.md::0001","path":"engine/reference/collab/CollabFastChannel.md","title":"collab/CollabFastChannel.js","description":"","kind":"reference","source":"engine/collab/CollabFastChannel.js","updated":"","headings":["collab/CollabFastChannel.js","Functions","createFastChannel(projectId, selfId, callbacks = {})","fastChannelSendOp(fc, op)","fastChannelSendPresence(fc, presenceData)","fastChannelSendToPeer(fc, peerId, op)","isFastPeer(fc, peerId)","getFastPeerIds(fc)","getFastChannelStats(fc)","destroyFastChannel(fc)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Returns: true if the peer is a fast peer and message was sent Check if a specific peer is reachable via fast channel. Get the set of all fast peer IDs. Get fast channel stats. Destroy the fast channel. Sends a bye message to peers first. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"096864b2d3a1c3df2786c47fd6372d856e20ade1b2279fdd6519bfe698b7a1c3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabHostMigration.md::0000","path":"engine/reference/collab/CollabHostMigration.md","title":"collab/CollabHostMigration.js","description":"","kind":"reference","source":"engine/collab/CollabHostMigration.js","updated":"","headings":["collab/CollabHostMigration.js","Functions","createHostMigration(selfId, config = {})","startHostMigration(hm, isHost, hostPeerId)","migrationSetHost(hm, hostPeerId)","stopHostMigration(hm)","hostHeartbeatReceived(hm, fromPeerId)","hostActivityReceived(hm, fromPeerId)","onElectionCandidacy(hm, peerId, payload)","onElectionResult(hm, payload)","onHostReclaimRequest(hm, originalHostId)","requestHostReclaim(hm)","hostMigrationTiebreakerNorm(selfId)","hostMigrationCandidacyScoreReport(metrics = {}, timestampMs = Date.now()","migrationAddPeer(hm, peerId)","migrationRemovePeer(hm, peerId)","migrationUpdateSelfMetrics(hm, score, connectionCount)","onHostElectionOp(hm, peerId, op)","buildGoodbyeOp(hm)","onPeerGoodbye(hm, payload, fromPeerId = payload?.peerId)","getMigrationState(hm)","getMigrationStats(hm)","isCurrentHost(hm)","getCurrentHostId(hm)","destroyHostMigration(hm)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a host migration manager. Parameters: (string) — No description in source","contentHash":"8dfbbd649b3c7e6a3b61d4e11f2e657c1176eda953d70ebc1269307bd4ee5dfd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabHostMigration.md::0001","path":"engine/reference/collab/CollabHostMigration.md","title":"collab/CollabHostMigration.js","description":"","kind":"reference","source":"engine/collab/CollabHostMigration.js","updated":"","headings":["collab/CollabHostMigration.js","Functions","createHostMigration(selfId, config = {})","startHostMigration(hm, isHost, hostPeerId)","migrationSetHost(hm, hostPeerId)","stopHostMigration(hm)","hostHeartbeatReceived(hm, fromPeerId)","hostActivityReceived(hm, fromPeerId)","onElectionCandidacy(hm, peerId, payload)","onElectionResult(hm, payload)","onHostReclaimRequest(hm, originalHostId)","requestHostReclaim(hm)","hostMigrationTiebreakerNorm(selfId)","hostMigrationCandidacyScoreReport(metrics = {}, timestampMs = Date.now()","migrationAddPeer(hm, peerId)","migrationRemovePeer(hm, peerId)","migrationUpdateSelfMetrics(hm, score, connectionCount)","onHostElectionOp(hm, peerId, op)","buildGoodbyeOp(hm)","onPeerGoodbye(hm, payload, fromPeerId = payload?.peerId)","getMigrationState(hm)","getMigrationStats(hm)","isCurrentHost(hm)","getCurrentHostId(hm)","destroyHostMigration(hm)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"and captured multi peer host failure/rejoin traces remain absent. Functions Create a host migration manager. Parameters: (string) — No description in source JSDoc. (Object) — No description in source JSDoc. Start host migration monitoring. Parameters: (Object) — No description in source JSDoc. (boolean) — are we the initial host? (string) — peerId of the initial host (null if we are host) Set the host peer ID (for joiners who didn't know at startup). Starts the host liveness monitor if not already running. Stop host migration monitoring. Record that we received a heartbeat (or any message) from the host. Call this from the heartbeat handler. Record that we received ANY op from a peer (used for liveness). Even non heartbeat ops prove the host is alive. Handle a received election candidacy from another peer. Handle a received election result from another peer. 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. Called by the original host when it returns to reclaim. Only call if we ARE the original host and someone else took over. Register a known peer. Remove a known peer. Update our own metrics (call from collab loop). Handle an incoming host election op. Routes to the appropriate handler based on phase. Build a goodbye op to broadcast before leaving. Other peers use this to immediately detect departure instead of waiting for heartbeat timeout. Handle a received goodbye from a departing peer. If the host sent the goodbye, immediately start election (no timeout wait). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ccda9ca650d5e41593cfffcac4fb6c60476416480101bae15387c18fe0513c1c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabIdentity.md::0000","path":"engine/reference/collab/CollabIdentity.md","title":"collab/CollabIdentity.js","description":"","kind":"reference","source":"engine/collab/CollabIdentity.js","updated":"","headings":["collab/CollabIdentity.js","Functions","collabIdentityTimestampReport(timestamp, nowMs = Date.now()","collabIdentityPayloadReport(payload)","prepareCollabIdentityRecord(record)","collabIdentityCurrentKey(keyId = COLLABIDENTITYKEYID)","async createIdentity(keyId = COLLABIDENTITYKEYID)","async computeFingerprint(publicKeyRaw)","async buildIdentityProof(identity, selfId)","async verifyIdentityProof(publicKeyRaw, selfId, signature)","collabIdentityScoreReceiptReport(scoreData, nowMs = Date.now()","async signScoreReceipt(identity, scoreData)","async verifyScoreReceipt(publicKeyRaw, scoreData, signature, nowMs = Date.now()","async signData(identity, data)","async signRawBytes(identity, bytes)","async verifyRawBytes(publicKeyRaw, bytes, signature)","async verifyData(publicKeyRaw, data, signature)","createIdentityRegistry(selfId, identity)","async registerPeerIdentity(registry, peerId, publicKeyRaw, identityProof, isHost = false)","removePeerIdentity(registry, peerId)","getPeerIdentity(registry, peerId)","setExpectedHostFingerprint(registry, fingerprint)","resetIdentityRegistry(registry, options = {})","destroyIdentityRegistry(registry)","async recordScoreReceipt(registry, reporterPeerId, targetPeerId, score, timestamp, signature)","getConsensusScore(registry, peerId)","async buildScoreReportOp(identity, selfId, targetPeerId, score)","getIdentityStats(registry, reputationScores)","isIdentityAvailable()","isCriticalOp(opType)","collabIdentityCriticalOpReport(op, senderPeerId, nowMs = Date.now()","async signCriticalOp(identity, op, selfId)","async verifyCriticalOp(op, senderPeerId, registry)","async collabIdentityPayloadHash(str)","computeTrustLevel(registry, peerId, reputationScore)","getTrustColor(level)","getTrustLabel(level)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Validate one bounded v1/v2 identity record without guessing future shapes. 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. Returns: identity state Compute fingerprint from a raw public key (public API for verification). Parameters: (Uint8Array number[]) — No description in source JSDoc. Returns: 16 hex chars","contentHash":"c742cf0d695b33f430a86a66c3c635806bf0950f159150f32a25cdd126481365"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabIdentity.md::0001","path":"engine/reference/collab/CollabIdentity.md","title":"collab/CollabIdentity.js","description":"","kind":"reference","source":"engine/collab/CollabIdentity.js","updated":"","headings":["collab/CollabIdentity.js","Functions","collabIdentityTimestampReport(timestamp, nowMs = Date.now()","collabIdentityPayloadReport(payload)","prepareCollabIdentityRecord(record)","collabIdentityCurrentKey(keyId = COLLABIDENTITYKEYID)","async createIdentity(keyId = COLLABIDENTITYKEYID)","async computeFingerprint(publicKeyRaw)","async buildIdentityProof(identity, selfId)","async verifyIdentityProof(publicKeyRaw, selfId, signature)","collabIdentityScoreReceiptReport(scoreData, nowMs = Date.now()","async signScoreReceipt(identity, scoreData)","async verifyScoreReceipt(publicKeyRaw, scoreData, signature, nowMs = Date.now()","async signData(identity, data)","async signRawBytes(identity, bytes)","async verifyRawBytes(publicKeyRaw, bytes, signature)","async verifyData(publicKeyRaw, data, signature)","createIdentityRegistry(selfId, identity)","async registerPeerIdentity(registry, peerId, publicKeyRaw, identityProof, isHost = false)","removePeerIdentity(registry, peerId)","getPeerIdentity(registry, peerId)","setExpectedHostFingerprint(registry, fingerprint)","resetIdentityRegistry(registry, options = {})","destroyIdentityRegistry(registry)","async recordScoreReceipt(registry, reporterPeerId, targetPeerId, score, timestamp, signature)","getConsensusScore(registry, peerId)","async buildScoreReportOp(identity, selfId, targetPeerId, score)","getIdentityStats(registry, reputationScores)","isIdentityAvailable()","isCriticalOp(opType)","collabIdentityCriticalOpReport(op, senderPeerId, nowMs = Date.now()","async signCriticalOp(identity, op, selfId)","async verifyCriticalOp(op, senderPeerId, registry)","async collabIdentityPayloadHash(str)","computeTrustLevel(registry, peerId, reputationScore)","getTrustColor(level)","getTrustLabel(level)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"fingerprint from a raw public key (public API for verification). Parameters: (Uint8Array number[]) — No description in source JSDoc. Returns: 16 hex chars Build an identity proof: sign our selfId with our private key. The remote peer verifies this signature to confirm we own the public key. Parameters: (Object) — from createIdentity() (string) — our peer UUID Returns: signature bytes (DER encoded, 70 bytes) Verify an identity proof from a remote peer. Parameters: (Uint8Array number[]) — remote peer's raw public key (65 bytes) (string) — the selfId the remote peer claims (Uint8Array number[]) — the identity proof bytes Returns: true if the signature is valid 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. Parameters: (Object) — from createIdentity() (Object) — { targetPeerId, score, timestamp, selfId } Returns: signature bytes Verify a reputation score receipt from a remote peer. Parameters: (Uint8Array number[]) — the reporter's raw public key (Object) — { targetPeerId, score, timestamp, selfId } (Uint8Array number[]) — No description in source JSDoc. Sign arbitrary string data with our identity. Parameters: (Object) — No description in source JSDoc. (string) — string to sign 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. Parameters: (Object) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. Verify a signature on raw bytes. Counterpart to signRawBytes().","contentHash":"79a0438e573b03f044b8a7dab66903197bd9e77055567541ddfb52437d0c9f68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabIdentity.md::0002","path":"engine/reference/collab/CollabIdentity.md","title":"collab/CollabIdentity.js","description":"","kind":"reference","source":"engine/collab/CollabIdentity.js","updated":"","headings":["collab/CollabIdentity.js","Functions","collabIdentityTimestampReport(timestamp, nowMs = Date.now()","collabIdentityPayloadReport(payload)","prepareCollabIdentityRecord(record)","collabIdentityCurrentKey(keyId = COLLABIDENTITYKEYID)","async createIdentity(keyId = COLLABIDENTITYKEYID)","async computeFingerprint(publicKeyRaw)","async buildIdentityProof(identity, selfId)","async verifyIdentityProof(publicKeyRaw, selfId, signature)","collabIdentityScoreReceiptReport(scoreData, nowMs = Date.now()","async signScoreReceipt(identity, scoreData)","async verifyScoreReceipt(publicKeyRaw, scoreData, signature, nowMs = Date.now()","async signData(identity, data)","async signRawBytes(identity, bytes)","async verifyRawBytes(publicKeyRaw, bytes, signature)","async verifyData(publicKeyRaw, data, signature)","createIdentityRegistry(selfId, identity)","async registerPeerIdentity(registry, peerId, publicKeyRaw, identityProof, isHost = false)","removePeerIdentity(registry, peerId)","getPeerIdentity(registry, peerId)","setExpectedHostFingerprint(registry, fingerprint)","resetIdentityRegistry(registry, options = {})","destroyIdentityRegistry(registry)","async recordScoreReceipt(registry, reporterPeerId, targetPeerId, score, timestamp, signature)","getConsensusScore(registry, peerId)","async buildScoreReportOp(identity, selfId, targetPeerId, score)","getIdentityStats(registry, reputationScores)","isIdentityAvailable()","isCriticalOp(opType)","collabIdentityCriticalOpReport(op, senderPeerId, nowMs = Date.now()","async signCriticalOp(identity, op, selfId)","async verifyCriticalOp(op, senderPeerId, registry)","async collabIdentityPayloadHash(str)","computeTrustLevel(registry, peerId, reputationScore)","getTrustColor(level)","getTrustLabel(level)","Constants","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"(Object) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. Verify a signature on raw bytes. Counterpart to signRawBytes(). Parameters: (Uint8Array number[]) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. (Uint8Array number[]) — No description in source JSDoc. Verify a signature on arbitrary string data. Parameters: (Uint8Array number[]) — No description in source JSDoc. (string) — No description in source JSDoc. (Uint8Array number[]) — No description in source JSDoc. 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 tra","contentHash":"b76962842dc7f0cc54741e9d194752a0440618c1881ed131f26f0fd50b95bb7d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabIntegrityVerifier.md::0000","path":"engine/reference/collab/CollabIntegrityVerifier.md","title":"collab/CollabIntegrityVerifier.js","description":"","kind":"reference","source":"engine/collab/CollabIntegrityVerifier.js","updated":"","headings":["collab/CollabIntegrityVerifier.js","Functions","collabIntegrityLegacyHash(str)","createIntegrityVerifier(selfId, config = {})","validateIncomingOp(verifier, peerId, op)","recordOpInChain(verifier, peerId, op)","getChainHead(verifier, peerId)","computeZoneDigest(verifier, sceneEntities, ecsWorld, getEntityComponent, authoritySet)","buildDigestOp(verifier)","onRemoteDigest(verifier, peerId, digestOp)","tickIntegrity(verifier, peerReputation)","getPeerViolationCount(verifier, peerId)","getPeerViolations(verifier, peerId)","getAllViolationSummaries(verifier)","getPeerTier(verifier, peerId)","getPeerTrust(verifier, peerId)","setPlayMode(verifier, isPlayMode)","isPeerThrottled(verifier, peerId)","isPeerMuted(verifier, peerId)","getIntegrityStats(verifier)","buildCapabilitiesOp(verifier)","registerPeerCapabilities(verifier, peerId, capabilitiesPayload)","setLocalVersion(verifier, version)","integrityRemovePeer(verifier, peerId)","destroyIntegrityVerifier(verifier)","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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. Parameters: (string) — No description in source JSDoc. Returns: 8 character hex hash Create an integrity verifier. Parameters: (string) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: verifier state 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 Returns: } Record an op in the peer's hash chain for tamper evidence. Call after validateIncomingOp succeeds. Parameters: (Object) — No description in source JSDoc. (string) — No","contentHash":"978d7a92b4785d90469a4e37fb43c4f0edd35d6c0de640f5fbc4ba39a342e96f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabIntegrityVerifier.md::0001","path":"engine/reference/collab/CollabIntegrityVerifier.md","title":"collab/CollabIntegrityVerifier.js","description":"","kind":"reference","source":"engine/collab/CollabIntegrityVerifier.js","updated":"","headings":["collab/CollabIntegrityVerifier.js","Functions","collabIntegrityLegacyHash(str)","createIntegrityVerifier(selfId, config = {})","validateIncomingOp(verifier, peerId, op)","recordOpInChain(verifier, peerId, op)","getChainHead(verifier, peerId)","computeZoneDigest(verifier, sceneEntities, ecsWorld, getEntityComponent, authoritySet)","buildDigestOp(verifier)","onRemoteDigest(verifier, peerId, digestOp)","tickIntegrity(verifier, peerReputation)","getPeerViolationCount(verifier, peerId)","getPeerViolations(verifier, peerId)","getAllViolationSummaries(verifier)","getPeerTier(verifier, peerId)","getPeerTrust(verifier, peerId)","setPlayMode(verifier, isPlayMode)","isPeerThrottled(verifier, peerId)","isPeerMuted(verifier, peerId)","getIntegrityStats(verifier)","buildCapabilitiesOp(verifier)","registerPeerCapabilities(verifier, peerId, capabilitiesPayload)","setLocalVersion(verifier, version)","integrityRemovePeer(verifier, peerId)","destroyIntegrityVerifier(verifier)","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"op in the peer's hash chain for tamper evidence. Call after validateIncomingOp succeeds. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (Object) — No description in source JSDoc. Get the current chain head hash for a peer (for verification exchange). Compute a hash digest of all entity positions in the caller's zone. This is exchanged with peers for consensus based state verification. Parameters: (Object) — No description in source JSDoc. (Map) — editor.scene.entities (Object) — No description in source JSDoc. (Function) — No description in source JSDoc. (Set) — only include entities in our authority zone Returns: null} Build an integrity digest op to broadcast. Handle an incoming integrity digest from a remote peer. Compares against our own digest — mismatch indicates desync or tampering. Returns: } Tick the verifier: decay violations, build trust, compute social influence. Call at 1Hz. Parameters: (Object) — No description in source JSDoc. (Object) — optional CollabPeerReputation state for social influence Get the violation count for a peer. Get recent violations for a peer. Get all peer violation summaries. Get the current tier for a peer. Returns: 'clean' 'warning' 'throttled' 'muted' 'kicked' Get trust level for a peer (0.0 1.0). Set play mode flag — violations during play mode are weighted less. Check if a peer's ops should be throttled (tier = THROTTLED). Check if a peer's scene edit ops should be blocked (tier = MUTED). Get verifier stats. 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). Register a remote peer's declared capabilities. Called when we receive a","contentHash":"4ebe40aa9921fa02b2415587b7bfa357f122ab5741e710ee2d50a282ddd81a9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabIntegrityVerifier.md::0002","path":"engine/reference/collab/CollabIntegrityVerifier.md","title":"collab/CollabIntegrityVerifier.js","description":"","kind":"reference","source":"engine/collab/CollabIntegrityVerifier.js","updated":"","headings":["collab/CollabIntegrityVerifier.js","Functions","collabIntegrityLegacyHash(str)","createIntegrityVerifier(selfId, config = {})","validateIncomingOp(verifier, peerId, op)","recordOpInChain(verifier, peerId, op)","getChainHead(verifier, peerId)","computeZoneDigest(verifier, sceneEntities, ecsWorld, getEntityComponent, authoritySet)","buildDigestOp(verifier)","onRemoteDigest(verifier, peerId, digestOp)","tickIntegrity(verifier, peerReputation)","getPeerViolationCount(verifier, peerId)","getPeerViolations(verifier, peerId)","getAllViolationSummaries(verifier)","getPeerTier(verifier, peerId)","getPeerTrust(verifier, peerId)","setPlayMode(verifier, isPlayMode)","isPeerThrottled(verifier, peerId)","isPeerMuted(verifier, peerId)","getIntegrityStats(verifier)","buildCapabilitiesOp(verifier)","registerPeerCapabilities(verifier, peerId, capabilitiesPayload)","setLocalVersion(verifier, version)","integrityRemovePeer(verifier, peerId)","destroyIntegrityVerifier(verifier)","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"peer can be lenient about ops we don't recognize (version mismatch, not cheating). 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). Set the local version string for capability comparison. Remove a peer's tracking state. Destroy verifier state. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ca3e1e305fc52bf57ac1dc97b0ab0d90cc6e63c825f209a8b645690ac5922e58"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabMeshTopology.md::0000","path":"engine/reference/collab/CollabMeshTopology.md","title":"collab/CollabMeshTopology.js","description":"","kind":"reference","source":"engine/collab/CollabMeshTopology.js","updated":"","headings":["collab/CollabMeshTopology.js","Functions","createMeshTopology(selfId, config = {})","resolveTopology(topo)","topologyAddPeer(topo, peerId, info = {})","topologyRemovePeer(topo, peerId)","topologyPeerConnected(topo, peerId)","topologyPeerDisconnected(topo, peerId)","topologyUpdatePeerMetrics(topo, peerId, metrics)","computeIdealNeighbors(topo)","evaluateSupernodeStatus(topo, selfScore, selfLatencyAvg, integrityInfo)","topologyUpdatePeerIntegrity(topo, peerId, info)","evaluateRemoteSupernodes(topo)","topologyRegisterSupernode(topo, peerId, announcement = null)","topologyUnregisterSupernode(topo, peerId)","topologyApplyInfo(topo, fromPeerId, payload)","gossipFingerprint(op, originPeerId)","gossipWrap(topo, op)","gossipReceive(topo, fromPeerId, op)","startTopology(topo)","stopTopology(topo)","getTopologyMode(topo)","shouldGossip(topo)","isSupernode(topo)","getNeighborIds(topo)","getTopologyStats(topo)","buildSupernodeAnnounce(topo)","buildTopologyInfoOp(topo)","destroyMeshTopology(topo)","rebalanceTopologyNow(topo)","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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","contentHash":"e2f96559ae0378dd515acada0336480f86776749e570dee7a4ecc7a7b7b4e8aa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabMeshTopology.md::0001","path":"engine/reference/collab/CollabMeshTopology.md","title":"collab/CollabMeshTopology.js","description":"","kind":"reference","source":"engine/collab/CollabMeshTopology.js","updated":"","headings":["collab/CollabMeshTopology.js","Functions","createMeshTopology(selfId, config = {})","resolveTopology(topo)","topologyAddPeer(topo, peerId, info = {})","topologyRemovePeer(topo, peerId)","topologyPeerConnected(topo, peerId)","topologyPeerDisconnected(topo, peerId)","topologyUpdatePeerMetrics(topo, peerId, metrics)","computeIdealNeighbors(topo)","evaluateSupernodeStatus(topo, selfScore, selfLatencyAvg, integrityInfo)","topologyUpdatePeerIntegrity(topo, peerId, info)","evaluateRemoteSupernodes(topo)","topologyRegisterSupernode(topo, peerId, announcement = null)","topologyUnregisterSupernode(topo, peerId)","topologyApplyInfo(topo, fromPeerId, payload)","gossipFingerprint(op, originPeerId)","gossipWrap(topo, op)","gossipReceive(topo, fromPeerId, op)","startTopology(topo)","stopTopology(topo)","getTopologyMode(topo)","shouldGossip(topo)","isSupernode(topo)","getNeighborIds(topo)","getTopologyStats(topo)","buildSupernodeAnnounce(topo)","buildTopologyInfoOp(topo)","destroyMeshTopology(topo)","rebalanceTopologyNow(topo)","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"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. Functions Create a topology manager. Parameters: (string) — No description in source JSDoc. (Object) — No description in source JSDoc. Resolve the current topology mode based on peer count and quality. Called after peer join/leave and during periodic rebalance. Parameters: (Object) — No description in source JSDoc. Returns: the new topology mode Register a discovered peer (from signaling). Remove a peer (disconnected / left). Mark a peer as connected (WebRTC DataChannel open). Mark a peer as disconnected. Update a peer's metrics (called from reputation system). Compute the ideal neighbor set based on current metrics. Returns { connect: string[], disconnect: string[] } — peers to add/remove. Parameters: (Object) — No description in source JSDoc. Returns: } 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. Parameters: (Object) — No description in source JSDoc. (number) — our own reputation score (number) — our average latency to neighbors (Object) — { tier, trust, socialModifier } from integrity verifier Returns: true if we became/remained a supernode Update a peer's integrity data (called from integrity verifier tick). Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Evaluate all remote supernodes and demote any that have","contentHash":"48e310cbb230d2c338a194a94cf44da46c62ad631091833a99188543fae61fdf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabMeshTopology.md::0002","path":"engine/reference/collab/CollabMeshTopology.md","title":"collab/CollabMeshTopology.js","description":"","kind":"reference","source":"engine/collab/CollabMeshTopology.js","updated":"","headings":["collab/CollabMeshTopology.js","Functions","createMeshTopology(selfId, config = {})","resolveTopology(topo)","topologyAddPeer(topo, peerId, info = {})","topologyRemovePeer(topo, peerId)","topologyPeerConnected(topo, peerId)","topologyPeerDisconnected(topo, peerId)","topologyUpdatePeerMetrics(topo, peerId, metrics)","computeIdealNeighbors(topo)","evaluateSupernodeStatus(topo, selfScore, selfLatencyAvg, integrityInfo)","topologyUpdatePeerIntegrity(topo, peerId, info)","evaluateRemoteSupernodes(topo)","topologyRegisterSupernode(topo, peerId, announcement = null)","topologyUnregisterSupernode(topo, peerId)","topologyApplyInfo(topo, fromPeerId, payload)","gossipFingerprint(op, originPeerId)","gossipWrap(topo, op)","gossipReceive(topo, fromPeerId, op)","startTopology(topo)","stopTopology(topo)","getTopologyMode(topo)","shouldGossip(topo)","isSupernode(topo)","getNeighborIds(topo)","getTopologyStats(topo)","buildSupernodeAnnounce(topo)","buildTopologyInfoOp(topo)","destroyMeshTopology(topo)","rebalanceTopologyNow(topo)","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. 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. Parameters: (Object) — No description in source JSDoc. Returns: peerIds of demoted supernodes Register a remote peer as a supernode. Unregister a remote peer as a supernode. Validate and apply one advisory topology info payload atomically. The report may expand discovery knowledge but never mutates live routes. Generate a gossip fingerprint for deduplication. Uses a compact hash of the op to avoid forwarding the sa","contentHash":"bafe6a1ea948b4705639522f6ce5902594c44329ed1c167f82acf7b8fa9ec3ad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabMessageRouter.md::0000","path":"engine/reference/collab/CollabMessageRouter.md","title":"collab/CollabMessageRouter.js","description":"","kind":"reference","source":"engine/collab/CollabMessageRouter.js","updated":"","headings":["collab/CollabMessageRouter.js","Functions","createMessageRouter(sendFn, getBufferedAmount)","routerEnqueue(router, op)","messageRouterOpReport(op)","messageRouterBufferedAmountReport(value)","routerFlush(router)","routerStart(router)","routerStop(router)","getRouterStats(router)","resetRouter(router)","destroyRouter(router)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create a message router instance. Parameters: (Function) — (op) = void — raw send to CollabCore.broadcastOp (Function) — () = number — returns max bufferedAmount across peers Enqueue an op for prioritized delivery. Flush all queued ops respecting priority and backpressure. Call once per render frame from the render loop. Start automatic flush timer (call once on init). Stop the automatic flush timer. Get router statistics. Reset router state (on disconnect/reconnect). Destroy router. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5213d382b9f11ff3e3fc7d3529f600c0dda48b6af6b6e4ff369e487b5b07d9fb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabOpQueue.md::0000","path":"engine/reference/collab/CollabOpQueue.md","title":"collab/CollabOpQueue.js","description":"","kind":"reference","source":"engine/collab/CollabOpQueue.js","updated":"","headings":["collab/CollabOpQueue.js","Functions","collabOpAdmissionReport(op)","createOpQueue()","enqueueOp(queue, op)","flushPeer(queue, peerId)","removePeer(queue, peerId)","tickOpQueue(queue)","getOpQueueStats(queue)","clearOpQueue(queue)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Enqueue an incoming op. Returns array of ops ready to apply. Flush all held ops for a peer (called on timeout or peer leave). Remove all state for a peer (on disconnect). Tick — flush any peers with stale gaps. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"259d1aa5ff30fc2d54fd61cc86abd03829a192625d7798a17574c1dfa1083e51"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabPeerReputation.md::0000","path":"engine/reference/collab/CollabPeerReputation.md","title":"collab/CollabPeerReputation.js","description":"","kind":"reference","source":"engine/collab/CollabPeerReputation.js","updated":"","headings":["collab/CollabPeerReputation.js","Functions","createPeerReputation(selfId)","reputationAddPeer(rep, peerId)","reputationRemovePeer(rep, peerId)","buildPingOps(rep)","buildPongOp(pingOp, selfScore)","onPongReceived(rep, peerId, pongOp)","recordBufferedAmount(rep, peerId, bufferedAmount)","tickReputation(rep)","getPeerScore(rep, peerId)","getPeerMetrics(rep, peerId)","getSelfScore(rep)","getAllPeerScores(rep)","getScoreColor(score)","getScoreLabel(score)","destroyPeerReputation(rep)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a reputation tracker for all peers. Parameters: (string) — this peer's unique ID Returns: reputation state Register a new peer. Remove a peer. Build ping ops to send to all peers. Call at PING INTERVAL MS. Returns: } per peer ping ops Build a pong response to an incoming ping. Returns: op to send back Handle an incoming pong from a peer. Records RTT and jitter. Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (Object) — No description in source JSDoc. Record the current bufferedAmount for a peer's data channel. Call this periodically (e.g., every presence tick). Recompute scores for all peers. Call at 0.5Hz. Returns: true if scores were updated this tick Get the reputation score for a specific peer (0 1000). Get full metrics for a specific peer (for debug / stats","contentHash":"c3bedd3b8824a89f59cade61872da01f36d060626ee454ceb12da38b6e468dcf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabPeerReputation.md::0001","path":"engine/reference/collab/CollabPeerReputation.md","title":"collab/CollabPeerReputation.js","description":"","kind":"reference","source":"engine/collab/CollabPeerReputation.js","updated":"","headings":["collab/CollabPeerReputation.js","Functions","createPeerReputation(selfId)","reputationAddPeer(rep, peerId)","reputationRemovePeer(rep, peerId)","buildPingOps(rep)","buildPongOp(pingOp, selfScore)","onPongReceived(rep, peerId, pongOp)","recordBufferedAmount(rep, peerId, bufferedAmount)","tickReputation(rep)","getPeerScore(rep, peerId)","getPeerMetrics(rep, peerId)","getSelfScore(rep)","getAllPeerScores(rep)","getScoreColor(score)","getScoreLabel(score)","destroyPeerReputation(rep)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Returns: true if scores were updated this tick Get the reputation score for a specific peer (0 1000). Get full metrics for a specific peer (for debug / stats display). Get the local peer's self score. This remains the bootstrap score until a self observation consensus path exists. Get all peer scores as an array of { peerId, score, subScores, avgRtt, avgJitter }. Get the score color for rendering (green → yellow → red gradient). Parameters: (number) — 0 1000 Returns: CSS color string Get a human readable label for a score range. Parameters: (number) — No description in source JSDoc. Destroy reputation state. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7bcdad00b369d8562065ca26a536f5360d760e500bad0e242a0026a5f1ca3116"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabPlaySync.md::0000","path":"engine/reference/collab/CollabPlaySync.md","title":"collab/CollabPlaySync.js","description":"","kind":"reference","source":"engine/collab/CollabPlaySync.js","updated":"","headings":["collab/CollabPlaySync.js","Functions","createPlaySync(config = {})","playSyncCommandReport(payload)","playSyncTickReport(simTime)","playSyncHeartbeatReport(payload, currentSeed)","playSyncCorrectionTargetReport(authoritySimTime, localSimTime)","playSyncAccumulatorCorrectionReport(targetSimTime, localSimTime, correctionRate)","playSyncTimelineReport(editor)","broadcastPlay(playSync, seed)","broadcastPause(playSync)","broadcastStop(playSync)","onRemotePlayCommand(playSync, op)","onRemoteHeartbeat(playSync, op)","exportTimeline(editor, filename)","isRemotePlay(playSync)","getCurrentSeed(playSync)","destroyPlaySync(playSync)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Broadcast a play command to all peers. Called when local user hits Play. seed: optional 32 bit int. Generated here if not provided. Broadcast a pause command to all peers. Broadcast a stop command to all peers. Handle an incoming play sync op from a remote peer. Returns the action taken: 'play' 'pause' 'stop' null Handle an incoming sim heartbeat op from a remote peer. Export local simHistory as a downloadable JSON file. Check if the current play command was triggered remotely. Get the current determinism seed. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"92123d1c95aa43c87b8206cc1bf17f948a8a3260bcb4e69c1cf8bb4665e46206"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabPresence.md::0000","path":"engine/reference/collab/CollabPresence.md","title":"collab/CollabPresence.js","description":"","kind":"reference","source":"engine/collab/CollabPresence.js","updated":"","headings":["collab/CollabPresence.js","Functions","presencePacketReport(packet)","createPresenceState()","buildLocalPresencePacket(username, cameraPos, cameraTarget, selectionIds, simTime, mode, userColor)","applyRemotePresence(state, peerId, packet)","addPeer(state, peerId, username)","removePresence(state, peerId)","getPresenceList(state)","getPeerColor(state, peerId)","pruneStalePresence(state)","clearPresenceState(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build a presence packet from local state to broadcast. Apply a remote presence packet for a peer. Register a peer joining (before first presence packet). Remove a peer (on disconnect). Get list of all known peers with their presence data. Get color for a specific peer. Prune peers not seen for 30s. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"745beec66d22fbd733c2867b31b745e5c4bf7dca1e79ad35dcb5535d15a878f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabSceneSync.md::0000","path":"engine/reference/collab/CollabSceneSync.md","title":"collab/CollabSceneSync.js","description":"","kind":"reference","source":"engine/collab/CollabSceneSync.js","updated":"","headings":["collab/CollabSceneSync.js","Functions","collabSceneEntityIdReport(value)","collabSceneValueReport(value, options = {})","actionToOp(action, selfId, seq)","opToAction(op)","collabSceneOpReport(op)","serializeSnapshot(editor)","collabSceneSnapshotReport(snapshot)","applySnapshot(editor, snapshot)","registerCollabSceneEntity(world, entityId)","destroyCollabSceneEntity(world, entityId)","injectSceneSyncDeps(deps)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Convert an EditorHistory action into a collab op payload. Convert a collab op back into an EditorHistory compatible action. Serialize the full scene state into a compact snapshot for new joiners. Apply a full scene snapshot to the editor (for new joiners). Clears existing scene and rebuilds from snapshot. Constants — CollabSceneSync.js Serializes EditorHistory actions < collab ops. Handles full scene snapshots for new joiners. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"92318bd3fa4536b10edf196f1ecce2d1ecce8f7e97a45b10808c748d8462a166"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabSignal.md::0000","path":"engine/reference/collab/CollabSignal.md","title":"collab/CollabSignal.js","description":"","kind":"reference","source":"engine/collab/CollabSignal.js","updated":"","headings":["collab/CollabSignal.js","Functions","createSignalChannel(config)","async fetchTurnCredentials(channel)","startSignaling(channel)","forceAnnounce(channel)","collabSignalTextReport(value, maxBytes, options = {})","collabSignalPayloadReport(payload)","collabIceServerListReport(value)","sendOffer(channel, peerId, sdpOffer, offerId)","broadcastOffer(channel, peerId, sdpOffer, offerId)","sendAnswer(channel, peerId, sdpAnswer, offerId)","sendCandidate(channel, peerId, candidate, offerId)","destroySignalChannel(channel)","collabSignalReconnectPlanReport(attempt)","collabSignalOfferPlanReport(pendingCount, inFlightCount = 0)","collabSignalPeerCapacityReport(connectionCount)","collabSignalTrackerIdHex(value)","collabSignalTrackerBinaryReport(value)","collabSignalHelloReport(message, selfId = '')","collabSignalPeerHelloReport(message, selfId = '')","isBitTorrentFallbackEnabled()","setBitTorrentFallbackEnabled(enabled)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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","contentHash":"64ef49e88a8c7013235226cf5743621908055fd80936763aaeeb94ddd37b7798"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabSignal.md::0001","path":"engine/reference/collab/CollabSignal.md","title":"collab/CollabSignal.js","description":"","kind":"reference","source":"engine/collab/CollabSignal.js","updated":"","headings":["collab/CollabSignal.js","Functions","createSignalChannel(config)","async fetchTurnCredentials(channel)","startSignaling(channel)","forceAnnounce(channel)","collabSignalTextReport(value, maxBytes, options = {})","collabSignalPayloadReport(payload)","collabIceServerListReport(value)","sendOffer(channel, peerId, sdpOffer, offerId)","broadcastOffer(channel, peerId, sdpOffer, offerId)","sendAnswer(channel, peerId, sdpAnswer, offerId)","sendCandidate(channel, peerId, candidate, offerId)","destroySignalChannel(channel)","collabSignalReconnectPlanReport(attempt)","collabSignalOfferPlanReport(pendingCount, inFlightCount = 0)","collabSignalPeerCapacityReport(connectionCount)","collabSignalTrackerIdHex(value)","collabSignalTrackerBinaryReport(value)","collabSignalHelloReport(message, selfId = '')","collabSignalPeerHelloReport(message, selfId = '')","isBitTorrentFallbackEnabled()","setBitTorrentFallbackEnabled(enabled)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"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. 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. Parameters: (Object) — No description in source JSDoc. Returns: true if TURN credentials were obtained 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. 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. Send one SDP offer to one discovered peer on the generic signaling tiers. 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. Send an SDP answer to a specific peer. Send an ICE candidate to a specific peer. Destroy all signaling resources. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"16a0dbbb122b3494b97f4637ffddbc2ac4da3af93b8e0cd80960d6d258a34eec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabSpatialAuthority.md::0000","path":"engine/reference/collab/CollabSpatialAuthority.md","title":"collab/CollabSpatialAuthority.js","description":"","kind":"reference","source":"engine/collab/CollabSpatialAuthority.js","updated":"","headings":["collab/CollabSpatialAuthority.js","Functions","createSpatialAuthority(selfId, config)","computeZoneRadius(sceneBounds)","setZoneRadius(auth, radius)","updatePeerPosition(auth, peerId, position)","removePeer(auth, peerId)","updateEntityPosition(auth, entityId, x, z)","removeEntity(auth, entityId)","resolveAuthority(auth, entityId, x, z)","getMyAuthoritySet(auth)","getMyInterestSet(auth)","getPeerInterestSet(auth, peerId)","isInMyZone(auth, x, z)","isInBufferZone(auth, x, z)","isDormant(auth, entityId)","tickSpatialAuthority(auth)","destroySpatialAuthority(auth)","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a spatial authority state. Parameters: (string) — This peer's unique ID (Object) — Optional overrides Returns: spatial authority state Auto compute zone radius from scene bounds. Parameters: (Object) — { min: [x,y,z], max: [x,y,z] } or { diagonal: number } Returns: zone radius in world units Update the zone radius (e.g., after scene bounds change or manual override). Rebuilds the spatial grid with the new cell size. Update a peer's camera position (called from presence packets). Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. (number[]) — [x, y, z] Remove a peer (on disconnect). Update an entity's position in the spatial grid. Call this when entity transforms change (from physics step or remote sync). Parameters: (Object)","contentHash":"bdc63ea9b9d094684553291e80f2e9a82403306fb7b5f674af0860afe06dcbcc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabSpatialAuthority.md::0001","path":"engine/reference/collab/CollabSpatialAuthority.md","title":"collab/CollabSpatialAuthority.js","description":"","kind":"reference","source":"engine/collab/CollabSpatialAuthority.js","updated":"","headings":["collab/CollabSpatialAuthority.js","Functions","createSpatialAuthority(selfId, config)","computeZoneRadius(sceneBounds)","setZoneRadius(auth, radius)","updatePeerPosition(auth, peerId, position)","removePeer(auth, peerId)","updateEntityPosition(auth, entityId, x, z)","removeEntity(auth, entityId)","resolveAuthority(auth, entityId, x, z)","getMyAuthoritySet(auth)","getMyInterestSet(auth)","getPeerInterestSet(auth, peerId)","isInMyZone(auth, x, z)","isInBufferZone(auth, x, z)","isDormant(auth, entityId)","tickSpatialAuthority(auth)","destroySpatialAuthority(auth)","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"disconnect). Update an entity's position in the spatial grid. Call this when entity transforms change (from physics step or remote sync). Parameters: (Object) — No description in source JSDoc. (number string) — No description in source JSDoc. (number) — World X (number) — World Z Remove an entity from the spatial grid (on entity delete). Resolve authority for a single entity based on proximity. Applies hysteresis: current owner keeps it unless new peer is 20% closer. Parameters: (Object) — No description in source JSDoc. (number string) — No description in source JSDoc. (number) — Entity world X (number) — Entity world Z Returns: } Get all entity IDs that the local peer is authoritative over. Uses the auto authority map (resolved at RESOLVE INTERVAL MS). Parameters: (Object) — No description in source JSDoc. Get all entity IDs within the local peer's interest area (zone × interestMultiplier). Parameters: (Object) — No description in source JSDoc. Get the interest set for a specific peer (used by relay host for filtering). Parameters: (Object) — No description in source JSDoc. (string) — No description in source JSDoc. Check if an entity position is within the local peer's authority zone. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Check if an entity position is within the buffer zone (boundary ring). Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Check if an entity is dormant (outside all peer zones). Parameters: (Object) — No description in source JSDoc. (number string) — No description in source JSDoc. Periodic tick: re resolve auto authority for all tracked entities. Call this at","contentHash":"3256da8ca56b9dd5368a5eccd4bf09af290cccd9f39834aa32a3c182e9260cff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabSpatialAuthority.md::0002","path":"engine/reference/collab/CollabSpatialAuthority.md","title":"collab/CollabSpatialAuthority.js","description":"","kind":"reference","source":"engine/collab/CollabSpatialAuthority.js","updated":"","headings":["collab/CollabSpatialAuthority.js","Functions","createSpatialAuthority(selfId, config)","computeZoneRadius(sceneBounds)","setZoneRadius(auth, radius)","updatePeerPosition(auth, peerId, position)","removePeer(auth, peerId)","updateEntityPosition(auth, entityId, x, z)","removeEntity(auth, entityId)","resolveAuthority(auth, entityId, x, z)","getMyAuthoritySet(auth)","getMyInterestSet(auth)","getPeerInterestSet(auth, peerId)","isInMyZone(auth, x, z)","isInBufferZone(auth, x, z)","isDormant(auth, entityId)","tickSpatialAuthority(auth)","destroySpatialAuthority(auth)","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"description in source JSDoc. (number string) — No description in source JSDoc. Periodic tick: re resolve auto authority for all tracked entities. Call this at 2Hz from the collab loop (or faster if needed). Parameters: (Object) — No description in source JSDoc. Returns: }} detected authority changes Clear all state (on leave room / exit play mode). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ddcb2b2857a2a8080e8a9e2d35d7fa00408f42099957ab7c0ee5f0a1d11077f1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabTransformSync.md::0000","path":"engine/reference/collab/CollabTransformSync.md","title":"collab/CollabTransformSync.js","description":"","kind":"reference","source":"engine/collab/CollabTransformSync.js","updated":"","headings":["collab/CollabTransformSync.js","Functions","createTransformSync()","trackLocalGrab(syncState, entityId)","untrackLocalGrab(syncState, entityId)","buildPlayTransformOp(syncState, ecsWorld, getEntityComponent)","buildFullPlayTransformOp(syncState, ecsWorld, getEntityComponent, sceneEntities, entityAuthority, spatialAuthoritySet)","buildPbdStateOp(syncState, physicsSimulations, spatialAuthoritySet)","applyRemotePbdState(op, physicsSimulations)","applyRemotePlayTransforms(op, peerId, ecsWorld, getEntityComponent, setEntityComponent, syncState)","interpolateRemoteEntities(syncState, ecsWorld, getEntityComponent, localDragEntityId, entityAuthority)","getInterpDelay(syncState)","getRemoteGrabGlows(syncState, presenceState)","destroyTransformSync(syncState)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a transform sync state object. Mark an entity as being actively grabbed/dragged by the local user. Unmark an entity when released. Build a play transforms op for grabbed entities only. Returns null if nothing to broadcast or if throttled. Build a play transforms op for ALL scene entities. Only called by the physics authority at 10Hz. Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. (Function) — No description in source JSDoc. (Map) — editor.scene.entities map (Object) — CollabEntityAuthority state for per entity ownership (Set) — If provided, only broadcast entities in this set (spatial zone filter) Returns: null} 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. Parameters: (Object) — No description in source JSDoc. (Map) — editor.physicsSimulations (Set) — If provided, only broadcast sims for entities in this set (spatial zone filter) Returns: null} 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","contentHash":"ee44b37083624fdefae88f877d6c045a90c3e320a53cfdf284f8e2339cc35737"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabTransformSync.md::0001","path":"engine/reference/collab/CollabTransformSync.md","title":"collab/CollabTransformSync.js","description":"","kind":"reference","source":"engine/collab/CollabTransformSync.js","updated":"","headings":["collab/CollabTransformSync.js","Functions","createTransformSync()","trackLocalGrab(syncState, entityId)","untrackLocalGrab(syncState, entityId)","buildPlayTransformOp(syncState, ecsWorld, getEntityComponent)","buildFullPlayTransformOp(syncState, ecsWorld, getEntityComponent, sceneEntities, entityAuthority, spatialAuthoritySet)","buildPbdStateOp(syncState, physicsSimulations, spatialAuthoritySet)","applyRemotePbdState(op, physicsSimulations)","applyRemotePlayTransforms(op, peerId, ecsWorld, getEntityComponent, setEntityComponent, syncState)","interpolateRemoteEntities(syncState, ecsWorld, getEntityComponent, localDragEntityId, entityAuthority)","getInterpDelay(syncState)","getRemoteGrabGlows(syncState, presenceState)","destroyTransformSync(syncState)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"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 so stepPhysicsSimulations skips the local solver for it (prevents local physics from fighting the authoritative positions). Parameters: (Object) — No description in source JSDoc. (Map) — editor.physicsSimulations 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. 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. Get the current adaptive interpolation delay (ms) for diagnostics. Get set of entity IDs currently being grabbed by remote peers. Returns Map<entityId, peerColor for glow rendering. Parameters: (Object) — No description in source JSDoc. (Object) — CollabPresence state for peer colors Destroy / reset transform sync state. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a628e28a2e93465197680b92508d4e510cd284a0b42f7fa828571477c723b0d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabZoneHandoff.md::0000","path":"engine/reference/collab/CollabZoneHandoff.md","title":"collab/CollabZoneHandoff.js","description":"","kind":"reference","source":"engine/collab/CollabZoneHandoff.js","updated":"","headings":["collab/CollabZoneHandoff.js","Functions","createZoneHandoff()","initiateHandoff(handoff, entityId, fromPeer, toPeer)","cancelHandoff(handoff, entityId)","buildHandoffOp(entityId, fromPeer, toPeer, seq, entityState)","captureEntityState(ecsWorld, getEntityComponent, entityId, physicsSimulations)","onRemoteHandoffOp(handoff, op, selfId, ecsWorld, setEntityComponent, getEntityComponent, physicsSimulations)","tickZoneHandoff(handoff, selfId)","onHandoffPeerDisconnect(handoff, peerId)","onHandoffComplete(handoff, callback)","destroyZoneHandoff(handoff)","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a zone handoff manager. Returns: handoff state Start a pending handoff for an entity (called when spatial authority detects a zone change). Does NOT commit yet — waits for hysteresis period. Parameters: (Object) — handoff state (string number) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. Returns: true if handoff was initiated (false if already pending for same pair) Cancel a pending handoff (entity moved back to original zone). Parameters: (Object) — No description in source JSDoc. (string number) — No description in source JSDoc. Build a zone handoff op with full entity state for network transmission. Called by the outgoing peer when handoff commits. Parameters: (string number) — No description in source JSDoc. (string) — No","contentHash":"6e9ca8b493388c6e50896f9539455ef77679facccdad3b17882fc111ccee4de3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabZoneHandoff.md::0001","path":"engine/reference/collab/CollabZoneHandoff.md","title":"collab/CollabZoneHandoff.js","description":"","kind":"reference","source":"engine/collab/CollabZoneHandoff.js","updated":"","headings":["collab/CollabZoneHandoff.js","Functions","createZoneHandoff()","initiateHandoff(handoff, entityId, fromPeer, toPeer)","cancelHandoff(handoff, entityId)","buildHandoffOp(entityId, fromPeer, toPeer, seq, entityState)","captureEntityState(ecsWorld, getEntityComponent, entityId, physicsSimulations)","onRemoteHandoffOp(handoff, op, selfId, ecsWorld, setEntityComponent, getEntityComponent, physicsSimulations)","tickZoneHandoff(handoff, selfId)","onHandoffPeerDisconnect(handoff, peerId)","onHandoffComplete(handoff, callback)","destroyZoneHandoff(handoff)","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"state for network transmission. Called by the outgoing peer when handoff commits. Parameters: (string number) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (number) — No description in source JSDoc. (Object) — { pos:[x,y,z], rot:[x,y,z,w], vel:[x,y,z], angVel:[x,y,z], pbdParticles?:Float32Array } Returns: op to broadcast Capture entity state for the handoff snapshot. Parameters: (Object) — No description in source JSDoc. (Function) — No description in source JSDoc. (string number) — No description in source JSDoc. (Map) — for PBD particle state Returns: entityState Handle an incoming zone handoff op from a remote peer. Applies the state snapshot if the sequence number is higher than our last. Parameters: (Object) — No description in source JSDoc. (Object) — { type: 'zone handoff', payload: { entityId, fromPeer, toPeer, seq, state } } (string) — this peer's ID (Object) — No description in source JSDoc. (Function) — No description in source JSDoc. (Function) — No description in source JSDoc. (Map) — No description in source JSDoc. Returns: true if handoff was accepted Tick pending handoffs. Commits any that have passed the hysteresis period. Prunes stale pending handoffs. Parameters: (Object) — No description in source JSDoc. (string) — this peer's ID Returns: } handoffs ready to commit Handle peer disconnect: cancel pending handoffs involving this peer and reassign any entities that were mid handoff. Parameters: (Object) — No description in source JSDoc. (string) — disconnected peer Returns: entity IDs that need re assignment Set callback for handoff completion. Destroy handoff state. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API","contentHash":"c31e0465e02a8ba47fd4a1f76486eb529f18fd0d6652ae543ec53003623291b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/CollabZoneHandoff.md::0002","path":"engine/reference/collab/CollabZoneHandoff.md","title":"collab/CollabZoneHandoff.js","description":"","kind":"reference","source":"engine/collab/CollabZoneHandoff.js","updated":"","headings":["collab/CollabZoneHandoff.js","Functions","createZoneHandoff()","initiateHandoff(handoff, entityId, fromPeer, toPeer)","cancelHandoff(handoff, entityId)","buildHandoffOp(entityId, fromPeer, toPeer, seq, entityState)","captureEntityState(ecsWorld, getEntityComponent, entityId, physicsSimulations)","onRemoteHandoffOp(handoff, op, selfId, ecsWorld, setEntityComponent, getEntityComponent, physicsSimulations)","tickZoneHandoff(handoff, selfId)","onHandoffPeerDisconnect(handoff, peerId)","onHandoffComplete(handoff, callback)","destroyZoneHandoff(handoff)","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"for handoff completion. Destroy handoff state. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0ad8da80cf274ea2e2073e7dd91ba70c5deafde4b058f30954ac4111c90d9a93"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/PhysicsGrab.md::0000","path":"engine/reference/collab/PhysicsGrab.md","title":"collab/PhysicsGrab.js","description":"","kind":"reference","source":"engine/collab/PhysicsGrab.js","updated":"","headings":["collab/PhysicsGrab.js","Functions","physicsGrabPeerIdReport(peerId)","physicsGrabVectorReport(value, kind = 'position')","physicsGrabForceReport(objPos, objVel, targetPos, strength, mass)","grabForceOperationReport(op, transportPeerId = null)","admitRemoteGrabForce(remoteGrabs, op, transportPeerId, receivedAtMs = Date.now()","pruneRemoteGrabForces(remoteGrabs, nowMs = Date.now()","removeRemoteGrabPeer(remoteGrabs, peerId)","computeGrabForce(objPos, objVel, targetPos, strength, mass)","tickFatigue(fatigue, loadRatio, dt)","effectiveStrength(baseStrength, fatigue)","canGrab(mass, strength)","createLocalGrab(entityId, targetPos, baseStrength)","buildGrabForceOp(peerId, entityId, targetPos, strength, fatigue)","applyGrabForcesToActor(actor, PhysX, objPos, objVel, grabs, mass)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Compute mass proportional spring damper grab force. Uses frequency/damping ratio parameterization so the convergence rate is identical regardless of","contentHash":"e0b2994a1ce0041c4a32f2d9c60a41a338235888e206bf6446ce4857e4d8fd43"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/PhysicsGrab.md::0001","path":"engine/reference/collab/PhysicsGrab.md","title":"collab/PhysicsGrab.js","description":"","kind":"reference","source":"engine/collab/PhysicsGrab.js","updated":"","headings":["collab/PhysicsGrab.js","Functions","physicsGrabPeerIdReport(peerId)","physicsGrabVectorReport(value, kind = 'position')","physicsGrabForceReport(objPos, objVel, targetPos, strength, mass)","grabForceOperationReport(op, transportPeerId = null)","admitRemoteGrabForce(remoteGrabs, op, transportPeerId, receivedAtMs = Date.now()","pruneRemoteGrabForces(remoteGrabs, nowMs = Date.now()","removeRemoteGrabPeer(remoteGrabs, peerId)","computeGrabForce(objPos, objVel, targetPos, strength, mass)","tickFatigue(fatigue, loadRatio, dt)","effectiveStrength(baseStrength, fatigue)","canGrab(mass, strength)","createLocalGrab(entityId, targetPos, baseStrength)","buildGrabForceOp(peerId, entityId, targetPos, strength, fatigue)","applyGrabForcesToActor(actor, PhysX, objPos, objVel, grabs, mass)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Functions 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. Parameters: (number[]) — [x,y,z] current object world position (number[]) — [x,y,z] current object linear velocity (number[]) — [x,y,z] where the player wants the object to go (number) — player's effective strength (kg equivalent) (number) — object mass in kg (for mass proportional kp/kd) Returns: } Update fatigue based on load this frame. Parameters: (number) — current fatigue [0,1] (1 = fresh) (number) — fraction of max strength being used [0,1] (number) — frame delta time seconds Returns: updated fatigue Effective strength considering fatigue. Even fully exhausted players retain 20% strength (adrenaline). Check if an object is too heavy to pick up at all. Returns false if mass 4x strength (can't apply meaningful force). Create a local grab state for the player's own grab. 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. Apply all active grab forces to a PhysX actor. Call this BEFORE stepPhysicsWorld each frame. Parameters: (Object) — PhysX PxRigidBody actor (Object) — PhysX WASM module (number[]) — [x,y,z] current world position (number[]) — [x,y,z] current linear velocity (Object[]) — array of { targetPos, strength, fatigue } (number) — object mass in kg for mass proportional springs Returns: } Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a4e1b72eae961fa1c6b2d6ccc5c967ff5fa005e542ac7725e2fd56c8e7e23bef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/SpatialHashGrid.md::0000","path":"engine/reference/collab/SpatialHashGrid.md","title":"collab/SpatialHashGrid.js","description":"","kind":"reference","source":"engine/collab/SpatialHashGrid.js","updated":"","headings":["collab/SpatialHashGrid.js","Functions","spatialHashGridIdReport(id)","spatialHashGridPointReport(grid, x, z)","createSpatialHashGrid(cellSize, options = {})","gridInsert(grid, id, x, z)","gridRemove(grid, id)","gridClear(grid)","gridQueryRadius(grid, x, z, radius)","gridQueryRect(grid, minX, minZ, maxX, maxZ)","gridGetPosition(grid, id)","gridSize(grid)","gridGetStats(grid)","destroySpatialHashGrid(grid)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a spatial hash grid. Parameters: (number) — Side length of each grid cell (world units) Returns: grid state Insert an entity into the grid. Parameters: (Object) — No description in source JSDoc. (number string) — Entity ID (number) — World X position (number) — World Z position Remove an entity from the grid. Parameters: (Object) — No description in source JSDoc. (number string) — No description in source JSDoc. Clear all entities from the grid. Query all entity IDs within a radius of a point (XZ plane). Returns entities whose grid position is within the radius. Parameters: (Object) — No description in source JSDoc. (number) — Center X (number) — Center Z (number) — No description in source JSDoc. Returns: matching entity IDs Query all entity IDs within an axis aligned bounding box (XZ plane). Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Get the stored position for an entity. Returns: null} Get the total number of entities in the grid. Constants — Update an entity's position. Alias for insert (handles cell migration). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ade4c620e37640ac3bf7edc3c289579404afe61355b196398a85368d142ecf8f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/collab/index.md::0000","path":"engine/reference/collab/index.md","title":"collab/index.js","description":"","kind":"reference","source":"engine/collab/index.js","updated":"","headings":["collab/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/collab/index.js Barrel export for all collab modules. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6ad27256ebb851bc98700d9c163d45e2f2f11df587a7a12b3dd4006c8770369e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/bootloader.md::0000","path":"engine/reference/compat/bootloader.md","title":"compat/bootloader.js","description":"","kind":"reference","source":"engine/compat/bootloader.js","updated":"","headings":["compat/bootloader.js","Classes","class CompatBootloader","class CompatApp","Functions","async bootExternalApp(options, ctx = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 with optional { storage, profileCache, gpu, scheduler, validate, heal, interpose, onError }. Classes Method Signature Summary Boot a guest app into . A booted guest app handle. Method Signature Summary Build the scoped realm for against a freshly parsed , then run it. Hard isolation path: run the guest in a sandboxed iframe (opaque origin). No host interposers/surface — the guest is self contained and can't reach the OS. Navigation is routed up via ctx.onOpenWindow. Note: the healing pipeline is skipped here (its asset healer emits parent origin blob URLs the iframe can't read; the iframe inlines assets as data: URLs instead). Rebuild and re run the guest from its cached source (Phase 7 recovery). Used by the recovery ladder and the manual Restart button. A snapshot for recovery / debugging. Functions Convenience one shot boot without holding a CompatBootloader instance. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"77d12d7215410f2083f5f2c49c60ebc3bea2b21e78df9248569cd05d858ac42b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/css-healer.md::0000","path":"engine/reference/compat/css-healer.md","title":"compat/css-healer.js","description":"","kind":"reference","source":"engine/compat/css-healer.js","updated":"","headings":["compat/css-healer.js","Functions","scopeCss(css, scope)","scopeSelectorFor(appId)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: css healer.js — scope a guest app's CSS so it cannot style the OS shell. External WebGPU apps routinely style globally. rewrites every style rule so it only applies inside the guest's realm container (e.g. ): 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). Functions Scope a full stylesheet string to (a selector like ). Convenience: the canonical realm scope selector for an app id. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"740eb2716316cfcbbc137c636733c74824ef166495f7422b1f464d1ab524b068"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/dom-healer.md::0000","path":"engine/reference/compat/dom-healer.md","title":"compat/dom-healer.js","description":"","kind":"reference","source":"engine/compat/dom-healer.js","updated":"","headings":["compat/dom-healer.js","Functions","healDom(rootEl, profile)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: dom healer.js — create DOM elements a guest app requires but that are missing. Many single file WebGPU apps assume , an overlay , a HUD , etc. already exist. The compatibility profile lists those in ; this healer ensures each exists inside the guest's realm container BEFORE the guest's scripts run, so and friends resolve instead of throwing. Functions Ensure every entry exists under . Parameters: (HTMLElement) — — the guest realm container (object) — — compatibility profile Returns: } ids that were created <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9cee43909673a4166a2f7d0b257b472e0eba604339434154961ea4cbde259b29"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/error-recovery.md::0000","path":"engine/reference/compat/error-recovery.md","title":"compat/error-recovery.js","description":"","kind":"reference","source":"engine/compat/error-recovery.js","updated":"","headings":["compat/error-recovery.js","Functions","installErrorRecovery(app, { win = (typeof window !== 'undefined' ? window : null)","makeSafeProfile(profile)","renderErrorPanel(app, info)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions A safer variant of a profile used for safe mode reboots. Render a friendly, non fatal error panel inside the guest's realm container. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"581a63eb7256165c9cc5fc5b033b1d3cdc6b4399697c47932b5562ab3a6bce67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/healers/asset-healer.md::0000","path":"engine/reference/compat/healers/asset-healer.md","title":"compat/healers/asset-healer.js","description":"","kind":"reference","source":"engine/compat/healers/asset-healer.js","updated":"","headings":["compat/healers/asset-healer.js","Functions","healAssets({ model, files }, report)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: healers/asset healer.js — resolve bundled relative asset references. A multi file guest references , , etc. Those relative URLs won't resolve inside the realm, so this pass rewrites any reference present in the package map to a blob URL. The created URLs are recorded on so the realm revokes them on destroy. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2b5245a42e5fc6564c50f48ec8223e471b95d729eef36936bd107a76a60f346a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/healers/error-healer.md::0000","path":"engine/reference/compat/healers/error-healer.md","title":"compat/healers/error-healer.js","description":"","kind":"reference","source":"engine/compat/healers/error-healer.js","updated":"","headings":["compat/healers/error-healer.js","Functions","healErrorPolicy({ profile }, report)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ). Kept as its own pass so the recovery policy can grow independently. Functions 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 ). Kept as its own pass so the recovery policy can grow independently. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fe07b5c7c6002d7511e5bbdfa78fd2a822ea629b7aea0927c3301a02948d96a5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/healers/gpu-healer.md::0000","path":"engine/reference/compat/healers/gpu-healer.md","title":"compat/healers/gpu-healer.js","description":"","kind":"reference","source":"engine/compat/healers/gpu-healer.js","updated":"","headings":["compat/healers/gpu-healer.js","Functions","healGpu({ profile }, report)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: healers/gpu healer.js — normalise GPU related profile fields before boot. Sets a sensible and ensures the runtime healing flags the interposer relies on ( , ) are populated. The actual limit clamping happens at runtime in . Functions healers/gpu healer.js — normalise GPU related profile fields before boot. Sets a sensible and ensures the runtime healing flags the interposer relies on ( , ) are populated. The actual limit clamping happens at runtime in . <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"692087c1079d83271b88ddf81551bbd00b7f5b57891d8a228ac85f096258063f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/healers/lifecycle-healer.md::0000","path":"engine/reference/compat/healers/lifecycle-healer.md","title":"compat/healers/lifecycle-healer.js","description":"","kind":"reference","source":"engine/compat/healers/lifecycle-healer.js","updated":"","headings":["compat/healers/lifecycle-healer.js","Functions","healLifecycle({ profile }, report)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2cb51b85f2053b5ffd90b1cb9f29c8b8a6f5f60ab8b34f32f3f2da567cb36a2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/healers/shader-healer.md::0000","path":"engine/reference/compat/healers/shader-healer.md","title":"compat/healers/shader-healer.js","description":"","kind":"reference","source":"engine/compat/healers/shader-healer.js","updated":"","headings":["compat/healers/shader-healer.js","Functions","healShaders({ model, profile }, report)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: healers/shader healer.js — migrate deprecated WGSL attribute syntax. Older WGSL used / / / , which modern WebGPU rejects. This pass rewrites those tokens to the current / / / forms inside inline guest scripts. The patterns are WGSL specific and do not occur in normal JS, so the rewrite is safe. Gated by . Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2b338a8616b8404ca45e75abe4a8a931262c74a619e6725d8a4ce1eac1c8d9cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/healing-pipeline.md::0000","path":"engine/reference/compat/healing-pipeline.md","title":"compat/healing-pipeline.js","description":"","kind":"reference","source":"engine/compat/healing-pipeline.js","updated":"","headings":["compat/healing-pipeline.js","Functions","runHealingPipeline(ctxObj)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7699e80212170625f88bc6a7a2cbb0205b6bd9afdefc4f1e0a713a55d99724ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/html-ingestor.md::0000","path":"engine/reference/compat/html-ingestor.md","title":"compat/html-ingestor.js","description":"","kind":"reference","source":"engine/compat/html-ingestor.js","updated":"","headings":["compat/html-ingestor.js","Functions","parseHTML(html, baseUrl = null)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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.) } Functions 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.) } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d453c882ebccee2a0cf7027dfb7778c2ae76e1fb2031049649f1c21931ef41c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/iframe-realm.md::0000","path":"engine/reference/compat/iframe-realm.md","title":"compat/iframe-realm.js","description":"","kind":"reference","source":"engine/compat/iframe-realm.js","updated":"","headings":["compat/iframe-realm.js","Classes","class IframeRealm","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 iframe WITHOUT , 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 → modules with imports rewritten; bundled CSS/assets → inline/ 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. Classes Method Signature Summary Generate an unguessable per document RPC token. Build the sandboxed iframe and write the self contained guest document. Resolve once the guest document has loaded (scripts run on load). True when the frame unblocker extension is present on this OS page. Service one RPC request from the guest, then post the result back. Allowlist of bridge methods the guest may call (nothing else is reachable). Injected before guest scripts: a postMessage RPC client that backs a synchronous localStorage/sessionStorage shim (hydrated from the host's per app encrypted store, persisted asynchronously) and a host mediated fetch (so the sandboxed app's connections are routed + permissioned). Conservative \"blend with the OS\" stylesheet, injected","contentHash":"dab497ea06b1804e207ff0bfa5f07aedba4f1aebfd867ba533ac980dc4bfc044"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/iframe-realm.md::0001","path":"engine/reference/compat/iframe-realm.md","title":"compat/iframe-realm.js","description":"","kind":"reference","source":"engine/compat/iframe-realm.js","updated":"","headings":["compat/iframe-realm.js","Classes","class IframeRealm","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"asynchronously) and a host mediated fetch (so the sandboxed app's connections are routed + permissioned). Conservative \"blend with the OS\" stylesheet, injected only when the guest opts in via profile.adoptHostTheme. It sets a native dark color scheme and tints selection/scrollbars with the host accent (populated at runtime by the bridge script). It deliberately does NOT restyle the guest's own layout — forcing a full theme onto a third party site usually breaks it. Injected first: route window.open + anchor + programmatic navigations to the host. Graceful degradation shims for guests that STAY sandboxed (opaque origin). An opaque origin makes the browser DENY and the Web Locks API ( ) with a SecurityError. Apps that can't switch to live embedding would otherwise crash on those throws. We install best effort, in page replacements (non persistent) so reads/writes no op instead of throwing. Injected before any guest script; harmless on live frames (which never load this srcdoc) and a no op where the native APIs already work. Navigate this app's own iframe to a new URL (same frame navigation). Drops the sandboxed srcdoc and loads the live URL so the user stays inside the same panel rather than popping the OS Browser. Live http(s) URLs stay sandboxed (allow scripts). A CROSS ORIGIN live page additionally gets allow same origin so it functions as a real site (its ESM/CSS/cookies/storage work on ITS OWN origin) — it still cannot reach the OS document/storage because that origin differs from the OS. OS origin and proxied content never receive allow same origin (see setSandbox). Is cross origin to the OS document? (false on parse failure — fail safe.) Credentialless (\"isolated\") embedding mode. A loads in an ephemeral, cookieless context, which lets the OS embed cross origin","contentHash":"b10c66535ffa4919ab9d4507e9b4428d81664c6af61f3af5b4aa8a4082f338d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/iframe-realm.md::0002","path":"engine/reference/compat/iframe-realm.md","title":"compat/iframe-realm.js","description":"","kind":"reference","source":"engine/compat/iframe-realm.js","updated":"","headings":["compat/iframe-realm.js","Classes","class IframeRealm","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"on parse failure — fail safe.) Credentialless (\"isolated\") embedding mode. A loads in an ephemeral, cookieless context, which lets the OS embed cross origin sites EVEN when the OS page is cross origin isolated (COEP: require corp — needed for SharedArrayBuffer / hi res timers), at the cost of no shared login/cookies inside the frame. Opt in (default OFF to preserve logged in sessions): set (OS settings) or a per app . No op where the attribute is unsupported. Set the iframe sandbox. is added ONLY for live cross origin documents (so third party sites work); it is always withheld from the trusted srcdoc wrapper and from any OS origin proxy/srcdoc content (where allow scripts + allow same origin would defeat the","contentHash":"9608c6f25e4f6ad6ac30f8b9c3403f161a2311b423965f92b06e1d7018e5fcbb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/index.md::0000","path":"engine/reference/compat/index.md","title":"compat/index.js","description":"","kind":"reference","source":"engine/compat/index.js","updated":"","headings":["compat/index.js","Functions","createCompat(ctx = {})","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/compat/index.js — the Engine Compatibility namespace. returns the API used across the OS: await engine.compat.boot({ id, source, mount, mode, permissions }); 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. Functions Constants Re exports , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cd8976c0c966faf78202395d089b9543b1da127138ff27fae92fd41cc6183cad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/interposers/fetch.md::0000","path":"engine/reference/compat/interposers/fetch.md","title":"compat/interposers/fetch.js","description":"","kind":"reference","source":"engine/compat/interposers/fetch.js","updated":"","headings":["compat/interposers/fetch.js","Functions","makeFetchShim({ profile, onError, realm = null } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. or a ), 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, and requests pass through. 3. Cross origin requests are blocked unless the profile granted — preventing a wrapped third party app from phoning home. Functions 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. or a ), 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, and requests pass through. 3. Cross origin requests are blocked unless the profile granted — preventing a wrapped third party app from phoning home. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"deb344e46df05f4d3afcc62c3ccacf8b977f0090c681e96cfaca35eb10b89150"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/interposers/file-export.md::0000","path":"engine/reference/compat/interposers/file-export.md","title":"compat/interposers/file-export.js","description":"","kind":"reference","source":"engine/compat/interposers/file-export.js","updated":"","headings":["compat/interposers/file-export.js","Functions","makeUrlShim(realm, { metrics, onExport } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: interposers/file export.js — safe blob/download handling for a guest realm. Guests export files via + an click (or ). Two problems: created object URLs leak if never revoked, and downloads are invisible to the OS. This shim wraps so every is tracked (and revoked on realm destroy) and each export is counted into the app's metrics — without blocking the legitimate download. Functions interposers/file export.js — safe blob/download handling for a guest realm. Guests export files via + an click (or ). Two problems: created object URLs leak if never revoked, and downloads are invisible to the OS. This shim wraps so every is tracked (and revoked on realm destroy) and each export is counted into the app's metrics — without blocking the legitimate download. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0160a90fbf7c65ff5c81d0293e6eb9161904d4a1bb6cb11875a637ac6bba30f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/interposers/gpu.md::0000","path":"engine/reference/compat/interposers/gpu.md","title":"compat/interposers/gpu.js","description":"","kind":"reference","source":"engine/compat/interposers/gpu.js","updated":"","headings":["compat/interposers/gpu.js","Functions","makeGpuShim({ metrics, onError } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: interposers/gpu.js — wrap for a guest realm. The guest keeps using the real WebGPU implementation, but through a shim that: • clamps to what the adapter actually supports (a very common crash cause when an app hard codes limits from a beefier GPU), • drops unsupported instead of throwing, • counts calls into the app's metrics, • reports device loss (so the recovery layer can react) without spamming on intentional . 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. Functions interposers/gpu.js — wrap for a guest realm. The guest keeps using the real WebGPU implementation, but through a shim that: • clamps to what the adapter actually supports (a very common crash cause when an app hard codes limits from a beefier GPU), • drops unsupported instead of throwing, • counts calls into the app's metrics, • reports device loss (so the recovery layer can react) without spamming on intentional . 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"05cf45f93ac2f430d776e2e675ac7ac59d2cd5df8bd089f1f865ea2a9da1e79f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/interposers/index.md::0000","path":"engine/reference/compat/interposers/index.md","title":"compat/interposers/index.js","description":"","kind":"reference","source":"engine/compat/interposers/index.js","updated":"","headings":["compat/interposers/index.js","Functions","installInterposers({ realm, profile, ctx, app } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 of shims (gpu/raf/storage/fetch), 2. register it at , 3. return a code 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 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 , minimising both collision risk and overhead. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a8ef434e77d93a56c954891e63ff8c8f65cb371622d20fe45ae05c916d2832fe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/interposers/navigation.md::0000","path":"engine/reference/compat/interposers/navigation.md","title":"compat/interposers/navigation.js","description":"","kind":"reference","source":"engine/compat/interposers/navigation.js","updated":"","headings":["compat/interposers/navigation.js","Functions","makeOpenShim({ onOpenWindow, onError } = {})","makeWindowProxy(openShim, { onOpenWindow, onError } = {})","makeLocationProxy({ onOpenWindow, onError } = {})","installNavCapture(realm, { onOpenWindow, onError } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 click or would either pop a real browser window or unload the entire OS. We intercept both and hand the URL to the host via — 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 / / — routes JS driven popups and redirects. Only bound when the probe detected such usage ( ), to minimise shadowing blast radius. Functions Replacement for window.open / open(): route the URL, return a harmless stub. Proxy over the real window that only overrides and writes. Proxy over location: reads pass through; href=/assign/replace are routed. 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). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"57fd11065822a98ebcb9ee8635956f1fcdffe88de0b7081599eca103497df488"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/interposers/raf.md::0000","path":"engine/reference/compat/interposers/raf.md","title":"compat/interposers/raf.js","description":"","kind":"reference","source":"engine/compat/interposers/raf.js","updated":"","headings":["compat/interposers/raf.js","Functions","makeRafShim(realm)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 loop keeps running forever. This shim tracks every pending frame and cancels them all on , 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. Functions 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 loop keeps running forever. This shim tracks every pending frame and cancels them all on , 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"399a740eb883c371369c94d18a55c7cb8c026b8fc141117edb37960ba1eab2ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/interposers/storage.md::0000","path":"engine/reference/compat/interposers/storage.md","title":"compat/interposers/storage.js","description":"","kind":"reference","source":"engine/compat/interposers/storage.js","updated":"","headings":["compat/interposers/storage.js","Functions","makeStorageShim(appId, backing)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: interposers/storage.js — per app namespaced localStorage / sessionStorage. Guests freely use and . Left unscoped they would collide with each other and with the OS. This shim transparently prefixes every key with 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. Functions interposers/storage.js — per app namespaced localStorage / sessionStorage. Guests freely use and . Left unscoped they would collide with each other and with the OS. This shim transparently prefixes every key with 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8e226abd20b4dc1cb2f8b900de18602b11b17b205fe8d08e3e64abed3d18d9b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/interposers/worker.md::0000","path":"engine/reference/compat/interposers/worker.md","title":"compat/interposers/worker.js","description":"","kind":"reference","source":"engine/compat/interposers/worker.js","updated":"","headings":["compat/interposers/worker.js","Functions","makeWorkerShim(realm, RealWorker = (typeof Worker !== 'undefined' ? Worker : null)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: interposers/worker.js — resolve guest Worker(url) references to bundled blobs. A guest's 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. Functions interposers/worker.js — resolve guest Worker(url) references to bundled blobs. A guest's 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"05eedf0d92e16fdf3871a8fbce9a7c0be50840a56ffd09aa3ce2ccc45642c5e1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/module-linker.md::0000","path":"engine/reference/compat/module-linker.md","title":"compat/module-linker.js","description":"","kind":"reference","source":"engine/compat/module-linker.js","updated":"","headings":["compat/module-linker.js","Functions","buildModuleBlobs({ files, transform = null, onWarn = null, resolveBare = null, resolveExternal = null, urlKind = 'blob' } = {})","buildImportResolver(profile)","isBareSpecifier(spec)","isRelativeSpecifier(spec)","isPackageSpecifier(spec)","discoverSpecs(code)","rewriteSpecs(code, urlFor)","resolveSpec(spec, importerRel, files)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: module linker.js — turn an in memory file map into runnable blob URL modules. Loading an ES module from a URL loses its path context, so relative imports ( ) and 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 URL of its resolved target (created in dependency order), optionally apply a code transform (the interposer prelude / shader healing), and return a map plus a resolver for inline module imports. Bare specifiers ( ) may be resolved by the caller provided import resolver (import map / CDN fallback). Absolute/remote URLs are left untouched. Functions Build blob URL modules for every bundled JS file, with relative imports rewritten to reference each other's blob URLs. Parameters: (object) — No description in source JSDoc. Returns: {{ Build a resolver for BARE import specifiers ( , , subpaths) from a compat profile. Resolution order: 1. exact match in 2. longest trailing slash prefix match ( → base) in the map 3. CDN fallback when (default CDN https://esm.sh/, overridable via ) Returns null when nothing matches (the import is left unresolved). A bare specifier: not relative (./ ../ /), not an absolute/remote URL. Collect every (string literal) import specifier from module code. Replace import specifiers using . When it returns a falsy value the original specifier is kept (bare/remote/cyclic). 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 / , then . <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see","contentHash":"8161ff125712cd3840ce23fefb3c1f38b72136705ebd6c2c9a1ad1c384e26ed8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/module-linker.md::0001","path":"engine/reference/compat/module-linker.md","title":"compat/module-linker.js","description":"","kind":"reference","source":"engine/compat/module-linker.js","updated":"","headings":["compat/module-linker.js","Functions","buildModuleBlobs({ files, transform = null, onWarn = null, resolveBare = null, resolveExternal = null, urlKind = 'blob' } = {})","buildImportResolver(profile)","isBareSpecifier(spec)","isRelativeSpecifier(spec)","isPackageSpecifier(spec)","discoverSpecs(code)","rewriteSpecs(code, urlFor)","resolveSpec(spec, importerRel, files)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Tries the literal path, then / , then . <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"86409434a7faae6f5ddefd3e4a2bff04c99c560cca6b83437080d42037475136"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/probe-scanner.md::0000","path":"engine/reference/compat/probe-scanner.md","title":"compat/probe-scanner.js","description":"","kind":"reference","source":"engine/compat/probe-scanner.js","updated":"","headings":["compat/probe-scanner.js","Functions","scanSource(model, files = null)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 , , and 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. Functions Parameters: (object) — — from parseHTML() (Map<string,string Uint8Array ) — — bundled file map. When given, Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"08ffcb4678cff4ff4c08799917049882c2a02914a9f3150f52c5a0a3b9b1a9ba"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/profile-builder.md::0000","path":"engine/reference/compat/profile-builder.md","title":"compat/profile-builder.js","description":"","kind":"reference","source":"engine/compat/profile-builder.js","updated":"","headings":["compat/profile-builder.js","Functions","buildProfile(id, scan, opts = {})","mergeProfiles(saved, fresh)","profilePermissionList(profile)","async sha256Hex(str)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Build a full profile from a static scan result. Parameters: (string) — No description in source JSDoc. (object) — — { sourceType, sourceHash, liveSource } Merge a saved profile with a freshly scanned one. Saved healing/permissions decisions win (they were promoted as working); newly detected requirements and / flags are unioned in. Map a profile to a kernel/AppRegistry permission list (best effort). SHA 256 hex of a string (used for source/version hashing). Constants — 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. reuses known good healing decisions and layers in newly detected requirements. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"470cc502e05c4df4e12f99c3402aa5c70cdf957d8fe9834a7833b32052b4bf68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/profile-cache.md::0000","path":"engine/reference/compat/profile-cache.md","title":"compat/profile-cache.js","description":"","kind":"reference","source":"engine/compat/profile-cache.js","updated":"","headings":["compat/profile-cache.js","Classes","class ProfileCache","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Find a saved profile for an app id (or null). Save/promote a profile. Tracks knownVersions by sourceHash, marking the newest as 'testing' until flips it to 'stable'. Mark a hash as stable (it booted successfully). Known versions for an app id. True if this exact source hash was seen and marked stable before. Persist a runtime snapshot (Phase 7). Forget everything cached for an app id: in memory profile, persisted profile JSON, runtime snapshots, and the index entry. Used when an app is uninstalled with \"also delete cached data\". <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"56149e9e9371d42e7f0d0869e94d78cdfb0d8955b212f0d9ea4ff6a0ae7a8abc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/runtime-realm.md::0000","path":"engine/reference/compat/runtime-realm.md","title":"compat/runtime-realm.js","description":"","kind":"reference","source":"engine/compat/runtime-realm.js","updated":"","headings":["compat/runtime-realm.js","Classes","class RuntimeRealm","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: runtime realm.js — a controlled, scoped execution root for a guest app. Trusted same origin guests (Mode A/B) reference elements via , so the realm is a SCOPED LIGHT DOM container ( ) rather than a shadow root — 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. Classes Method Signature Summary The guest's original base URL (set for live/remote sources; null for local packages). Register a code transform applied to every guest script before execution. Register a teardown hook run on destroy() (used by interposers). Number of classic (non module) guest scripts. Build the scoped DOM (styles + healed body), ready for execute(). Install interposers (if any) then execute guest scripts in order. Apply the interposer transform to inline guest code (not external src). Resolve a script/asset src against the package file map, else return as URL. Resolve a relative reference (href/src) to a bundled file path, trying the literal path then resolution against the entry's directory. Null if remote, absolute, or not bundled. Read a bundled text file (e.g. a linked stylesheet) as a string. Public: resolve a relative fetch ref to bundled file content + MIME type, or null. Lets the fetch shim serve / wasm from the package file map instead of hitting the network (and","contentHash":"df05e8d4d5b14503e9d3feb001e0a93c626ddf917cfbad98034f2730d2b4424a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/runtime-realm.md::0001","path":"engine/reference/compat/runtime-realm.md","title":"compat/runtime-realm.js","description":"","kind":"reference","source":"engine/compat/runtime-realm.js","updated":"","headings":["compat/runtime-realm.js","Classes","class RuntimeRealm","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"relative fetch ref to bundled file content + MIME type, or null. Lets the fetch shim serve / wasm from the package file map instead of hitting the network (and 404ing). Public: resolve a Worker(url) reference to a runnable URL — preferring the pre linked module blob (imports rewritten + shims applied), else a blob of the bundled file. Returns the original url when it isn't a bundled file. Rewrite CSS url(...) references to bundled assets into blob URLs. Lightweight DOM snapshot for recovery (Phase 7 extends this). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bea064b51909d7562e161a08761c376ef22c0f8dd181572caf5fca2e462464ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/schema-registry.md::0000","path":"engine/reference/compat/schema-registry.md","title":"compat/schema-registry.js","description":"","kind":"reference","source":"engine/compat/schema-registry.js","updated":"","headings":["compat/schema-registry.js","Classes","class CompatSchemaRegistry","Functions","validateProfile(profile)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: schema registry.js — validate a compatibility profile before boot. Self contained: a tiny JSON Schema subset checker (type / required / enum / properties / items / additionalProperties) plus which also applies cross field consistency rules (e.g. GPU pipelines imply uses.webgpu). The bootloader calls this via ; Package Studio can call to preview problems before compiling. Classes Method Signature Summary Functions Validate a full compatibility profile: structural schema + consistency rules. Returns: } Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5728e7c820ac73b5395dfd6826da16c72021fafb8842ab8a916ba31fd019d79d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/schemas.md::0000","path":"engine/reference/compat/schemas.md","title":"compat/schemas.js","description":"","kind":"reference","source":"engine/compat/schemas.js","updated":"","headings":["compat/schemas.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 's tiny checker, which supports: type, required, enum, properties, items, additionalProperties. Constants — 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 's tiny checker, which supports: type, required, enum, properties, items, additionalProperties. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c581aaf5d0f4eb454c99d8ee809385fdbb1fec28676ca18a00907638b575d5af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/source-loader.md::0000","path":"engine/reference/compat/source-loader.md","title":"compat/source-loader.js","description":"","kind":"reference","source":"engine/compat/source-loader.js","updated":"","headings":["compat/source-loader.js","Functions","async loadSource(source, ctx = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: source loader.js — load a guest app's source from any supported origin. Supported 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 } Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"28303ca4f57c961d7685fb929019317a8de2b4f3a1fd3d8342d037b2dd9b577d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/surface/engine-texture-surface.md::0000","path":"engine/reference/compat/surface/engine-texture-surface.md","title":"compat/surface/engine-texture-surface.js","description":"","kind":"reference","source":"engine/compat/surface/engine-texture-surface.js","updated":"","headings":["compat/surface/engine-texture-surface.js","Classes","class EngineTextureSurface","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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, is false so falls back to the webgpu canvas surface — the profile can already request this mode, so flipping it on later needs no guest changes. Classes 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, is false so falls back to the webgpu canvas surface — the profile can already request this mode, so flipping it on later needs no guest changes. Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4118103865c66de0ebe007cfac2eb1757c657a4eeb8b7446420173b19bea9e72"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/surface/offscreen-surface.md::0000","path":"engine/reference/compat/surface/offscreen-surface.md","title":"compat/surface/offscreen-surface.js","description":"","kind":"reference","source":"engine/compat/surface/offscreen-surface.js","updated":"","headings":["compat/surface/offscreen-surface.js","Classes","class OffscreenSurface","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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; is false until the offscreen transfer + present path is implemented, so falls back to webgpu canvas. Classes 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; is false until the offscreen transfer + present path is implemented, so falls back to webgpu canvas. Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e7831ff62539995cbffd84d162c2a260ea850bef87aa1f490a350e941630d929"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/surface/surface-manager.md::0000","path":"engine/reference/compat/surface/surface-manager.md","title":"compat/surface/surface-manager.js","description":"","kind":"reference","source":"engine/compat/surface/surface-manager.js","updated":"","headings":["compat/surface/surface-manager.js","Functions","selectSurface(profile, deps = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: surface/surface manager.js — pick the presentation surface for a guest. Selected by . (and ) are fully implemented; / are stubs that report , 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. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d644dff3b3c015d2878b0dc5266cf34aec553b4057e795b379cccbc1b697af08"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/compat/surface/webgpu-canvas-surface.md::0000","path":"engine/reference/compat/surface/webgpu-canvas-surface.md","title":"compat/surface/webgpu-canvas-surface.js","description":"","kind":"reference","source":"engine/compat/surface/webgpu-canvas-surface.js","updated":"","headings":["compat/surface/webgpu-canvas-surface.js","Classes","class WebgpuCanvasSurface","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 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. Classes 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 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. Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c095b77a7b785453a5bcf67618257fd44f2a1e1310c6d3153ca131a70fda40c0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/config/EngineConfig.md::0000","path":"engine/reference/config/EngineConfig.md","title":"config/EngineConfig.js","description":"","kind":"reference","source":"engine/config/EngineConfig.js","updated":"","headings":["config/EngineConfig.js","Functions","parseSimpleYaml(text)","async loadEngineConfig(options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/config/EngineDefaultConfig.md::0000","path":"engine/reference/config/EngineDefaultConfig.md","title":"config/EngineDefaultConfig.js","description":"","kind":"reference","source":"engine/config/EngineDefaultConfig.js","updated":"","headings":["config/EngineDefaultConfig.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b096af760ab936b147de4fda7020d24f3d8a02372332e30196f68481f1ce6c30"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/config/EngineState.md::0000","path":"engine/reference/config/EngineState.md","title":"config/EngineState.js","description":"","kind":"reference","source":"engine/config/EngineState.js","updated":"","headings":["config/EngineState.js","Functions","createGpuState()","createWaterPassState()","createConfigState(overrides = {})","createPhysicsState(overrides = {})","createEcsState()","createSpawnState()","createParticlesState()","createSmokeState()","createRenderState(overrides = {})","createCameraState(config = {})","createInputState()","createAudioState()","createAllState(options = {})","applyEngineConfigToState(config, cfg)","applyEngineConfigToPhysics(physics, cfg)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create GPU state object Create water pass state object Used for screen space fluid/water/metaball rendering Create scene configuration state (merge with engine.cfg overrides) Create physics configuration state Create ECS state object Create spawn/ghost state object Create particle system state object Create volumetric smoke state object Create render settings state Create camera state object Create input state object Create audio state object Create all state objects at once. Parameters: (Object) — Configuration options (Object) — Overrides for config state (Object) — Overrides for physics state (Object) — Overrides for render state Returns: All state objects Apply engine.cfg values to config state. Call this after loading engine.cfg. Parameters: (Object) — Config state to update (Object) — Loaded engine.cfg values Apply engine.cfg values to physics state. Parameters: (Object) — Physics state to update (Object) — Loaded engine.cfg values Constants — Default configuration values (can be overridden by engine.cfg) — Default physics values — Default render settings <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"77d1eb1a67e956bfd66da92b7ebfd275900a5b3a46083460abac68d58bb394fc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/AppBootstrap.md::0000","path":"engine/reference/core/AppBootstrap.md","title":"core/AppBootstrap.js","description":"","kind":"reference","source":"engine/core/AppBootstrap.js","updated":"","headings":["core/AppBootstrap.js","Functions","async bootstrapApp(options)","createMainLoop(options)","async runApp(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AppBootstrap.js Application bootstrap helper Consolidates common app initialization: WebGPU check, canvas ready, config loading, ECS world, GPU init, and main loop setup. Functions Bootstrap a complete application. Parameters: (Object) — Bootstrap options (HTMLCanvasElement) — Canvas element (Object) — GPU state object (Object) — ECS state object (Object) — Config state object (Object) — Physics state object (Object) — Render state object (string) — World name (default: \"AppWorld\") (string) — Config file URL (default: \"./engine.cfg\") (Function) — Function to apply config overrides (Function) — Logger Returns: { device, world } or throws on failure Create main loop with standard update/render pattern. Parameters: (Object) — Loop options (Object) — ECS state (Function) — World step function (Function) — World frame step function (Function) — Input sync function (Function) — Camera update function (Function) — Grab update function (Function) — Simulations step function (Function) — Scene draw function (Function) — Loop creator function (Object) — Render state for FPS tracking (Function) — Logger Full app bootstrap + loop in one call. Parameters: (Object) — All options combined Returns: { device, world, loop } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0271005c3b178fab11bc46e14679018aa74dc5dc422dace71a5ebb6c1f876ed9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/EngineIntegration.md::0000","path":"engine/reference/core/EngineIntegration.md","title":"core/EngineIntegration.js","description":"","kind":"reference","source":"engine/core/EngineIntegration.js","updated":"","headings":["core/EngineIntegration.js","Classes","class SoAParticleEmitter","class RenderCommandBuilder","Functions","async initResourceManagement(device, options = {})","frameWrapper(frameCallback)","async frameWrapperAsync(frameCallback)","submitPhysicsJob(callback, data = null)","submitAIJob(callback, data = null)","submitStreamingJob(callback, data = null)","submitCleanupJob(callback, data = null)","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes High performance particle emitter using SoA Method Signature Summary Emit a single particle Emit burst of particles Update all particles (call each frame) Get particle data for GPU upload Get statistics Render command builder using object pools Method Signature Summary Add a draw command Sort commands by sort key Execute all commands Clear and return commands to pool Functions Initialize resource management for the game Call this during game initialization after WebGPU device is ready Parameters: (GPUDevice) — WebGPU device (Object) — Configuration options Frame wrapper that handles resource management automatically Usage: Parameters: (Function) — Your frame update function Async frame wrapper for async game loops Submit physics job to scheduler Submit AI job to scheduler Submit streaming/loading job to scheduler Submit background cleanup job Constants — Schema for high performance particle system using Structure of Arrays — Schema for entity transforms using Structure of Arrays Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"877d6b27fa386813bae413fa398043a3cd4c4ee90f3f60dd7bb9cc3f6466ddd3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/EntitySystem.md::0000","path":"engine/reference/core/EntitySystem.md","title":"core/EntitySystem.js","description":"","kind":"reference","source":"engine/core/EntitySystem.js","updated":"","headings":["core/EntitySystem.js","Classes","class EntitySystem","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes 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. Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"762229da4e8759f03506a16f23b464b713c452866f8ec7768bfa8c7b565bf2e0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/ResourceManager.md::0000","path":"engine/reference/core/ResourceManager.md","title":"core/ResourceManager.js","description":"","kind":"reference","source":"engine/core/ResourceManager.js","updated":"","headings":["core/ResourceManager.js","Classes","class ResourceManager","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Unified resource management facade Method Signature Summary Initialize the resource manager Begin a new frame call at START of render loop Process scheduled jobs within frame budget Update all registered systems End frame call at END of render loop Allocate float array from frame slab Allocate a 4x4 matrix Allocate vec3 (padded to vec4) Allocate vec4 Get object from pool Return object to pool Create or get an SoA container Allocate and upload uniform data Allocate and upload dynamic vertex data Allocate static geometry (persistent) Free static geometry Get or create cached bind group Create or get texture Get texture by ID Submit job Submit critical job Submit to worker pool Register system for ordered updates Get time remaining in frame budget Check if over frame budget Handle GPU device loss Restore after device loss Get current FPS Get frame time statistics Get comprehensive statistics Log comprehensive report Profile next frame Run comprehensive benchmark and return optimal settings Benchmark memory allocation Benchmark GPU operations Benchmark scheduler throughput Compute overall performance score (0 100) Generate optimal settings recommendations Apply benchmark recommendations to config Shutdown and cleanup Constants Re exports , , , , , , <! HUMAN NOTES Notes & Examples","contentHash":"aa7ee2b086247b849160d86d7762ca75665335c5300a4d1af5dd9415e48889f1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/ResourceManager.md::0001","path":"engine/reference/core/ResourceManager.md","title":"core/ResourceManager.js","description":"","kind":"reference","source":"engine/core/ResourceManager.js","updated":"","headings":["core/ResourceManager.js","Classes","class ResourceManager","Constants","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"settings recommendations Apply benchmark recommendations to config Shutdown and cleanup Constants Re exports , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d976d324a30e052f4ad48413c76b46723ab1cdfdf257a681870a92c5d176619d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/compression/AnimationCompression.md::0000","path":"engine/reference/core/compression/AnimationCompression.md","title":"core/compression/AnimationCompression.js","description":"","kind":"reference","source":"engine/core/compression/AnimationCompression.js","updated":"","headings":["core/compression/AnimationCompression.js","Functions","compressAnimationTrack(track, options = {})","decompressAnimationTrack(compressed)","compressSkeletalAnimation(animation)","decompressSkeletalAnimation(compressed)","reduceKeyframes(track, tolerance = 0.001)","compressAnimationBatch(animations)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Compress animation track (position, rotation, or scale) Parameters: (Object) — { times: Float32Array, values: Float32Array, type: 'position' 'rotation' 'scale' } (Object) — { lossless: boolean } Set lossless=true for zero quality loss Returns: Compressed track data Decompress animation track Compress full skeletal animation Parameters: (Object) — { name, duration, tracks: Map<boneName, track } Returns: Compressed animation Decompress skeletal animation Remove redundant keyframes that can be interpolated Parameters: (Object) — Animation track (number) — Maximum error tolerance Returns: Optimized track Compress multiple animations <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5c12e411c5e7e7200289a10aa8a9f3662fb707562db350bd14b6e1551819909d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/compression/CompressionUtils.md::0000","path":"engine/reference/core/compression/CompressionUtils.md","title":"core/compression/CompressionUtils.js","description":"","kind":"reference","source":"engine/core/compression/CompressionUtils.js","updated":"","headings":["core/compression/CompressionUtils.js","Functions","packVLInt(values)","unpackVLInt(packed)","quantizeFloat(value, range)","dequantizeFloat(quantized, range)","quantizeFloatArray(floats, range)","dequantizeFloatArray(quantized, range)","quantizeToInt8(value, range)","dequantizeFromInt8(quantized, range)","encodeOctahedralNormal(nx, ny, nz)","decodeOctahedralNormal(x, y)","encodeNormalArray(normals)","decodeNormalArray(encoded)","compressQuaternion(x, y, z, w)","decompressQuaternion(compressed)","runLengthEncode(values)","runLengthDecode(runs)","runLengthEncodeCompact(values)","deltaEncode(values)","deltaDecode(deltas)","createPalette(values)","decodePalette(palette, indices)","getCompressionStats(originalSize, compressedSize)","formatBytes(bytes)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions 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) Unpack variable length encoded integers Quantize float to int16 within range [ range, +range] Achieves 50% memory reduction with minimal precision loss Dequantize int16 back to float Quantize array of floats to Int16Array Dequantize Int16Array back to Float32Array Quantize to int8 for even more compression (75% reduction) Use for data that doesn't need high precision (normals, colors) 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\" Decode octahedral coordinates back to 3D normal Encode array of normals (vec3) to Int16Array Input: Float32Array [nx, ny, nz, nx, ny, nz, ...] Output: Int16Array [x, y, x, y, ...] (66% smaller) Decode array of normals back to Float32Array Compress quaternion by dropping smallest component Technique: Store 3 largest components + index of dropped component Used in animation systems for skeletal rigs Decompress quaternion by reconstructing dropped component Run Length Encode an array of values Perfect for voxel","contentHash":"31ca13d08ed6cfcde00ba7c2e198bc8d5e9ef37ccfd96be1df470d6d9af248cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/compression/CompressionUtils.md::0001","path":"engine/reference/core/compression/CompressionUtils.md","title":"core/compression/CompressionUtils.js","description":"","kind":"reference","source":"engine/core/compression/CompressionUtils.js","updated":"","headings":["core/compression/CompressionUtils.js","Functions","packVLInt(values)","unpackVLInt(packed)","quantizeFloat(value, range)","dequantizeFloat(quantized, range)","quantizeFloatArray(floats, range)","dequantizeFloatArray(quantized, range)","quantizeToInt8(value, range)","dequantizeFromInt8(quantized, range)","encodeOctahedralNormal(nx, ny, nz)","decodeOctahedralNormal(x, y)","encodeNormalArray(normals)","decodeNormalArray(encoded)","compressQuaternion(x, y, z, w)","decompressQuaternion(compressed)","runLengthEncode(values)","runLengthDecode(runs)","runLengthEncodeCompact(values)","deltaEncode(values)","deltaDecode(deltas)","createPalette(values)","decodePalette(palette, indices)","getCompressionStats(originalSize, compressedSize)","formatBytes(bytes)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Used in animation systems for skeletal rigs Decompress quaternion by reconstructing dropped component Run Length Encode an array of values Perfect for voxel data with large empty regions Returns: [[value, count], [value, count], ...] Decode run length encoded data RLE with VLInt encoding for maximum compression Returns Uint8Array: [value, count, value, count, ...] Delta encode array (store differences instead of absolute values) Great for temporal data or sorted indices Decode delta encoded array Create palette from array of values Returns: { palette: unique values, indices: array of palette indices } Decode palette compressed data Calculate compression ratio and statistics Format bytes for display <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1fd9e75803f0beab3a4d829f357b84ae146cdc0b0dfd026b4c351f71d4813b69"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/compression/HybridCompression.md::0000","path":"engine/reference/core/compression/HybridCompression.md","title":"core/compression/HybridCompression.js","description":"","kind":"reference","source":"engine/core/compression/HybridCompression.js","updated":"","headings":["core/compression/HybridCompression.js","Functions","compressMeshHybrid(mesh, options = {})","decompressMeshHybrid(compressed)","compressVoxelHybrid(voxels, options = {})","decompressVoxelHybrid(compressed)","compressAnimationHybrid(track, options = {})","decompressAnimationHybrid(compressed)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Compress mesh with hybrid approach Parameters: (Object) — { positions, normals, uvs, indices } (Object) — { quality: 'high' 'medium' 'low' } Returns: Compressed mesh Decompress hybrid mesh Compress voxel chunk with hybrid approach Parameters: (Uint16Array) — Voxel data (Object) — { size, quality } Returns: Compressed chunk Decompress hybrid voxel chunk Compress animation with hybrid approach Parameters: (Object) — Animation track (Object) — { quality } Returns: Compressed track Decompress hybrid animation <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fda26442cdbd08824125e8d38610475d013fba9cb25920d3771162d8444538ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/compression/LosslessCompression.md::0000","path":"engine/reference/core/compression/LosslessCompression.md","title":"core/compression/LosslessCompression.js","description":"","kind":"reference","source":"engine/core/compression/LosslessCompression.js","updated":"","headings":["core/compression/LosslessCompression.js","Functions","compressLZ77(data)","decompressLZ77(compressed)","compressHuffman(data)","decompressHuffman(compressed)","compressLossless(data)","decompressLossless(compressed)","compressFloat32Lossless(floats)","compressInt16Lossless(ints)","compressUint8Lossless(bytes)","testLosslessCompression()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Simple LZ77 compression (basis of DEFLATE) Finds repeated sequences and replaces with back references 100% lossless Decompress LZ77 data Compress data using Huffman coding 100% lossless entropy encoding Decompress Huffman coded data Compress typed array with zero quality loss Combines LZ77 + Huffman for maximum compression Parameters: (TypedArray) — Input data Returns: Compressed data (100% lossless) Decompress losslessly compressed data Perfect reconstruction guaranteed Compress Float32Array losslessly Compress Int16Array losslessly Compress Uint8Array losslessly Test compression on sample data <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c7fb5a1d2f419d00213f874c6b3f0a425d5088ceca554d9b884338d552a63c2a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/compression/MeshCompression.md::0000","path":"engine/reference/core/compression/MeshCompression.md","title":"core/compression/MeshCompression.js","description":"","kind":"reference","source":"engine/core/compression/MeshCompression.js","updated":"","headings":["core/compression/MeshCompression.js","Functions","compressMesh(mesh, options = {})","decompressMesh(compressed)","compressMeshBatch(meshes)","decompressMeshBatch(compressedBatch)","compressMeshForStreaming(mesh, lodLevels = [1.0, 0.5, 0.25])","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Compress mesh data Parameters: (Object) — { positions, normals, uvs, indices, bounds } (Object) — { lossless: boolean } Set lossless=true for zero quality loss Returns: Compressed mesh data Decompress mesh data Parameters: (Object) — Compressed mesh data Returns: Decompressed mesh { positions, normals, uvs, indices } Compress multiple meshes and combine into single buffer Useful for static scene geometry Decompress batch of meshes Compress mesh for streaming (progressive loading) Returns base LOD + detail layers <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8c5ba0f0d8d780d0cff09878f1c4ade30864723ba96621eddb0c188584ee34d9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/compression/VoxelCompression.md::0000","path":"engine/reference/core/compression/VoxelCompression.md","title":"core/compression/VoxelCompression.js","description":"","kind":"reference","source":"engine/core/compression/VoxelCompression.js","updated":"","headings":["core/compression/VoxelCompression.js","Functions","compressVoxelChunk(voxels, options = {})","decompressVoxelChunk(compressed)","compressVoxelDelta(oldChunk, newChunk)","applyVoxelDelta(chunk, delta)","compressVoxelWorld(chunks)","decompressVoxelWorld(compressed)","compressVoxelChunkForStreaming(voxels, size)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Compress voxel chunk data Parameters: (Uint8Array Uint16Array) — Flat array of voxel IDs (Object) — { size: [x,y,z], usePalette, useRLE, useOctree, lossless } Returns: Compressed chunk data Decompress voxel chunk data Parameters: (Object) — Compressed chunk data Returns: Decompressed voxel data Compress changes between two chunk states Perfect for multiplayer sync or undo/redo Apply delta to chunk Compress entire voxel world Parameters: (Map) — Map of chunk coordinates to voxel data Returns: Compressed world data Decompress voxel world Compress chunk for streaming (progressive loading) <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8d93447dd4926f95aa152b2ad699a9df20dae4912a2a2048a6a59ba5721b3be8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/compression/index.md::0000","path":"engine/reference/core/compression/index.md","title":"core/compression/index.js","description":"","kind":"reference","source":"engine/core/compression/index.js","updated":"","headings":["core/compression/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"597032d7e6a049eb135c94f9f2702ae07e16404a37f21e112d8b29e254e4aeed"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/events/EventBus.md::0000","path":"engine/reference/core/events/EventBus.md","title":"core/events/EventBus.js","description":"","kind":"reference","source":"engine/core/events/EventBus.js","updated":"","headings":["core/events/EventBus.js","Functions","buildEventName(category, name)","createEventBus()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/framegraph/FrameGraph.md::0000","path":"engine/reference/core/framegraph/FrameGraph.md","title":"core/framegraph/FrameGraph.js","description":"","kind":"reference","source":"engine/core/framegraph/FrameGraph.js","updated":"","headings":["core/framegraph/FrameGraph.js","Functions","createFrameGraph()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/framepipeline/FrameContext.md::0000","path":"engine/reference/core/framepipeline/FrameContext.md","title":"core/framepipeline/FrameContext.js","description":"","kind":"reference","source":"engine/core/framepipeline/FrameContext.js","updated":"","headings":["core/framepipeline/FrameContext.js","Functions","createFrameContext(overrides)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create a per frame context object. Parameters: (Object) — Consumer specific fields merged into the context Returns: FrameContext <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"381be54187d7ef773c260263210fbd2aae01e2d7080112242bb929e78f5e45de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/framepipeline/FramePipeline.md::0000","path":"engine/reference/core/framepipeline/FramePipeline.md","title":"core/framepipeline/FramePipeline.js","description":"","kind":"reference","source":"engine/core/framepipeline/FramePipeline.js","updated":"","headings":["core/framepipeline/FramePipeline.js","Classes","class FramePipeline","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Register a stage into a phase. Stages are sorted by . Remove a stage by name (from any phase). Runtime enable/disable toggle. Check if a stage is currently enabled. Execute all stages in a single phase. Execute fixedStep phase 0..N times (Unity FixedUpdate / Gaffer \"Fix Your Timestep\" pattern). The pipeline owns the accumulator internally. Each frame: 1. Scale dt by timeScale, clamp to maxFrameTime, add to accumulator 2. Drain accumulator in fixedDt sized steps (capped by maxFixedSteps) 3. Post drain clamp: if accumulator overflowed maxFixedSteps, discard excess (simulation gracefully slows instead of spiraling) 4. Expose fixedAlpha for future render interpolation Execute a phase with timing accumulation (adds to existing timing values). Used by executeFixedStep so multiple","contentHash":"aa0dcf8d2ac1827e9d2a76351a420a37ee5ef6f865fbd9e1c127609ac0f0f8fc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/framepipeline/FramePipeline.md::0001","path":"engine/reference/core/framepipeline/FramePipeline.md","title":"core/framepipeline/FramePipeline.js","description":"","kind":"reference","source":"engine/core/framepipeline/FramePipeline.js","updated":"","headings":["core/framepipeline/FramePipeline.js","Classes","class FramePipeline","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"fixedAlpha for future render interpolation Execute a phase with timing accumulation (adds to existing timing values). Used by executeFixedStep so multiple iterations sum correctly. Run a complete frame: fixedStep → update → render → postRender. Get per stage timing map (stage name → ms). Console friendly timing dump. Get ordered list of all registered stages (for debug UI / inspector). Get the fixed timestep value (seconds). Set the fixed timestep value (seconds). Get the max fixed steps per frame. Set the max fixed steps per frame. Max frame time added to accumulator per frame (seconds). Equivalent to Unity's Time.maximumDeltaTime. Prevents spiral of death by clamping input before accumulation. Simulation time scale (default 1.0). Equivalent to Unity's Time.timeScale. Scales the accumulator input rate — timeScale=2 means 2× more fixed steps, NOT 2× larger dt (which would destabilize physics). Current accumulator value (seconds). Read only diagnostic. Reset the accumulator (e.g. on play/stop transition). Total number of registered stages across all phases. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bd3c4b25868f2279f52f7eb81e3e4a561d6e1d987e8b04443b8d38b17986f6f3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/framepipeline/index.md::0000","path":"engine/reference/core/framepipeline/index.md","title":"core/framepipeline/index.js","description":"","kind":"reference","source":"engine/core/framepipeline/index.js","updated":"","headings":["core/framepipeline/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Frame Pipeline — Barrel exports Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"441f8ded951cb762968cca95aa24dde84bc0e549f348845ccd40973d054c7ca3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/AdaptiveQualityGovernor.md::0000","path":"engine/reference/core/gpu/AdaptiveQualityGovernor.md","title":"core/gpu/AdaptiveQualityGovernor.js","description":"","kind":"reference","source":"engine/core/gpu/AdaptiveQualityGovernor.js","updated":"","headings":["core/gpu/AdaptiveQualityGovernor.js","Classes","class AdaptiveQualityGovernor","Functions","createAdaptiveQualityGovernor(options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"70e4dc9b96345c3b412a17be97c5f1e2bd04b7e9de8861b1b8e7e8f16784b06f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/AsyncComputeScheduler.md::0000","path":"engine/reference/core/gpu/AsyncComputeScheduler.md","title":"core/gpu/AsyncComputeScheduler.js","description":"","kind":"reference","source":"engine/core/gpu/AsyncComputeScheduler.js","updated":"","headings":["core/gpu/AsyncComputeScheduler.js","Classes","class AsyncComputeScheduler","class ComputeWorkGroup","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes AsyncComputeScheduler Manages async compute work Method Signature Summary Initialize the scheduler Begin frame reset timing Check if we have compute budget remaining Schedule a compute task Schedule high priority compute (culling, LOD selection) Schedule normal priority compute (meshing, physics) Schedule low priority background compute Execute high priority tasks immediately Call this before rendering for frame critical compute Execute normal and low priority tasks with budget Call this after rendering or during idle time Execute a single task in a compute pass Request async readback of compute results Mark a task as complete Get pending task count Get stats Clear all pending tasks Destroy resources ComputeWorkGroup Helper for organizing related compute work Method Signature Summary Add a task to this work group Wait for all tasks in group to complete <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and","contentHash":"95f4cc81766c04a0be9b562e7364379f630fe1999d17386df0b353c045e8076a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/AsyncComputeScheduler.md::0001","path":"engine/reference/core/gpu/AsyncComputeScheduler.md","title":"core/gpu/AsyncComputeScheduler.js","description":"","kind":"reference","source":"engine/core/gpu/AsyncComputeScheduler.js","updated":"","headings":["core/gpu/AsyncComputeScheduler.js","Classes","class AsyncComputeScheduler","class ComputeWorkGroup","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"25be8d7e2db1780c93dbe20b3a6ceb0cfdea9dced50d21ba65a424ca7007c547"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/AsyncGPUWorkScheduler.md::0000","path":"engine/reference/core/gpu/AsyncGPUWorkScheduler.md","title":"core/gpu/AsyncGPUWorkScheduler.js","description":"","kind":"reference","source":"engine/core/gpu/AsyncGPUWorkScheduler.js","updated":"","headings":["core/gpu/AsyncGPUWorkScheduler.js","Classes","class AsyncGPUWorkScheduler","class GPUFrameCoordinator","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes 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 Method Signature Summary Schedule GPU work for batched submission Submit all pending work to GPU Force immediate submission of all pending work Configure batching behavior GPU Frame Coordinator Coordinates GPU work across frame boundaries Implements triple buffering and proper synchronization Method Signature Summary Begin a new frame Returns frame index for resource management Submit work for current frame End frame and ensure GPU work is submitted <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives.","contentHash":"3b9f4d3cfa5c7566ec5b67d93a6e90e46c027ebfad2abf45baf1d26f06b78f52"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/AsyncGPUWorkScheduler.md::0001","path":"engine/reference/core/gpu/AsyncGPUWorkScheduler.md","title":"core/gpu/AsyncGPUWorkScheduler.js","description":"","kind":"reference","source":"engine/core/gpu/AsyncGPUWorkScheduler.js","updated":"","headings":["core/gpu/AsyncGPUWorkScheduler.js","Classes","class AsyncGPUWorkScheduler","class GPUFrameCoordinator","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a07d3ce7fc2f697fe3cc74a2ddd15e254b541cc6c254b7044fff621e1dc9dea7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/BindingSignals.md::0000","path":"engine/reference/core/gpu/BindingSignals.md","title":"core/gpu/BindingSignals.js","description":"","kind":"reference","source":"engine/core/gpu/BindingSignals.js","updated":"","headings":["core/gpu/BindingSignals.js","Classes","class ResourceSignal","class BindGroupSignals","Functions","createSignal(value = null)","generateWGSLBindGroupDeclarations(groupIndex, defs)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"cd491ec8f79ac251d6e611532e83e8b74075b82cdb23c8f55dca1a5ce3468a90"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/BitonicSort.md::0000","path":"engine/reference/core/gpu/BitonicSort.md","title":"core/gpu/BitonicSort.js","description":"","kind":"reference","source":"engine/core/gpu/BitonicSort.js","updated":"","headings":["core/gpu/BitonicSort.js","Classes","class BitonicSorter","class RadixSorter","Functions","encodeMorton3D(x, y, z)","positionToMorton(pos, boundsMin, boundsMax)","bitonicSortCPU(keys, values)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Sort key value pairs Sort particles by Morton code for cache locality Sort by camera depth for transparency Method Signature Summary Functions Calculate 30 bit Morton code for 3D position Parameters: (number) — X coordinate (0 1023) (number) — Y coordinate (0 1023) (number) — Z coordinate (0 1023) Returns: Morton code Calculate Morton code from world position Parameters: (number[]) — World position [x, y, z] (number[]) — Minimum bounds (number[]) — Maximum bounds CPU bitonic sort for small arrays or fallback Parameters: (number[]) — No description in source JSDoc. (number[]) — No description in source JSDoc. Constants — Sort key types — Maximum elements (must be power of 2) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in","contentHash":"b4583ad76b92575f5f44eb8d6bc1d225067ad822e71b2b026d81ec3941bce8ad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/BitonicSort.md::0001","path":"engine/reference/core/gpu/BitonicSort.md","title":"core/gpu/BitonicSort.js","description":"","kind":"reference","source":"engine/core/gpu/BitonicSort.js","updated":"","headings":["core/gpu/BitonicSort.js","Classes","class BitonicSorter","class RadixSorter","Functions","encodeMorton3D(x, y, z)","positionToMorton(pos, boundsMin, boundsMax)","bitonicSortCPU(keys, values)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"51e8d9873a52486bd110e0b5dfc20c96572225f20894df9f260cf4b0ec0fcc89"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/BufferLayouts.md::0000","path":"engine/reference/core/gpu/BufferLayouts.md","title":"core/gpu/BufferLayouts.js","description":"","kind":"reference","source":"engine/core/gpu/BufferLayouts.js","updated":"","headings":["core/gpu/BufferLayouts.js","Functions","toFixed(value, scale = FIXEDSCALE)","fromFixed(fixed, scale = FIXEDSCALE)","alignTo(size, align)","paddingFor(size, align)","isAligned(size, align)","getParticleBufferSizes(particleCount)","getGridBufferSizes(gridX, gridY, gridZ)","createAlignedBuffer(device, size, usage, label = '')","createBufferWithData(device, data, usage, label = '')","createUniformBuffer(device, size, label = '')","generateWGSLStruct(name, layout)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Convert float to fixed point integer Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. Convert fixed point integer back to float Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. Align a size/offset to the specified boundary Parameters: (number) — Current size in bytes (number) — Alignment boundary Returns: Aligned size Calculate padding needed to reach alignment Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. Validate that a size meets alignment requirements Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. Calculate buffer sizes for particle system Parameters: (number) — No description in source JSDoc. Calculate grid buffer size Parameters: (number) — Grid cells in X (number) — Grid cells in Y (number) — Grid cells in Z Create a WebGPU buffer with proper alignment Parameters: (GPUDevice) — No description in source JSDoc. (number) — Size in bytes (GPUBufferUsageFlags) — No description in source JSDoc. (string) — No description in source JSDoc. Create a mapped buffer for initial data upload Parameters: (GPUDevice) — No description in source JSDoc. (ArrayBuffer TypedArray) — No description in source JSDoc. (GPUBufferUsageFlags) — No description in source JSDoc. (string) — No description in source JSDoc. Create uniform buffer with proper padding Parameters: (GPUDevice) — No description in source JSDoc. (number) — No description in source JSDoc. (string) — No description in source","contentHash":"a46e26a8ffa643d36b29ddc00f531bdd6ac19269875ebec1c2c8c832dcdc460a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/BufferLayouts.md::0001","path":"engine/reference/core/gpu/BufferLayouts.md","title":"core/gpu/BufferLayouts.js","description":"","kind":"reference","source":"engine/core/gpu/BufferLayouts.js","updated":"","headings":["core/gpu/BufferLayouts.js","Functions","toFixed(value, scale = FIXEDSCALE)","fromFixed(fixed, scale = FIXEDSCALE)","alignTo(size, align)","paddingFor(size, align)","isAligned(size, align)","getParticleBufferSizes(particleCount)","getGridBufferSizes(gridX, gridY, gridZ)","createAlignedBuffer(device, size, usage, label = '')","createBufferWithData(device, data, usage, label = '')","createUniformBuffer(device, size, label = '')","generateWGSLStruct(name, layout)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":3,"text":"with proper padding Parameters: (GPUDevice) — No description in source JSDoc. (number) — No description in source JSDoc. (string) — No description in source JSDoc. Generate WGSL struct definition from layout Parameters: (string) — Struct name (Object) — Layout object with offsets Returns: WGSL code Constants — Uniform buffer alignment (must be 16 bytes) — Storage buffer preferred alignment (4 bytes min, 16 for performance) — Indirect dispatch buffer alignment — Minimum workgroup size for good occupancy — Maximum workgroup size (WebGPU limit) — 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 — High precision scale for positions (6 decimal places) Range: ±2147 units use only for local coordinates — 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 — 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) — Grid velocity output (after grid update) Standard f32 for reading in G2P — FDTD Electromagnetic Field Cell Electric Displacement D: vec3f 12 bytes (padded to 16) Magnetic Induction B: vec3f 12 bytes (padded to 16) Permittivity","contentHash":"987850d7ad29060be744956723451dae03f13aa7c6a15d0e0315853ee41f0c7a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/BufferLayouts.md::0002","path":"engine/reference/core/gpu/BufferLayouts.md","title":"core/gpu/BufferLayouts.js","description":"","kind":"reference","source":"engine/core/gpu/BufferLayouts.js","updated":"","headings":["core/gpu/BufferLayouts.js","Functions","toFixed(value, scale = FIXEDSCALE)","fromFixed(fixed, scale = FIXEDSCALE)","alignTo(size, align)","paddingFor(size, align)","isAligned(size, align)","getParticleBufferSizes(particleCount)","getGridBufferSizes(gridX, gridY, gridZ)","createAlignedBuffer(device, size, usage, label = '')","createBufferWithData(device, data, usage, label = '')","createUniformBuffer(device, size, label = '')","generateWGSLStruct(name, layout)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":2,"chunkCount":3,"text":"G2P — 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 — 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 — Indirect dispatch buffer layout — Indirect draw buffer layout (for instanced rendering) — Dirty chunk entry for conditional dispatch — Dirty flags bitmask <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native","contentHash":"e0a4f305964c9b87930b4cc20e57980d5a16cb1c09cdae48a28f24d36d2d67b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/BufferPool.md::0000","path":"engine/reference/core/gpu/BufferPool.md","title":"core/gpu/BufferPool.js","description":"","kind":"reference","source":"engine/core/gpu/BufferPool.js","updated":"","headings":["core/gpu/BufferPool.js","Classes","class BufferPool","class StagingBufferRing","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GPU Buffer Pool Zero allocation buffer recycling Eliminates per frame buffer creation overhead Classes GPU Buffer Pool Zero allocation buffer recycling Eliminates per frame buffer creation overhead Method Signature Summary Ring buffer for staging data eliminates mapAsync stalls Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"8881ce347ea2059927b73fec14f59d4f1218686b7010bce297c57e2412c5000e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/ComputeBatchSystem.md::0000","path":"engine/reference/core/gpu/ComputeBatchSystem.md","title":"core/gpu/ComputeBatchSystem.js","description":"","kind":"reference","source":"engine/core/gpu/ComputeBatchSystem.js","updated":"","headings":["core/gpu/ComputeBatchSystem.js","Classes","class ComputeBatchSystem","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Compute Batch System Parallel GPU compute with indirect dispatch Enables dynamic workgroup sizing and batched compute operations Method Signature Summary Batch multiple compute dispatches into a single command encoder Create a compute operation descriptor Generate indirect dispatch arguments on GPU <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"5ea34bf2d6c42e57a261ce5ff0ae21a5bf7f1cc8c2dd59db5dc2be0973ce4b17"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/DynamicUniformBuffer.md::0000","path":"engine/reference/core/gpu/DynamicUniformBuffer.md","title":"core/gpu/DynamicUniformBuffer.js","description":"","kind":"reference","source":"engine/core/gpu/DynamicUniformBuffer.js","updated":"","headings":["core/gpu/DynamicUniformBuffer.js","Classes","class DynamicUniformBuffer","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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, , '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 } } Classes Method Signature Summary Set a single field by name. Accepts scalars, arrays, or Float32Array. buf.set('viewProj', float32x16); buf.set('cameraPos', [x, y, z]); buf.set('time', 1.5); buf.set('flags', 3); // u32 Set multiple fields at once. buf.setAll({ viewProj: matrix, cameraPos: [x, y, z], time: elapsed, }); Upload CPU data to GPU. Call once per frame after all sets. Get the byte offset for a field (useful for partial writes). Get the float index for a field. Check if a field exists in the layout. Get current field names. Convenience: create a bind group entry for this buffer. entries: [frame.bindEntry(0)] Destroy GPU buffer. Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the","contentHash":"c0df3b0738d39779d9fbe9d3146a053362799473b27c33d727799d171b86b52b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/DynamicUniformBuffer.md::0001","path":"engine/reference/core/gpu/DynamicUniformBuffer.md","title":"core/gpu/DynamicUniformBuffer.js","description":"","kind":"reference","source":"engine/core/gpu/DynamicUniformBuffer.js","updated":"","headings":["core/gpu/DynamicUniformBuffer.js","Classes","class DynamicUniformBuffer","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"GPU buffer. Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d24a3370203a6bf2f3b027e319859189b476ed03230f76142412c7406a037834"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GPUPageAllocator.md::0000","path":"engine/reference/core/gpu/GPUPageAllocator.md","title":"core/gpu/GPUPageAllocator.js","description":"","kind":"reference","source":"engine/core/gpu/GPUPageAllocator.js","updated":"","headings":["core/gpu/GPUPageAllocator.js","Classes","class GPUPageAllocator","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GPUPageAllocator Virtual heap for GPU memory Method Signature Summary Initialize the allocator Probe GPU memory by allocating until failure Sets maxPages based on detected available memory Initialize staging buffer ring Create a staging buffer (MAP WRITE + COPY SRC) Get a staging buffer for zero copy writes Commit staging buffer to GPU and re map for next use Begin a new frame reset frame tracking Process pending staging buffers Allocate a new page Get the active page, or allocate a new one Write data to the allocator (uses writeBuffer recommended by WebGPU spec) Zero copy write using staging buffer ring Use when data is being generated (not already in ArrayBuffer) Get pages used this frame for binding Get buffer binding entries for bind group Release pages not used for N frames Get allocation result for shader (page index + offset) Get stats for profiler Destroy all pages Constants — WGSL shader helper for page indirection <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition","contentHash":"0d0e0d69a8c783b299f09b1b652568222bbd6fdd67151cc5295f900c39e4f989"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GPUPageAllocator.md::0001","path":"engine/reference/core/gpu/GPUPageAllocator.md","title":"core/gpu/GPUPageAllocator.js","description":"","kind":"reference","source":"engine/core/gpu/GPUPageAllocator.js","updated":"","headings":["core/gpu/GPUPageAllocator.js","Classes","class GPUPageAllocator","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b20ecba7256072c1bf2a53a50ff9da18048c44075dca46259fe003d2f7be5a33"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GPUProfiler.md::0000","path":"engine/reference/core/gpu/GPUProfiler.md","title":"core/gpu/GPUProfiler.js","description":"","kind":"reference","source":"engine/core/gpu/GPUProfiler.js","updated":"","headings":["core/gpu/GPUProfiler.js","Classes","class GPUProfiler","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GPUProfiler Timestamp query based GPU profiling Method Signature Summary Initialize the profiler Register a pass for profiling Get timestamp writes for a render/compute pass Add timestamp writes to a pass descriptor Resolve queries and copy to result buffer Call after all passes are complete, before submit Read results asynchronously Call after submit Get current timing results Get formatted stats string Copy detailed diagnostics to clipboard for analysis Includes all timing data, pass breakdown, and performance metrics Reset for next frame Check if profiling is available Load configuration from engine.cfg section Destroy resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together.","contentHash":"3b567f3eaef238dadb68f4328f4476799930dd885ef7530ea6c42c8536c4375f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GPUProfiler.md::0001","path":"engine/reference/core/gpu/GPUProfiler.md","title":"core/gpu/GPUProfiler.js","description":"","kind":"reference","source":"engine/core/gpu/GPUProfiler.js","updated":"","headings":["core/gpu/GPUProfiler.js","Classes","class GPUProfiler","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2189cb58cd6d6152677f92d1bf7ee91434c8fe8ffb4eef3ce56a3cdde44b70de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GPURandom.md::0000","path":"engine/reference/core/gpu/GPURandom.md","title":"core/gpu/GPURandom.js","description":"","kind":"reference","source":"engine/core/gpu/GPURandom.js","updated":"","headings":["core/gpu/GPURandom.js","Classes","class PCGRandom","class DeterministicRNG","Functions","pcgHash(v)","hash2D(x, y)","hash3D(x, y, z)","initRngState(pixelX, pixelY, frame, sampleIdx = 0)","accumulationWeight(frameIndex)","accumulateColor(oldColor, newColor, frameIndex)","accumulateEMA(oldColor, newColor, alpha)","wavelengthToRGB(wavelength)","spectralHeatMap(t)","countToSpectral(count, cutoff)","blueNoiseOffset(sampleIndex)","r2Sequence3D(sampleIndex)","halton(index, base)","halton2D(index)","halton3D(index)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes RNG state wrapper for sequential random number generation Method Signature Summary Seed the RNG for deterministic sequences Seed from pixel/frame/sample for reproducible noise Get next random float in [0, 1) Get random float in range [min, max) Get random integer in [0, max) Get random value from normal distribution (Box Muller) Get random direction on unit sphere Get random direction in hemisphere around normal Get cosine weighted hemisphere direction (for diffuse) Get random point in unit disk Get random point in unit sphere 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 Method Signature Summary Create a deterministic RNG Create RNG stream for a specific game tick Use for time based events that must sync across clients Create RNG stream for a specific entity Use for per entity random (AI, particles, animations) Create RNG stream for a world position (chunk generation, etc.) Create RNG for interaction between two entities (combat, trade, etc.) Get next random float in [0, 1) Get random float in range [min, max) Get random integer in [0, max) Get random integer in [min, max] Random boolean with probability Pick random element from array Shuffle array in place (Fisher Yates) Get random value from normal distribution Get random direction on unit sphere Get random point in unit sphere Get random point in unit","contentHash":"8c1135d6c5b5fd33a11661c886a14bb3e2af93be47e1105d178b8650ba42dc63"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GPURandom.md::0001","path":"engine/reference/core/gpu/GPURandom.md","title":"core/gpu/GPURandom.js","description":"","kind":"reference","source":"engine/core/gpu/GPURandom.js","updated":"","headings":["core/gpu/GPURandom.js","Classes","class PCGRandom","class DeterministicRNG","Functions","pcgHash(v)","hash2D(x, y)","hash3D(x, y, z)","initRngState(pixelX, pixelY, frame, sampleIdx = 0)","accumulationWeight(frameIndex)","accumulateColor(oldColor, newColor, frameIndex)","accumulateEMA(oldColor, newColor, alpha)","wavelengthToRGB(wavelength)","spectralHeatMap(t)","countToSpectral(count, cutoff)","blueNoiseOffset(sampleIndex)","r2Sequence3D(sampleIndex)","halton(index, base)","halton2D(index)","halton3D(index)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":3,"text":"in place (Fisher Yates) Get random value from normal distribution Get random direction on unit sphere Get random point in unit sphere Get random point in unit disk Weighted random selection Functions PCG hash function high quality, fast Parameters: (number) — Input value (32 bit integer) Returns: Hashed value (32 bit integer) Hash 2D coordinates Parameters: (number) — X coordinate (number) — Y coordinate Returns: Hash value Hash 3D coordinates Parameters: (number) — X coordinate (number) — Y coordinate (number) — Z coordinate Returns: Hash value Initialize RNG state for deterministic per pixel random Parameters: (number) — Pixel X coordinate (number) — Pixel Y coordinate (number) — Frame number (number) — Sample index within frame Returns: Initial RNG state Calculate accumulation weight for progressive rendering Parameters: (number) — Current frame index (0 based) Returns: Weight for new sample (1/(frameIndex+1)) Accumulate color over frames (progressive rendering) Parameters: (number[]) — Previous accumulated color [r, g, b] (number[]) — New sample color [r, g, b] (number) — Current frame index Returns: Accumulated color [r, g, b] Exponential moving average accumulation (real time, non converging) Parameters: (number[]) — Previous color [r, g, b] (number[]) — New color [r, g, b] (number) — Blend factor (0 1, higher = more new) Returns: Blended color [r, g, b] Convert wavelength (nm) to RGB color Parameters: (number) — Wavelength in nanometers (380 780) Returns: [r, g, b] in 0 1 range Map normalized value to spectral color (violet to red) Parameters: (number) — Value in [0, 1] Returns: [r, g, b] spectral color Map count to spectral color with cutoff Parameters: (number) — Count value (number) — Maximum expected count Returns: [r, g, b] spectral color Generate blue noise","contentHash":"a4716925756e484e8d42b081c92208e8e7d337aaa6e6838b95ba2986f55d569a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GPURandom.md::0002","path":"engine/reference/core/gpu/GPURandom.md","title":"core/gpu/GPURandom.js","description":"","kind":"reference","source":"engine/core/gpu/GPURandom.js","updated":"","headings":["core/gpu/GPURandom.js","Classes","class PCGRandom","class DeterministicRNG","Functions","pcgHash(v)","hash2D(x, y)","hash3D(x, y, z)","initRngState(pixelX, pixelY, frame, sampleIdx = 0)","accumulationWeight(frameIndex)","accumulateColor(oldColor, newColor, frameIndex)","accumulateEMA(oldColor, newColor, alpha)","wavelengthToRGB(wavelength)","spectralHeatMap(t)","countToSpectral(count, cutoff)","blueNoiseOffset(sampleIndex)","r2Sequence3D(sampleIndex)","halton(index, base)","halton2D(index)","halton3D(index)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":2,"chunkCount":3,"text":"count to spectral color with cutoff Parameters: (number) — Count value (number) — Maximum expected count Returns: [r, g, b] spectral color Generate blue noise sample offset for a pixel Uses R2 sequence (generalized golden ratio) for low discrepancy sampling Parameters: (number) — Sample index Returns: [x, y] offset in [0, 1) R2 sequence for 3D sampling (quasi random, low discrepancy) Parameters: (number) — Sample index Returns: [x, y, z] in [0, 1) Halton sequence for quasi random sampling Parameters: (number) — Sample index (number) — Prime base (2, 3, 5, 7, etc.) Returns: Value in [0, 1) 2D Halton sequence Parameters: (number) — Sample index Returns: [x, y] in [0, 1) 3D Halton sequence Parameters: (number)","contentHash":"643c554abfdaba3be11577f77191968f6dd851995757ca41b558a23207f0e22c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GPUTimestampProfiler.md::0000","path":"engine/reference/core/gpu/GPUTimestampProfiler.md","title":"core/gpu/GPUTimestampProfiler.js","description":"","kind":"reference","source":"engine/core/gpu/GPUTimestampProfiler.js","updated":"","headings":["core/gpu/GPUTimestampProfiler.js","Classes","class GPUTimestampProfiler","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GPUTimestampProfiler Precise GPU timing using timestamp queries. Requires the optional feature. Classes GPUTimestampProfiler Precise GPU timing using timestamp queries. Requires the optional feature. Method Signature Summary Return both paired pass durations and raw timestamp values. Raw values let a caller measure commands encoded between two timestamped passes, such as a native clearBuffer operation, without replacing it with a slower compute clear. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"7e64f28bc63ae0964b24573b9dd5fda2fe262458024ac97c27aa072d13bb7995"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuBuffer.md::0000","path":"engine/reference/core/gpu/GpuBuffer.md","title":"core/gpu/GpuBuffer.js","description":"","kind":"reference","source":"engine/core/gpu/GpuBuffer.js","updated":"","headings":["core/gpu/GpuBuffer.js","Functions","createVertexBuffer(device, data, options = {})","createIndexBuffer(device, data, options = {})","createUniformBuffer(device, byteSize, options = {})","createStorageBuffer(device, byteSizeOrData, options = {})","updateBuffer(device, buffer, data, offsetBytes = 0)","destroyBuffer(buffer)","destroyBuffers(buffers)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuCanvas.md::0000","path":"engine/reference/core/gpu/GpuCanvas.md","title":"core/gpu/GpuCanvas.js","description":"","kind":"reference","source":"engine/core/gpu/GpuCanvas.js","updated":"","headings":["core/gpu/GpuCanvas.js","Functions","createCanvasContext(gpuDevice, canvas, options = {})","resizeCanvasContext(canvasContext, width, height)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuDebug.md::0000","path":"engine/reference/core/gpu/GpuDebug.md","title":"core/gpu/GpuDebug.js","description":"","kind":"reference","source":"engine/core/gpu/GpuDebug.js","updated":"","headings":["core/gpu/GpuDebug.js","Functions","labelResource(resource, label)","async withErrorScope(device, fn)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuDevice.md::0000","path":"engine/reference/core/gpu/GpuDevice.md","title":"core/gpu/GpuDevice.js","description":"","kind":"reference","source":"engine/core/gpu/GpuDevice.js","updated":"","headings":["core/gpu/GpuDevice.js","Classes","class GpuDevice","Functions","detectGpuPlatform()","async getGpuDevice(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Resolve adapter info cross browser. Chrome 132+: adapter.info (property), device.adapterInfo Chrome <131: adapter.requestAdapterInfo() (async, deprecated then removed) Firefox 141+: adapter.info (follows spec) Safari 26+: adapter.info (follows spec) Gracefully destroy the GPU device and all associated resources. After calling this, the device is unusable — device.lost will fire with reason='destroyed'. Best practice: call before page unload or when switching to a new device after recovery. See: https://toji.dev/webgpu best practices/device loss.html Functions 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper","contentHash":"04af83e93f2f8bcdcf7a7a2eca0ccbd9bf66fe0ed26566d5f7281b22c79566c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuDevice.md::0001","path":"engine/reference/core/gpu/GpuDevice.md","title":"core/gpu/GpuDevice.js","description":"","kind":"reference","source":"engine/core/gpu/GpuDevice.js","updated":"","headings":["core/gpu/GpuDevice.js","Classes","class GpuDevice","Functions","detectGpuPlatform()","async getGpuDevice(options)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"https://github.com/gpuweb/gpuweb/wiki/Implementation Status <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e88223137bdec615195158f33b95fe34d3fccfe0ccdc227b763791406b61c764"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuFormats.md::0000","path":"engine/reference/core/gpu/GpuFormats.md","title":"core/gpu/GpuFormats.js","description":"","kind":"reference","source":"engine/core/gpu/GpuFormats.js","updated":"","headings":["core/gpu/GpuFormats.js","Functions","getPreferredCanvasFormat()","isDepthFormatSupported(device, format)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e5c0bb5489d7b2290952823ad15a3269ae4907e8568e7b581b010abb464066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuFrameBudgetBroker.md::0000","path":"engine/reference/core/gpu/GpuFrameBudgetBroker.md","title":"core/gpu/GpuFrameBudgetBroker.js","description":"","kind":"reference","source":"engine/core/gpu/GpuFrameBudgetBroker.js","updated":"","headings":["core/gpu/GpuFrameBudgetBroker.js","Classes","class GpuFrameBudgetBroker","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes 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. Method Signature Summary Bound queue lead created outside submit(), such as GPUQueue.writeBuffer, then give the compositor a paint opportunity before more work is issued. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem","contentHash":"0f6f2c486e307f5d4777918752c20bec18e91335eadafe6d02387a288e9ef84f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuFrameBudgetBroker.md::0001","path":"engine/reference/core/gpu/GpuFrameBudgetBroker.md","title":"core/gpu/GpuFrameBudgetBroker.js","description":"","kind":"reference","source":"engine/core/gpu/GpuFrameBudgetBroker.js","updated":"","headings":["core/gpu/GpuFrameBudgetBroker.js","Classes","class GpuFrameBudgetBroker","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"35bd951f2782ffe7dffa905890479d50929ba5c7d06c9fa4c6d48ec8b17ee33c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuInit.md::0000","path":"engine/reference/core/gpu/GpuInit.md","title":"core/gpu/GpuInit.js","description":"","kind":"reference","source":"engine/core/gpu/GpuInit.js","updated":"","headings":["core/gpu/GpuInit.js","Functions","async initGpuState(options)","isWebGpuSupported()","waitForCanvasReady(canvas, minSize = 1)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Initialize WebGPU and populate GPU state object. Parameters: (Object) — Initialization options (Object) — GPU state object to populate (string) — Canvas selector (default: \" canvas\") (string) — Device label (string) — Alpha mode (default: \"opaque\") (string) — DPR mode (default: \"auto\") (Function) — Optional logger Returns: { device, queue, context, format } Check if WebGPU is supported. Wait for canvas to be properly sized before GPU init. Parameters: (HTMLCanvasElement) — Canvas element (number) — Minimum size in pixels (default: 1) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual","contentHash":"b7db336c4b23ce82ed32346e3c2c723785168427b4ab3868f6a86b2457db64c9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuInit.md::0001","path":"engine/reference/core/gpu/GpuInit.md","title":"core/gpu/GpuInit.js","description":"","kind":"reference","source":"engine/core/gpu/GpuInit.js","updated":"","headings":["core/gpu/GpuInit.js","Functions","async initGpuState(options)","isWebGpuSupported()","waitForCanvasReady(canvas, minSize = 1)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2848c64f2fcff7d1d12ac8143e047045db5e9275b5d9131bd52c05f42055c361"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuMetrics.md::0000","path":"engine/reference/core/gpu/GpuMetrics.md","title":"core/gpu/GpuMetrics.js","description":"","kind":"reference","source":"engine/core/gpu/GpuMetrics.js","updated":"","headings":["core/gpu/GpuMetrics.js","Functions","recordBufferCreate(byteSize, usageKind = \"other\")","recordTextureCreate(width, height)","getGpuMetrics()","resetGpuMetrics()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuPassGraph.md::0000","path":"engine/reference/core/gpu/GpuPassGraph.md","title":"core/gpu/GpuPassGraph.js","description":"","kind":"reference","source":"engine/core/gpu/GpuPassGraph.js","updated":"","headings":["core/gpu/GpuPassGraph.js","Functions","createGpuPassGraph()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuRecovery.md::0000","path":"engine/reference/core/gpu/GpuRecovery.md","title":"core/gpu/GpuRecovery.js","description":"","kind":"reference","source":"engine/core/gpu/GpuRecovery.js","updated":"","headings":["core/gpu/GpuRecovery.js","Classes","class GpuRecovery","Functions","createRecoveryOverlay(container)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Attach device.lost listener Handle device loss event Attempt to get a new adapter + device with exponential backoff Simulate a device loss for testing. Calls device.destroy() which triggers device.lost with reason='destroyed'. We set a flag so our handler treats it as unexpected. See: https://toji.dev/webgpu best practices/device loss.html testing Check if recovery is currently in progress Stop monitoring and clean up Functions Create a user facing recovery notification overlay. Shows status during recovery and a \"please refresh\" message on failure.","contentHash":"6918c4fe94523d990248b2a5763a5eea9060f162c67da28199d0c8ab948f81ac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuRecovery.md::0001","path":"engine/reference/core/gpu/GpuRecovery.md","title":"core/gpu/GpuRecovery.js","description":"","kind":"reference","source":"engine/core/gpu/GpuRecovery.js","updated":"","headings":["core/gpu/GpuRecovery.js","Classes","class GpuRecovery","Functions","createRecoveryOverlay(container)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"monitoring and clean up Functions Create a user facing recovery notification overlay. Shows status during recovery and a \"please refresh\" message on failure. Parameters: (HTMLElement) — Parent element to attach overlay to Returns: } overlay controller <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"8196f0f55ab236d417d47f5751e775db187399c3ea10b24fcb4a0b757ea1a915"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuSampler.md::0000","path":"engine/reference/core/gpu/GpuSampler.md","title":"core/gpu/GpuSampler.js","description":"","kind":"reference","source":"engine/core/gpu/GpuSampler.js","updated":"","headings":["core/gpu/GpuSampler.js","Functions","getDefaultSampler(device)","getPointSampler(device)","getLinearSampler(device)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuTexture.md::0000","path":"engine/reference/core/gpu/GpuTexture.md","title":"core/gpu/GpuTexture.js","description":"","kind":"reference","source":"engine/core/gpu/GpuTexture.js","updated":"","headings":["core/gpu/GpuTexture.js","Functions","createColorTexture(device, width, height, options = {})","createSampledTexture2D(device, width, height, options = {})","createDepthTexture(device, width, height, options = {})","resizeAttachmentTexture(device, handle, width, height)","destroyAttachmentHandle(handle)","destroyAttachmentHandles(handles)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuTextureLoader.md::0000","path":"engine/reference/core/gpu/GpuTextureLoader.md","title":"core/gpu/GpuTextureLoader.js","description":"","kind":"reference","source":"engine/core/gpu/GpuTextureLoader.js","updated":"","headings":["core/gpu/GpuTextureLoader.js","Functions","async loadTextureFromUrl(device, url, options = {})","createTextureFromKtx2Data(device, data, options = {})","async createTextureFromKtx2DataWithDecoder(device, data, options = {})","async loadKtx2TextureFromUrl(device, url, options = {})","inspectKtx2TextureData(data, options = {})","async inspectKtx2TextureFromUrl(url, options = {})","async createTextureFromImage(device, image, options = {})","async createTextureFromImageBitmap(device, bitmap, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d1a411cc26c5fbe046f27370e7c4b2cfd96e62c0f6795f59adf581f559f935f6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/GpuTransfer.md::0000","path":"engine/reference/core/gpu/GpuTransfer.md","title":"core/gpu/GpuTransfer.js","description":"","kind":"reference","source":"engine/core/gpu/GpuTransfer.js","updated":"","headings":["core/gpu/GpuTransfer.js","Functions","async uploadBufferWithStaging(device, dstBuffer, data, dstOffsetBytes = 0, label = \"gpustagingupload\")","async readBufferToUint8Array(device, srcBuffer, byteOffset, byteLength, label = \"gpureadbackbuffer\")","async readTexture2D(device, srcTexture, width, height, { bytesPerPixel, mipLevel = 0, label = \"gpureadbacktexture2d\", })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. Read back the contents of a GPU buffer into a Uint8Array. Intended for debugging and tooling, not per frame critical paths. 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"81a999e14caea469d4d801760ef0e5c764521239e54fc42b21c7d7b9f6e63cf7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/IndirectDispatchGen.md::0000","path":"engine/reference/core/gpu/IndirectDispatchGen.md","title":"core/gpu/IndirectDispatchGen.js","description":"","kind":"reference","source":"engine/core/gpu/IndirectDispatchGen.js","updated":"","headings":["core/gpu/IndirectDispatchGen.js","Classes","class IndirectDispatchGen","class MultiPassDispatchGen","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Initialize GPU resources Upload chunk flags to GPU Set a single chunk's flags Generate compacted job list and indirect dispatch args Get the indirect buffer for dispatchWorkgroupsIndirect Get the compacted job list buffer Read back job count (for debugging) Destroy GPU resources Generates multiple indirect dispatches for different job types (e.g., separate geometry, lighting, physics passes) Method Signature Summary Initialize all passes Upload shared chunk flags Generate all passes Get indirect buffer for a specific pass Get job list buffer for a specific pass Destroy all resources Constants — Workgroup size for generator shader — Maximum jobs that can be generated per dispatch — Indirect dispatch buffer size (3 × u32 = 12 bytes) Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native ,","contentHash":"0a9245d9b4d9bb424b46ca97bd139522c526dc8a64a9048167745ec61e0e38cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/IndirectDispatchGen.md::0001","path":"engine/reference/core/gpu/IndirectDispatchGen.md","title":"core/gpu/IndirectDispatchGen.js","description":"","kind":"reference","source":"engine/core/gpu/IndirectDispatchGen.js","updated":"","headings":["core/gpu/IndirectDispatchGen.js","Classes","class IndirectDispatchGen","class MultiPassDispatchGen","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f778458a9db79c1d79dab941fa56d08b8ae9e1d63cac5ecb3857904b86c60bc4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/Ktx2Container.md::0000","path":"engine/reference/core/gpu/Ktx2Container.md","title":"core/gpu/Ktx2Container.js","description":"","kind":"reference","source":"engine/core/gpu/Ktx2Container.js","updated":"","headings":["core/gpu/Ktx2Container.js","Functions","ktx2VkFormatInfo(vkFormat = 0, supportedFeatures = null)","isKtx2Container(data)","parseKtx2Container(data, options = {})","ktx2PayloadPlan(containerOrData, options = {})","getKtx2SectionPayloadView(data, section = 'sgd')","createKtx2PayloadDecodeRequest(data, options = {})","ktx2DirectUploadPlan(containerOrData, options = {})","getKtx2LevelPayloadView(data, level = 0)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e5c0bb5489d7b2290952823ad15a3269ae4907e8568e7b581b010abb464066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/MappedBufferWriter.md::0000","path":"engine/reference/core/gpu/MappedBufferWriter.md","title":"core/gpu/MappedBufferWriter.js","description":"","kind":"reference","source":"engine/core/gpu/MappedBufferWriter.js","updated":"","headings":["core/gpu/MappedBufferWriter.js","Classes","class MappedBufferWriter","class UniformBufferWriter extends MappedBufferWriter","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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) Method Signature Summary Get or create a mapped staging buffer Write data to target buffer using mapped staging buffer Saves one copy compared to writeBuffer() Quick write for small data (uses writeBuffer for convenience) Uniform Buffer Writer Optimized for frequent uniform updates Method Signature Summary Write uniform at specific index <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual","contentHash":"189c518c3ef258727e5966c8f98896e31330432c461f5c63d7653e3c04dfcd5e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/MappedBufferWriter.md::0001","path":"engine/reference/core/gpu/MappedBufferWriter.md","title":"core/gpu/MappedBufferWriter.js","description":"","kind":"reference","source":"engine/core/gpu/MappedBufferWriter.js","updated":"","headings":["core/gpu/MappedBufferWriter.js","Classes","class MappedBufferWriter","class UniformBufferWriter extends MappedBufferWriter","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2848c64f2fcff7d1d12ac8143e047045db5e9275b5d9131bd52c05f42055c361"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/OptimizationIntegration.md::0000","path":"engine/reference/core/gpu/OptimizationIntegration.md","title":"core/gpu/OptimizationIntegration.js","description":"","kind":"reference","source":"engine/core/gpu/OptimizationIntegration.js","updated":"","headings":["core/gpu/OptimizationIntegration.js","Classes","class OptimizedGPUDevice","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Enhanced GPU Device wrapper with all optimizations Method Signature Summary Optimized uniform buffer update (uses mapped buffers) Quick uniform update (uses writeBuffer for small data) Schedule GPU work with intelligent batching Flush all pending GPU work Get or create render bundle for repeated geometry Get statistics from all optimization systems Log performance statistics Constants — Quick optimization helper functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"06edc466a966ea8d2bfbbc2f628eff58aca201ff2f6c37a4faa7b9c571a4be75"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/PipelineCache.md::0000","path":"engine/reference/core/gpu/PipelineCache.md","title":"core/gpu/PipelineCache.js","description":"","kind":"reference","source":"engine/core/gpu/PipelineCache.js","updated":"","headings":["core/gpu/PipelineCache.js","Classes","class PipelineCache","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Next gen pipeline cache with IndexedDB persistence and background compilation Eliminates ALL pipeline creation stalls Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b90ebd52d1d76c959f1d9fec970a28580640ef35ebe526a19a25a8947292320e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/ProgressiveWorkBudget.md::0000","path":"engine/reference/core/gpu/ProgressiveWorkBudget.md","title":"core/gpu/ProgressiveWorkBudget.js","description":"","kind":"reference","source":"engine/core/gpu/ProgressiveWorkBudget.js","updated":"","headings":["core/gpu/ProgressiveWorkBudget.js","Functions","planProgressiveWorkBudget(options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Plans optional refinement from measured spare GPU time. It never delays the host frame, submits work, or changes correctness critical work. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"114212478bbf8c2eda3dcf4afeaab234de9727a84810dc1d61fe69e91095d90d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/ShaderCompilationQueue.md::0000","path":"engine/reference/core/gpu/ShaderCompilationQueue.md","title":"core/gpu/ShaderCompilationQueue.js","description":"","kind":"reference","source":"engine/core/gpu/ShaderCompilationQueue.js","updated":"","headings":["core/gpu/ShaderCompilationQueue.js","Classes","class ShaderCompilationQueue","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Async Shader Compilation Queue Priority based background compilation Eliminates frame stalls from shader compilation Classes Method Signature Summary Queue shader for compilation Priority: 0 = low, 1 = normal, 2 = high, 3 = critical Precompile common shaders during idle time <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c992832f8376e7355a34484dc32018e60221ea348a75552f21a31e8fc7351939"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/SimulationProfiler.md::0000","path":"engine/reference/core/gpu/SimulationProfiler.md","title":"core/gpu/SimulationProfiler.js","description":"","kind":"reference","source":"engine/core/gpu/SimulationProfiler.js","updated":"","headings":["core/gpu/SimulationProfiler.js","Classes","class SimulationProfiler","Functions","profiledComputePass(profiler, encoder, name, fn)","createSimulationProfiler(device, options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Start a new profiling frame Write a timestamp at current position Mark the start of a profiled section Mark the end of a profiled section Resolve timestamps and copy to read buffer Read back timing results (async) Get average timing for a section Get min/max/avg stats for a section Get all section stats Get formatted report string Reset all history Functions Profiled compute pass helper Wraps a compute pass with automatic start/end timestamps Create a simulation profiler instance Constants — Pre defined section names for consistency <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native","contentHash":"66b320dad7828d61611fe04269b8f1240332070828d8fcbf804f866e1f1727e7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/SimulationProfiler.md::0001","path":"engine/reference/core/gpu/SimulationProfiler.md","title":"core/gpu/SimulationProfiler.js","description":"","kind":"reference","source":"engine/core/gpu/SimulationProfiler.js","updated":"","headings":["core/gpu/SimulationProfiler.js","Classes","class SimulationProfiler","Functions","profiledComputePass(profiler, encoder, name, fn)","createSimulationProfiler(device, options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"cdcbf9618c7c875d847b2220727b289bddf0135168e5852f16f357a16d521382"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/SparsePageRuntime.md::0000","path":"engine/reference/core/gpu/SparsePageRuntime.md","title":"core/gpu/SparsePageRuntime.js","description":"","kind":"reference","source":"engine/core/gpu/SparsePageRuntime.js","updated":"","headings":["core/gpu/SparsePageRuntime.js","Classes","class SparsePageRuntime","Functions","createSparsePageRuntime(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"8344912abd9266e9c03d0b9af74de3398d80f1b82e804442ac5e72814f00c981"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/TextureAtlasManager.md::0000","path":"engine/reference/core/gpu/TextureAtlasManager.md","title":"core/gpu/TextureAtlasManager.js","description":"","kind":"reference","source":"engine/core/gpu/TextureAtlasManager.js","updated":"","headings":["core/gpu/TextureAtlasManager.js","Classes","class TextureAtlasManager","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Texture Atlas Manager Dynamic texture packing for GPU memory optimization Reduces texture bindings and improves cache coherency Classes Method Signature Summary Allocate space in atlas for a texture Returns { atlas, x, y, width, height, uvTransform } Upload texture data to allocated space Get allocation for a texture ID <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"85eb82145d6935168d1b46d5c4111932d66c8b76aa75ac9acd24ae384c589e84"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUBindGroupManager.md::0000","path":"engine/reference/core/gpu/VGPUBindGroupManager.md","title":"core/gpu/VGPUBindGroupManager.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUBindGroupManager.js","updated":"","headings":["core/gpu/VGPUBindGroupManager.js","Classes","class VGPUBindGroupManager","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Automatic Bind Group Manager Material system that auto generates bind groups from shader Classes Method Signature Summary Create bind group layout from shader source Create bind group automatically from shader and resources Create a material from shader Get existing material Create instance of a material with specific resources Clear all cached layouts and bind groups Re exports , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0b890a79d8231f7cc2f41b839f5a36be624d4d712744c74e99a0a85b0ee6201a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUBindless.md::0000","path":"engine/reference/core/gpu/VGPUBindless.md","title":"core/gpu/VGPUBindless.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUBindless.js","updated":"","headings":["core/gpu/VGPUBindless.js","Classes","class VGPUBindless","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Bindless Preparation Storage buffer texture arrays for bindless style rendering Method Signature Summary Register a texture and get its bindless index Unregister a texture Get texture index Register a buffer and get its bindless index Unregister a buffer Get buffer index Create bind group layout for bindless access Get bind group for bindless access Note: This returns a simplified bind group until WebGPU supports texture arrays Generate WGSL helper code for bindless access Get stats <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e4ebdeee457ad6bedf15c81040bbe589ebe26b561798c309730d10281ea4ee2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUComputeUtils.md::0000","path":"engine/reference/core/gpu/VGPUComputeUtils.md","title":"core/gpu/VGPUComputeUtils.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUComputeUtils.js","updated":"","headings":["core/gpu/VGPUComputeUtils.js","Classes","class VGPUComputeUtils","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Compute exclusive prefix sum (scan) Compute histogram of float values Radix sort key value pairs (32 bit keys) Find min/max values in a buffer Fill buffer with constant value <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1fdd03c40af65fa51e1a0df463403991986ea109bfdd0118fd8d72db12de06bf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUDebugDraw.md::0000","path":"engine/reference/core/gpu/VGPUDebugDraw.md","title":"core/gpu/VGPUDebugDraw.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUDebugDraw.js","updated":"","headings":["core/gpu/VGPUDebugDraw.js","Classes","class VGPUDebugDraw","class DebugDrawScope","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Debug Draw System with dynamic buffer sizing Method Signature Summary Ensure CPU line array has sufficient capacity Ensure GPU line buffer has sufficient capacity Draw a line Draw a ray (line from origin in direction) Draw an arrow Draw an axis aligned box Draw a wireframe sphere Draw a circle in a plane Draw coordinate axes Draw a grid on XZ plane Draw a frustum Add persistent primitive (returns ID for removal) Clear per frame primitives Render debug primitives Get category color Set category color Scoped debug drawing (auto clears when scope ends) Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: )","contentHash":"e5036a7af030c2ca2cab22bb1be7029495d2ec36dfd03e450d0c7fa4ce588bd1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUDebugDraw.md::0001","path":"engine/reference/core/gpu/VGPUDebugDraw.md","title":"core/gpu/VGPUDebugDraw.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUDebugDraw.js","updated":"","headings":["core/gpu/VGPUDebugDraw.js","Classes","class VGPUDebugDraw","class DebugDrawScope","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"da5704c1f02f69e8b5a187bd3956c375e4c5e226d7ad7982a5c342a6b04a6921"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUHiZCulling.md::0000","path":"engine/reference/core/gpu/VGPUHiZCulling.md","title":"core/gpu/VGPUHiZCulling.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUHiZCulling.js","updated":"","headings":["core/gpu/VGPUHiZCulling.js","Classes","class VGPUHiZCulling","class BoundingBoxBuilder","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Hierarchical Z Occlusion Culling System Method Signature Summary Ensure object buffers have sufficient capacity Build HiZ pyramid from depth buffer Upload bounding boxes for occlusion testing Buffers grow automatically to fit the data. Perform occlusion culling Get visibility buffer for reading results Get HiZ texture (for debugging) Resize HiZ buffers Helper to build bounding box data for HiZ culling Grows dynamically no fixed maximum. Method Signature Summary Add a bounding box Add from center and half extents <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9abde4c6fd44dafee2c21175c325ff4867bd35c145b51f749c582d18ef9d653d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUIndirectRenderer.md::0000","path":"engine/reference/core/gpu/VGPUIndirectRenderer.md","title":"core/gpu/VGPUIndirectRenderer.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUIndirectRenderer.js","updated":"","headings":["core/gpu/VGPUIndirectRenderer.js","Classes","class VGPUIndirectRenderer","class IndirectInstanceBuilder","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GPU driven indirect renderer with dynamic buffer sizing Method Signature Summary Ensure instance buffers have sufficient capacity Ensure mesh info buffer has sufficient capacity Upload instance data (transforms and bounding spheres) Buffers grow automatically to fit the data. Upload mesh information Upload which mesh each instance uses Extract frustum planes from view projection matrix Perform GPU culling pass Get the indirect draw buffer for use with drawIndirect Get the draw count buffer (for multi draw indirect count if supported) Get visible instance indices buffer (for instanced rendering) Read back stats (async uses readback queue) Helper to build instance data for indirect rendering Grows dynamically no fixed maximum. Method Signature Summary Add an instance <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives.","contentHash":"0ea98b77c725b3568adbe311289e90a147c03d3733537790d3e798e178e12da8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUIndirectRenderer.md::0001","path":"engine/reference/core/gpu/VGPUIndirectRenderer.md","title":"core/gpu/VGPUIndirectRenderer.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUIndirectRenderer.js","updated":"","headings":["core/gpu/VGPUIndirectRenderer.js","Classes","class VGPUIndirectRenderer","class IndirectInstanceBuilder","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a07d3ce7fc2f697fe3cc74a2ddd15e254b541cc6c254b7044fff621e1dc9dea7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUMemoryTracker.md::0000","path":"engine/reference/core/gpu/VGPUMemoryTracker.md","title":"core/gpu/VGPUMemoryTracker.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUMemoryTracker.js","updated":"","headings":["core/gpu/VGPUMemoryTracker.js","Classes","class VGPUMemoryTracker","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Memory Budget Tracker Track GPU memory usage, warn on budget exceeded Also provides GPU memory probing to detect available VRAM Classes Method Signature Summary Wrap device.createBuffer and device.createTexture so ALL allocations are tracked automatically, even from code that bypasses VirtualGPU. Auto track a resource (skip if already tracked via explicit trackBuffer/trackTexture) Register a buffer allocation Register a texture allocation Unregister a resource Update per frame (for history tracking) Get current memory usage (reuses cached object to avoid GC pressure) Get formatted usage string Get detailed stats Get largest resources (for debugging leaks) Get memory usage trend (increasing/decreasing/stable) Find potential memory leaks (resources older than threshold with no recent access) Set callback for warning threshold Set callback for critical threshold Set callback for over budget Reset all tracking Initialize GPU info from device/adapter limits Get GPU info (limits and probed values) Probe GPU VRAM by allocating progressively larger buffers Uses binary search to find maximum allocatable size Quick probe just get max single allocation (fast) Full probe estimate total VRAM (slower, fills memory) Get probed VRAM info (null if not probed yet) Check if VRAM has been probed Get system RAM info Uses navigator.deviceMemory (approximate) and performance.memory (Chrome only) Probe system RAM by allocating ArrayBuffers until allocation fails This gives a more accurate picture of available RAM than navigator.deviceMemory Get probed RAM info (null if not probed yet) Check if RAM has been probed Get detailed JS memory breakdown (requires cross origin isolation) Includes memory from","contentHash":"a431535d27c7cb3bc7ba592d1aa8cbd416c34532e1089f7301e61dde0f5c242c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUMemoryTracker.md::0001","path":"engine/reference/core/gpu/VGPUMemoryTracker.md","title":"core/gpu/VGPUMemoryTracker.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUMemoryTracker.js","updated":"","headings":["core/gpu/VGPUMemoryTracker.js","Classes","class VGPUMemoryTracker","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":3,"text":"probed RAM info (null if not probed yet) Check if RAM has been probed Get detailed JS memory breakdown (requires cross origin isolation) Includes memory from workers and iframes Get comprehensive memory capabilities info Detect WASM SIMD support (v128 type) Detect WASM Threads support Get all capabilities as a compact object Get storage quota and usage (IndexedDB, Cache API, etc.) This can give hints about available disk/memory Get WebGL memory info (if WebGL context available) Uses WEBGL debug renderer info extension Get memory pressure state (experimental) Some browsers support this via navigator.deviceMemory or onmemorypressure Monitor memory changes over time Returns a function to stop monitoring Start tracking an object for leak detection When the object is garbage collected, we'll know Check which tracked objects are still alive (potential leaks) Schedule memory measurement during browser idle time Cancel a pending idle measurement Create a GPU timing helper for timestamp queries Requires 'timestamp query' feature to be enabled on device Get timestampWrites config for render/compute pass Resolve timing after pass ends Read the timing result (call after queue.submit) Destroy timing resources Get comprehensive memory snapshot for debugging Get full system info for profiler display Estimate VRAM usage from buffer manager (for buffers not tracked individually) Get formatted system memory info Get comprehensive memory report (VRAM + RAM + JS) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each","contentHash":"52503be9e8ace41d3cb35268a5007ceecfef5ace92e1e91840fef352e4db3fc8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUMemoryTracker.md::0002","path":"engine/reference/core/gpu/VGPUMemoryTracker.md","title":"core/gpu/VGPUMemoryTracker.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUMemoryTracker.js","updated":"","headings":["core/gpu/VGPUMemoryTracker.js","Classes","class VGPUMemoryTracker","Notes & Examples","Shared GPU device"],"chunkIndex":2,"chunkCount":3,"text":"limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in p","contentHash":"49267901222780eba9778c359c9dce8d616b5d99a656b22c5584997ae15cebed"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUMultiQueue.md::0000","path":"engine/reference/core/gpu/VGPUMultiQueue.md","title":"core/gpu/VGPUMultiQueue.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUMultiQueue.js","updated":"","headings":["core/gpu/VGPUMultiQueue.js","Classes","class VGPUMultiQueue","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Multi Queue Abstraction Separate graphics/compute/transfer queues when available Method Signature Summary Get a specific queue Get the graphics queue (primary) Get the compute queue Get the transfer/copy queue Submit work to a specific queue Submit graphics work Submit compute work Submit transfer/copy work Create a fence for synchronization Wait for a fence to complete Signal a fence from a queue Create a cross queue dependency Execute async compute work Execute async transfer work Get queue statistics Flush all queues Re exports , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU ·","contentHash":"9220c6a6aa0f5e8feb78a3a3ced263b86b3c5d1fc035b67c513a79b61f6ea03d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUMultiQueue.md::0001","path":"engine/reference/core/gpu/VGPUMultiQueue.md","title":"core/gpu/VGPUMultiQueue.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUMultiQueue.js","updated":"","headings":["core/gpu/VGPUMultiQueue.js","Classes","class VGPUMultiQueue","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0b87224503d51cdf4dbcce84c621580781c58849becbe60ef2cfde96bac51fe8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUQualityScaler.md::0000","path":"engine/reference/core/gpu/VGPUQualityScaler.md","title":"core/gpu/VGPUQualityScaler.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUQualityScaler.js","updated":"","headings":["core/gpu/VGPUQualityScaler.js","Classes","class VGPUQualityScaler","class VGPUDynamicViewport","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Quality Scaler Dynamic resolution/quality based on frame time budget Method Signature Summary Update with current frame time Get current resolution scale (0 1) Get render resolution for a base resolution Force a specific scale Use discrete quality levels instead of continuous scaling Get current quality level Set quality level by name Get all quality level names Configure quality levels Get performance stats Reset stats Set target FPS Set callbacks Viewport manager for dynamic resolution Method Signature Summary Update render targets for new scale Update base resolution Get current render texture Get current render view Get depth texture Get depth view Get current dimensions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap","contentHash":"cb6a3359054818031feb451040ba8d2f3757ceaf06dcf5eb14ecadaa107a41de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUQualityScaler.md::0001","path":"engine/reference/core/gpu/VGPUQualityScaler.md","title":"core/gpu/VGPUQualityScaler.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUQualityScaler.js","updated":"","headings":["core/gpu/VGPUQualityScaler.js","Classes","class VGPUQualityScaler","class VGPUDynamicViewport","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e37bab98e3ebba4b3d47681bac4e0a987f30e1d2d907d98ac2dc2f19951cf3cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUReadbackQueue.md::0000","path":"engine/reference/core/gpu/VGPUReadbackQueue.md","title":"core/gpu/VGPUReadbackQueue.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUReadbackQueue.js","updated":"","headings":["core/gpu/VGPUReadbackQueue.js","Classes","class VGPUReadbackQueue","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GPU Readback Queue Async buffer/texture reads with callbacks Batches staging buffers for efficient GPU→CPU data transfer Method Signature Summary Queue a buffer read with callback Queue a texture read with callback Flush all pending reads (call once per frame) Get pending request count <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6b33c870852b07c436c756a974d453c1e0b484dfdf735d327f114f8675a992a3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPURenderGraph.md::0000","path":"engine/reference/core/gpu/VGPURenderGraph.md","title":"core/gpu/VGPURenderGraph.js","description":"","kind":"reference","source":"engine/core/gpu/VGPURenderGraph.js","updated":"","headings":["core/gpu/VGPURenderGraph.js","Classes","class VGPURenderGraph","class RenderGraphBuilder","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Main Render Graph class Method Signature Summary Register an external resource (not managed by the graph) Add a render pass to the graph Compile the render graph Cull unused passes Compute resource lifetimes Allocate transient resources Build execution order Batch resource barriers Execute the compiled render graph Reset the graph for next frame End frame return transient resources to pool Get debug info about the graph Generate DOT graph for visualization Builder pattern for ergonomic graph construction Method Signature Summary Re exports , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing ·","contentHash":"88cb16f65063b12e0e1e4536446fc8bf2e294a38bf3cb81446ad874639b1a073"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPURenderGraph.md::0001","path":"engine/reference/core/gpu/VGPURenderGraph.md","title":"core/gpu/VGPURenderGraph.js","description":"","kind":"reference","source":"engine/core/gpu/VGPURenderGraph.js","updated":"","headings":["core/gpu/VGPURenderGraph.js","Classes","class VGPURenderGraph","class RenderGraphBuilder","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"57af9f14a6b98c6d090a8b484cd248f48b20b4c20a48afffe4b6f5d99643b404"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPURenderStats.md::0000","path":"engine/reference/core/gpu/VGPURenderStats.md","title":"core/gpu/VGPURenderStats.js","description":"","kind":"reference","source":"engine/core/gpu/VGPURenderStats.js","updated":"","headings":["core/gpu/VGPURenderStats.js","Classes","class VGPURenderStats","class VGPUStatsOverlay","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Render Statistics Draw call counts, triangle counts, state changes per frame Method Signature Summary Begin a new frame End the current frame Record a draw call Record a compute dispatch Record a pipeline change Record a bind group change Record a vertex buffer change Record an index buffer change Record render pass begin Record compute pass begin Record texture bind Record buffer bind Record blit/copy operation Record clear operation Get current frame stats Get previous frame stats Get average stats over all frames Get formatted stats string Get stats history for graphing Get multiple stats as time series Reset all stats Get frame count Stats overlay for debug display Method Signature Summary Create and show overlay Hide overlay Toggle visibility <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this","contentHash":"825f501f71b24f889beb290edd5bb03ed7c33fdfb95d32f9936cfb0259f661da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPURenderStats.md::0001","path":"engine/reference/core/gpu/VGPURenderStats.md","title":"core/gpu/VGPURenderStats.js","description":"","kind":"reference","source":"engine/core/gpu/VGPURenderStats.js","updated":"","headings":["core/gpu/VGPURenderStats.js","Classes","class VGPURenderStats","class VGPUStatsOverlay","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d2da68394522e2f287ff7208e304b22ad6ba11829056559cea0e8de55f4a2d94"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUResourceBarriers.md::0000","path":"engine/reference/core/gpu/VGPUResourceBarriers.md","title":"core/gpu/VGPUResourceBarriers.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUResourceBarriers.js","updated":"","headings":["core/gpu/VGPUResourceBarriers.js","Classes","class VGPUResourceBarriers","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Resource Barriers Helper Explicit sync points for complex resource dependencies Method Signature Summary Track resource state Get current resource state Transition a resource to a new state Batch transition multiple resources Flush pending transitions (insert barriers) Create a barrier scope for automatic state management Check if transition causes a hazard Create a dependency graph for resources Reset all resource states Get debug info Re exports , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3f91d42716ec382081506112f3d608b68fab6251748b5b7210aebf07a421463d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUShaderReflection.md::0000","path":"engine/reference/core/gpu/VGPUShaderReflection.md","title":"core/gpu/VGPUShaderReflection.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUShaderReflection.js","updated":"","headings":["core/gpu/VGPUShaderReflection.js","Classes","class VGPUShaderReflection","Functions","getShaderReflection()","getStructBufferSize(shaderSource, structName)","getUniformBufferSizes(shaderSource)","createAutoSizedUniformBuffer(device, shaderSource, structName, options = {})","validateBufferSize(buffer, shaderSource, structName)","debugShaderStructs(shaderSource)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shader Reflection Parse WGSL to extract bindings, uniforms, entry points Classes Method Signature Summary Analyze WGSL shader source and extract metadata Get bind group layout entries from reflection Get all bind groups used in shader Functions Get the required buffer size for a uniform struct in a shader. Automatically calculates correct WGSL alignment. Parameters: (string) — WGSL shader source code (string) — Name of the struct to get size for Returns: Required buffer size in bytes Get buffer sizes for all uniform bindings in a shader. Parameters: (string) — WGSL shader source code Returns: Map of binding name required size Create a uniform buffer with automatically calculated size from shader struct. Parameters: (GPUDevice) — WebGPU device (string) — WGSL shader source code (string) — Name of the struct (Object) — Buffer options (label, usage flags) Returns: Created buffer with correct size Validate that a buffer meets the minimum size requirement for a shader struct. Parameters: (GPUBuffer) — Buffer to validate (string) — WGSL shader source code (string) — Name of the struct Returns: True if buffer is large enough Get all struct sizes in a shader for debugging. Parameters: (string) — WGSL shader source code Returns: Map of struct name { size, alignment, members } <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature","contentHash":"3c61f54ca0d3b3771198dd4c9761196315c4196c672418963cbadeeb0560ea04"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUShaderReflection.md::0001","path":"engine/reference/core/gpu/VGPUShaderReflection.md","title":"core/gpu/VGPUShaderReflection.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUShaderReflection.js","updated":"","headings":["core/gpu/VGPUShaderReflection.js","Classes","class VGPUShaderReflection","Functions","getShaderReflection()","getStructBufferSize(shaderSource, structName)","getUniformBufferSizes(shaderSource)","createAutoSizedUniformBuffer(device, shaderSource, structName, options = {})","validateBufferSize(buffer, shaderSource, structName)","debugShaderStructs(shaderSource)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"eaa008928c7a4f4349574cbecb59a6339a47e19b5982a62971f46647c09cbc1c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUStreamingManager.md::0000","path":"engine/reference/core/gpu/VGPUStreamingManager.md","title":"core/gpu/VGPUStreamingManager.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUStreamingManager.js","updated":"","headings":["core/gpu/VGPUStreamingManager.js","Classes","class VGPUStreamingManager","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Main Streaming Manager Method Signature Summary Request a texture to be streamed Request a mesh to be streamed Request a buffer to be streamed Get a texture by handle (returns placeholder if not loaded) Get a mesh by handle Check if a resource is fully loaded Get loading progress (0 1) Set distance for priority calculation Update camera position for priority calculations Process streaming queue call once per frame Unload a specific resource Get streaming statistics Preload resources (useful for loading screens) Re exports , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features","contentHash":"2e655eebc3edcae1efdc2ad0c3ce42774320b52ca02f78861722d9a9ce219e18"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUStreamingManager.md::0001","path":"engine/reference/core/gpu/VGPUStreamingManager.md","title":"core/gpu/VGPUStreamingManager.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUStreamingManager.js","updated":"","headings":["core/gpu/VGPUStreamingManager.js","Classes","class VGPUStreamingManager","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"11dbaecde75e13661854abc78c04c0c36ecfe206d72051049c2dd5d434bfbe47"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUTextureAtlas.md::0000","path":"engine/reference/core/gpu/VGPUTextureAtlas.md","title":"core/gpu/VGPUTextureAtlas.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUTextureAtlas.js","updated":"","headings":["core/gpu/VGPUTextureAtlas.js","Classes","class VGPUTextureAtlas","class VGPUSpriteBatch","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Texture Atlas Manager Dynamic packing for sprites/UI, automatic UV remapping Classes Method Signature Summary Add a texture to the atlas Add multiple textures efficiently (batch upload) Remove a texture from the atlas Get region info by name Get UV coordinates for a region Get the atlas texture Get the atlas texture view Check if region exists Get all region names Generate UV buffer for a list of region names Create a GPU buffer with UV data for all regions Get atlas utilization stats Clear the atlas Sprite batch renderer using texture atlas Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"371a4766456ff94556f92605acad9e777da1c40ace3e7bf096f602450cb5640f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUTimelineSemaphores.md::0000","path":"engine/reference/core/gpu/VGPUTimelineSemaphores.md","title":"core/gpu/VGPUTimelineSemaphores.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUTimelineSemaphores.js","updated":"","headings":["core/gpu/VGPUTimelineSemaphores.js","Classes","class VGPUTimelineSemaphores","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GPU Timeline Semaphores Advanced sync for multi engine scenarios Method Signature Summary Create a timeline semaphore Get semaphore by ID Signal a semaphore to a specific value Wait for semaphore to reach a value Get current semaphore value Create a GPU signaled semaphore operation This wraps onSubmittedWorkDone for GPU CPU signaling Insert a GPU signal after command buffer submission Create a barrier that waits for multiple semaphores Create a frame synchronization primitive Destroy a semaphore Get debug info Cleanup Re exports , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU ·","contentHash":"49bcda4c03859d5f7fde74e07bda20a579e7c23a67534d37a8361a58d2270a84"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VGPUTimelineSemaphores.md::0001","path":"engine/reference/core/gpu/VGPUTimelineSemaphores.md","title":"core/gpu/VGPUTimelineSemaphores.js","description":"","kind":"reference","source":"engine/core/gpu/VGPUTimelineSemaphores.js","updated":"","headings":["core/gpu/VGPUTimelineSemaphores.js","Classes","class VGPUTimelineSemaphores","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0b87224503d51cdf4dbcce84c621580781c58849becbe60ef2cfde96bac51fe8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VirtualGPU.md::0000","path":"engine/reference/core/gpu/VirtualGPU.md","title":"core/gpu/VirtualGPU.js","description":"","kind":"reference","source":"engine/core/gpu/VirtualGPU.js","updated":"","headings":["core/gpu/VirtualGPU.js","Classes","class VirtualGPU","Functions","async getVGPU(options)","vgpu()","initVGPU(deviceOrOptions)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Create a VirtualGPU instance Wrap an existing GpuDevice Get comprehensive stats Connect to game's EngineProfiler for unified stats Sync stats to connected EngineProfiler Begin a new frame (call at frame start) End a frame (call at frame end, resolves profiler) Log stats to console Destroy all resources Create a texture atlas Create a sprite batch for an atlas Create a dynamic viewport for resolution scaling Create a stats overlay for debugging Create or get the render graph instance Create a render graph builder for ergonomic graph construction Create an indirect renderer for GPU driven rendering Buffers grow dynamically no fixed maximums needed. Create an instance builder for indirect rendering Grows dynamically no fixed maximum. Create HiZ culling system for occlusion culling Object buffers grow dynamically no fixed maximums. Create a bounding box builder for HiZ culling Grows dynamically no fixed maximum. Create a streaming manager for progressive resource loading Create debug draw system for visualization Get or create a shared debug draw instance Functions Get or create the global vGPU instance Get existing vGPU instance (throws if not initialized) Initialize vGPU from existing GpuDevice or raw GPUDevice Parameters: (GpuDevice GPUDevice Object) — GpuDevice wrapper, raw GPUDevice, or {device, queue, adapter} <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native","contentHash":"e162c8a60f8800ae28aaf3b9d65ef1728b2f125f9a8795ea6106d9e0021dc49b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/VirtualGPU.md::0001","path":"engine/reference/core/gpu/VirtualGPU.md","title":"core/gpu/VirtualGPU.js","description":"","kind":"reference","source":"engine/core/gpu/VirtualGPU.js","updated":"","headings":["core/gpu/VirtualGPU.js","Classes","class VirtualGPU","Functions","async getVGPU(options)","vgpu()","initVGPU(deviceOrOptions)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6d10dfa86b7bc5060d328432d50980b92c4582ed36bb81239187baacc996b6e5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/WGSLPreprocessor.md::0000","path":"engine/reference/core/gpu/WGSLPreprocessor.md","title":"core/gpu/WGSLPreprocessor.js","description":"","kind":"reference","source":"engine/core/gpu/WGSLPreprocessor.js","updated":"","headings":["core/gpu/WGSLPreprocessor.js","Classes","class WGSLPreprocessor","Functions","createPreprocessor()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes WGSL Preprocessor include, define, ifdef support for shader modularity Method Signature Summary Register an include file Set a global define (applied to all processed shaders) Remove a global define Process WGSL source code with preprocessor directives Get all registered include names Clear all includes and defines Functions Create a preprocessor with common includes registered Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"4ec7a3973132ab87946932791af8f3c424a554c1e8090ed304c45d3f1264bb81"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/WGSLStructLayout.md::0000","path":"engine/reference/core/gpu/WGSLStructLayout.md","title":"core/gpu/WGSLStructLayout.js","description":"","kind":"reference","source":"engine/core/gpu/WGSLStructLayout.js","updated":"","headings":["core/gpu/WGSLStructLayout.js","Functions","parseWGSLStruct(wgslCode)","createStructAccessor(layout)","defineStruct(wgslCode)","generateJSLayout(wgslCode)","validateBuffer(buffer, layout, expectedCount = 1)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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( ); // 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 Functions Parse a WGSL struct definition and compute field layout Parameters: (string) — WGSL struct code Returns: Layout object with name, size, align, fields Create an accessor object for reading/writing struct fields Parameters: (Object) — Layout from parseWGSLStruct Returns: Accessor with get/set methods Define a struct layout from WGSL and return both layout and accessor Parameters: (string) — WGSL struct definition Returns: } Generate JS object literal layout definition from WGSL struct Useful for documentation or code generation Parameters: (string) — No description in source JSDoc. Returns: JS code Validate that a buffer matches the expected struct layout Parameters: (GPUBuffer ArrayBuffer TypedArray) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — Expected number of structs Returns: } Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its","contentHash":"693dabce6b3d747b18cf17d0c160b4debec3138ac6d25529db9e6ab2edcde408"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/WGSLStructLayout.md::0001","path":"engine/reference/core/gpu/WGSLStructLayout.md","title":"core/gpu/WGSLStructLayout.js","description":"","kind":"reference","source":"engine/core/gpu/WGSLStructLayout.js","updated":"","headings":["core/gpu/WGSLStructLayout.js","Functions","parseWGSLStruct(wgslCode)","createStructAccessor(layout)","defineStruct(wgslCode)","generateJSLayout(wgslCode)","validateBuffer(buffer, layout, expectedCount = 1)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"} Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a0f79f712d60031a6ab08da88976e6454bbb44c0b19bc497cd2bccf6b881a580"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/WGSLStructSize.md::0000","path":"engine/reference/core/gpu/WGSLStructSize.md","title":"core/gpu/WGSLStructSize.js","description":"","kind":"reference","source":"engine/core/gpu/WGSLStructSize.js","updated":"","headings":["core/gpu/WGSLStructSize.js","Functions","calcWGSLStructSize(structCode)","createUniformBuffer(device, structCode, label = 'Uniform Buffer')","createStorageBuffer(device, structCode, count = 1, label = 'Storage Buffer')","getFloat32ArraySize(structCode)","validateBufferSize(bufferSize, structCode, label = '')","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Calculate the total size of a WGSL struct with proper alignment Parameters: (string) — WGSL struct definition Returns: Total size in bytes (aligned to 16 for uniform buffers) Create a uniform buffer with automatically calculated size Parameters: (GPUDevice) — WebGPU device (string) — WGSL struct definition (string) — Buffer label for debugging Returns: Correctly sized uniform buffer Create a storage buffer with automatically calculated size Parameters: (GPUDevice) — WebGPU device (string) — WGSL struct definition (number) — Number of struct instances (string) — Buffer label for debugging Returns: Correctly sized storage buffer Get the Float32Array size needed to fill a struct buffer Parameters: (string) — WGSL struct definition Returns: Number of f32 elements needed Validate a buffer size against a struct definition Parameters: (number) — Current buffer size (string) — WGSL struct definition (string) — Optional label for error message Returns: } <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss","contentHash":"31828542ea2279da397f20164ad56e37c0e0ae9d84326295b2f13c05bd1b3cc5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/WGSLStructSize.md::0001","path":"engine/reference/core/gpu/WGSLStructSize.md","title":"core/gpu/WGSLStructSize.js","description":"","kind":"reference","source":"engine/core/gpu/WGSLStructSize.js","updated":"","headings":["core/gpu/WGSLStructSize.js","Functions","calcWGSLStructSize(structCode)","createUniformBuffer(device, structCode, label = 'Uniform Buffer')","createStorageBuffer(device, structCode, count = 1, label = 'Storage Buffer')","getFloat32ArraySize(structCode)","validateBufferSize(bufferSize, structCode, label = '')","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"10289e2bceb9d60440123d849ed983aebe8e212830af040610d8775fece5a974"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/WebGpuCanvasBootstrap.md::0000","path":"engine/reference/core/gpu/WebGpuCanvasBootstrap.md","title":"core/gpu/WebGpuCanvasBootstrap.js","description":"","kind":"reference","source":"engine/core/gpu/WebGpuCanvasBootstrap.js","updated":"","headings":["core/gpu/WebGpuCanvasBootstrap.js","Functions","async initWebGpuCanvas(options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/gpu/index.md::0000","path":"engine/reference/core/gpu/index.md","title":"core/gpu/index.js","description":"","kind":"reference","source":"engine/core/gpu/index.js","updated":"","headings":["core/gpu/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/core/gpu/index.js GPU Utilities Barrel Export Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"add31238d8e9c1fecff57755dff5ac85ef184f25524381f4b0b2cebc7ab4e198"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/index.md::0000","path":"engine/reference/core/index.md","title":"core/index.js","description":"","kind":"reference","source":"engine/core/index.js","updated":"","headings":["core/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"db27865824e4acc4c0ccdcb01b7bd19f59d1fe41e04c924c6569dac42dc02916"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/AnimationTimeMath.md::0000","path":"engine/reference/core/math/AnimationTimeMath.md","title":"core/math/AnimationTimeMath.js","description":"","kind":"reference","source":"engine/core/math/AnimationTimeMath.js","updated":"","headings":["core/math/AnimationTimeMath.js","Functions","animationActiveDuration(iterationDuration, iterationCount = 1)","animationWrapTime(time, duration, options = {})","animationFrameWrap(frame, frameCount)","animationPlaybackRateReport(options = {})","animationPlaybackStateReport(value = {}, options = {})","animationTimeScaleReport(time, options = {})","animationTimelineOffsetReport(options = {})","animationOpenUsdLayerOffsetReport(timeCode, options = {})","animationOpenUsdTimeSampleBracket(times, timeCode, options = {})","animationOpenUsdSampleValue(times, values, timeCode, options = {})","animationTimingReport(options = {})","animationKeyframeBracket(times, time, options = {})","animationSampleScalar(a, b, t)","animationSampleVector(a, b, t)","animationSampleQuaternion(a, b, t)","animationCubicSplineSample(v0, outTangent0, v1, inTangent1, t, duration = 1, options = {})","animationSampleChannel(times, values, time, options = {})","animationSampleChannelInto(times, values, time, out, outOffset = 0, options = {})","animationClipSampleTimeReport(time, options = {})","animationKeyframeReductionReport(times, values, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AnimationTimeMath.js pure animation timing, keyframe, and sampler reports. Functions Validate and normalize the serializable state of one animation player. <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"29773b24dadfe7fc19ed217b4c0435d637c3f255e1afb620e8c5aa66e6b8c31f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/AudioAutomationMath.md::0000","path":"engine/reference/core/math/AudioAutomationMath.md","title":"core/math/AudioAutomationMath.js","description":"","kind":"reference","source":"engine/core/math/AudioAutomationMath.js","updated":"","headings":["core/math/AudioAutomationMath.js","Functions","audioAutomationLinearRampValue(startValue, endValue, startTime, endTime, time)","audioAutomationExponentialRampValue(startValue, endValue, startTime, endTime, time)","audioAutomationSetTargetValue(initialValue, targetValue, startTime, timeConstant, time)","audioAutomationValueCurveAtTime(curve, startTime, duration, time, options = {})","audioAdsrEnvelopeValue(time, options = {})","audioAdsrEnvelopeReport(options = {})","audioBiquadComputedFrequency(frequency = 350, detune = 0, sampleRate = 48000)","audioBiquadCoefficients(type = 'lowpass', options = {})","audioBiquadFrequencyResponse(coefficients, frequencyHz, sampleRate = coefficients?.sampleRate ?? 48000)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioAutomationMath.js pure AudioParam automation, envelope, and biquad helper math. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"8e99c354a6c88d8c9d3cb97692e041813655af749e738bb3c5d002bf5801b8e1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/AudioMath.md::0000","path":"engine/reference/core/math/AudioMath.md","title":"core/math/AudioMath.js","description":"","kind":"reference","source":"engine/core/math/AudioMath.js","updated":"","headings":["core/math/AudioMath.js","Functions","audioClipSample(sample, limit = 1)","audioSoftClipSample(sample, drive = 1)","audioClipSignal(signal, limit = 1)","audioSoftClipSignal(signal, drive = 1)","audioApplyGain(signal, gain = 1, options = {})","audioMix(signals, options = {})","audioNormalize(signal, targetPeak = 1)","audioStereoToMono(left, right)","audioMonoToStereo(mono)","audioEqualPowerPanGains(pan)","audioEqualPowerPanMono(mono, pan)","audioWaveformPeaks(signal, bucketCount)","audioWindowedRmsReport(signal, windowSize, hopSize = windowSize)","audioSilenceReport(signal, options = {})","audioNoiseFloorReport(signal, options = {})","audioTransientReport(signal, options = {})","audioSpectralEntropyReport(spectrum, options = {})","audioAnalyserByteToDb(byteValue, minDb = DEFAULTAUDIOMINDB, maxDb = DEFAULTAUDIOMAXDB)","audioDecibelsToAnalyserByte(db, minDb = DEFAULTAUDIOMINDB, maxDb = DEFAULTAUDIOMAXDB)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioMath.js pure PCM/audio domain math helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"f932113fcbb9866eb8be837cd54a1fe953732248eed19e3ce391a4eb199f00dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BVHAccel.md::0000","path":"engine/reference/core/math/BVHAccel.md","title":"core/math/BVHAccel.js","description":"","kind":"reference","source":"engine/core/math/BVHAccel.js","updated":"","headings":["core/math/BVHAccel.js","Classes","class BVHNode","class BVHBuilder","Functions","rayTriangleIntersect(origin, dir, tri, tMax = INFT)","traverseBVH(origin, dir, nodes, triIndices, triangles)","serializeBVHForGPU(bvh)","createRaycastMesh(vertices, indices)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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 Method Signature Summary Build BVH from triangle mesh Uses Surface Area Heuristic for optimal splits Method Signature Summary Build BVH from triangles Update node AABB from its triangles Recursively subdivide node using SAH Find best split plane using Surface Area Heuristic Evaluate SAH cost for a split Compute surface area of AABB Functions Möller Trumbore ray triangle intersection Parameters: (number[]) — Ray origin [x, y, z] (number[]) — Ray direction [x, y, z] (normalized) (Object) — Triangle {v0, v1, v2} (number) — Maximum t value Returns: {t, u, v, normal} or null Traverse BVH and find closest intersection Parameters: (number[]) — Ray origin (number[]) — Ray direction (normalized) (Array) — BVH nodes (Array) — Triangle index array (Array) — Triangle data Returns: {t, triIdx, u, v, normal} or null Serialize BVH for GPU buffer upload Parameters: (Object) — BVH from builder {nodes, triIndices, triangles} Returns: {nodeBuffer, triIndexBuffer, triangleBuffer} Create raycastable mesh from vertices and indices Parameters: (Float32Array Array) — Vertex positions [x,y,z, x,y,z, ...] (Uint32Array Array) — Triangle indices [i0,i1,i2, ...] Returns: Raycastable mesh object Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants","contentHash":"e3983481a1039173ef0e8ddd24148eda5aadd4b8dfe434a4903749c5e074de2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BVHAccel.md::0001","path":"engine/reference/core/math/BVHAccel.md","title":"core/math/BVHAccel.js","description":"","kind":"reference","source":"engine/core/math/BVHAccel.js","updated":"","headings":["core/math/BVHAccel.js","Classes","class BVHNode","class BVHBuilder","Functions","rayTriangleIntersect(origin, dir, tri, tMax = INFT)","traverseBVH(origin, dir, nodes, triIndices, triangles)","serializeBVHForGPU(bvh)","createRaycastMesh(vertices, indices)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":1,"chunkCount":2,"text":"library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"7b31cac57e6a0971da693a66b1e09493c2579c7f06c0d64b66083f368c9e6fa0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BenchmarkMath.md::0000","path":"engine/reference/core/math/BenchmarkMath.md","title":"core/math/BenchmarkMath.js","description":"","kind":"reference","source":"engine/core/math/BenchmarkMath.js","updated":"","headings":["core/math/BenchmarkMath.js","Functions","operationsPerSecond(operationCount, durationMs)","throughputReport(options = {})","durationReport(startMs, endMs, options = {})","memoryEstimateReport(options = {})","compressionRatioReport(options = {})","computeCostEstimateReport(options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BenchmarkMath.js reusable benchmark rate, memory, compression, and cost estimates. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"05e99cd5bc857d733c0f5faf92209f168fe1483cbd8b74ff7bf7c2ef5822361e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BezierCurves.md::0000","path":"engine/reference/core/math/BezierCurves.md","title":"core/math/BezierCurves.js","description":"","kind":"reference","source":"engine/core/math/BezierCurves.js","updated":"","headings":["core/math/BezierCurves.js","Classes","class CubicBezier","class QuadraticBezier","class BezierSpline","Functions","straightLine(start, end, radius = 1.0)","arc(center, radius, startAngle, endAngle, tubeRadius = 1.0)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Cubic Bezier curve defined by 4 control points Method Signature Summary Evaluate curve at parameter t using De Casteljau's algorithm Numerically stable, works for any degree Evaluate using polynomial form (faster for many evaluations) B(t) = (1 t)³P0 + 3(1 t)²tP1 + 3(1 t)t²P2 + t³P3 First derivative (tangent direction, not normalized) B'(t) = 3(1 t)²(P1 P0) + 6(1 t)t(P2 P1) + 3t²(P3 P2) Second derivative (for curvature) B''(t) = 6(1 t)(P2 2P1+P0) + 6t(P3 2P2+P1) Get normalized tangent at t Get normal vector at t (perpendicular to tangent) Get curvature at t κ = B' × B'' / B' ³ Subdivide curve at t into two curves Approximate arc length using Gaussian quadrature Build arc length lookup table for uniform parameterization Convert arc length parameter to curve parameter Sample curve uniformly by arc length Get bounding box Serialize to flat array for GPU upload Create from flat array Method Signature Summary Elevate to cubic (exact conversion) Method Signature Summary Add a curve segment Create smooth spline through points (Catmull Rom style) Evaluate spline at global parameter [0, numCurves] Get total number of curves Sample entire spline Functions Create a straight line as a degenerate Bezier Parameters: (number[]) — No description in source JSDoc. (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. Create an arc approximation using Bezier Parameters: (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No","contentHash":"23016e4972808c42c41e1523dbbb8420706f9b722b34e4c95e82e6cf48477aa4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BezierCurves.md::0001","path":"engine/reference/core/math/BezierCurves.md","title":"core/math/BezierCurves.js","description":"","kind":"reference","source":"engine/core/math/BezierCurves.js","updated":"","headings":["core/math/BezierCurves.js","Classes","class CubicBezier","class QuadraticBezier","class BezierSpline","Functions","straightLine(start, end, radius = 1.0)","arc(center, radius, startAngle, endAngle, tubeRadius = 1.0)","Notes & Examples","Math Library Conventions"],"chunkIndex":1,"chunkCount":2,"text":"in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"0dbc1441cc360f2d5f7f58856f671e4823eebf9b7912dc98ed70d14bb2800d4c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BezierDistance.md::0000","path":"engine/reference/core/math/BezierDistance.md","title":"core/math/BezierDistance.js","description":"","kind":"reference","source":"engine/core/math/BezierDistance.js","updated":"","headings":["core/math/BezierDistance.js","Classes","class BezierDistanceCompute","Functions","sdCapsule(p, a, b, r)","capsuleClosestT(p, a, b)","bezierDistanceCapsule(p, curve, segments = 16)","bezierDistanceBatch(points, curve, segments = 16)","bezierClosestNewton(p, curve, initialT = 0.5, iterations = 8)","bezierDistanceHybrid(p, curve, capsuleSegments = 8, newtonIterations = 4)","multiCurveDistance(p, curves, segments = 16)","smin(a, b, k = 0.1)","multiCurveDistanceSmooth(p, curves, smoothness = 0.5)","curvesToGPUBuffer(curves)","curvesToSegments(curves, segmentsPerCurve = 8)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GPU accelerated Bezier distance field computation Method Signature Summary Initialize with curves Compute distance at a single point (CPU fallback) Functions Signed distance to a capsule (line segment with radius) Parameters: (number[]) — Query point (number[]) — Segment start (number[]) — Segment end (number) — Radius Returns: Signed distance (negative inside) Find closest point parameter on capsule Parameters: (number[]) — No description in source JSDoc. (number[]) — No description in source JSDoc. (number[]) — No description in source JSDoc. Returns: t in [0, 1] Distance to Bezier using capsule chain approximation Fast but may miss fine details for highly curved sections Parameters: (number[]) — Query point (CubicBezier) — Bezier curve (number) — Number of capsule segments (16 typical) Returns: } Distance and closest t Batch distance query for multiple points Parameters: (number[][]) — No description in source JSDoc. (CubicBezier) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: Distances Find closest point on Bezier using Newton Raphson iteration Minimizes B(t) p ² by finding roots of d/dt B(t) p ² Parameters: (number[]) — Query point (CubicBezier) — No description in source JSDoc. (number) — Starting guess for t (number) — Max iterations (8 typical) Returns: } Hybrid: Capsule for initial guess, Newton for refinement Best balance of speed and accuracy Parameters: (number[]) — No description in source JSDoc. (CubicBezier) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source","contentHash":"fa6e35c08ff0828f7fd737103434bba87100bfff6730afbfa339fe8831dfc198"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BezierDistance.md::0001","path":"engine/reference/core/math/BezierDistance.md","title":"core/math/BezierDistance.js","description":"","kind":"reference","source":"engine/core/math/BezierDistance.js","updated":"","headings":["core/math/BezierDistance.js","Classes","class BezierDistanceCompute","Functions","sdCapsule(p, a, b, r)","capsuleClosestT(p, a, b)","bezierDistanceCapsule(p, curve, segments = 16)","bezierDistanceBatch(points, curve, segments = 16)","bezierClosestNewton(p, curve, initialT = 0.5, iterations = 8)","bezierDistanceHybrid(p, curve, capsuleSegments = 8, newtonIterations = 4)","multiCurveDistance(p, curves, segments = 16)","smin(a, b, k = 0.1)","multiCurveDistanceSmooth(p, curves, smoothness = 0.5)","curvesToGPUBuffer(curves)","curvesToSegments(curves, segmentsPerCurve = 8)","Notes & Examples","Math Library Conventions"],"chunkIndex":1,"chunkCount":2,"text":"No description in source JSDoc. (CubicBezier) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: } Distance to multiple Bezier curves (smooth union) Parameters: (number[]) — No description in source JSDoc. (CubicBezier[]) — No description in source JSDoc. (number) — No description in source JSDoc. Smooth minimum of two distances (for blending) Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Smoothness factor Distance to curves with smooth blending Parameters: (number[]) — No description in source JSDoc. (CubicBezier[]) — No description in source JSDoc. (number) — No description in source JSDoc. 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] Parameters: (CubicBezier[]) — No description in source JSDoc. Pre sample curves into line segments for GPU More efficient for many queries Parameters: (CubicBezier[]) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"af29df5f47487003153af009e906e5e531d4ffd6a708de537994c22bd61c1755"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BlendMath.md::0000","path":"engine/reference/core/math/BlendMath.md","title":"core/math/BlendMath.js","description":"","kind":"reference","source":"engine/core/math/BlendMath.js","updated":"","headings":["core/math/BlendMath.js","Functions","straightRgba(color, opacity = 1)","premultiplyAlpha(color, opacity = 1)","unpremultiplyAlpha(color)","alphaBlend(backdrop, source, opacity = 1)","premultipliedAlphaBlend(backdrop, source, opacity = 1)","blendModeChannel(backdrop, source, mode = 'normal')","blendRgb(backdrop, source, mode = 'normal')","blendCompositeStraight(backdrop, source, mode = 'normal', opacity = 1)","coverageAlpha(coveredSamples, sampleCount = 1)","alphaToCoverage(alpha, sampleCount = 1)","bayer4Threshold(x, y)","ditherAlpha(alpha, x = 0, y = 0, frame = 0)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"7ed05f92c9e14d2f30a6d25740baca5cb9e9e293c49f27006d29039f82ba1bbd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/BufferMath.md::0000","path":"engine/reference/core/math/BufferMath.md","title":"core/math/BufferMath.js","description":"","kind":"reference","source":"engine/core/math/BufferMath.js","updated":"","headings":["core/math/BufferMath.js","Classes","class BufferCursor","Functions","bufferLittleEndian(endian = DEFAULTENDIAN)","bufferEndianName(endian = DEFAULTENDIAN)","bufferValueByteSize(type)","bufferByteView(data)","bufferDataView(data)","bufferRangeReport(data, byteOffset = 0, byteLength = 0, options = {})","bufferRead(data, type, byteOffset, options = {})","bufferWrite(data, type, byteOffset, value, options = {})","encodeUtf8(text)","decodeUtf8(data, options = {})","bufferReadUtf8(data, byteOffset, byteLength, options = {})","bufferWriteUtf8(data, byteOffset, text, options = {})","concatBufferBytes(chunks)","createBufferCursor(dataOrByteLength, options = {})","bufferCursorReport(cursor)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BufferMath.js reusable byte views, endian safe DataView reads/writes, UTF 8 helpers, and cursors. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"e561307014c6a07024fe929c234012ac6446d31e8f4c66dbd3199d45f52d9ecc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/ChannelMath.md::0000","path":"engine/reference/core/math/ChannelMath.md","title":"core/math/ChannelMath.js","description":"","kind":"reference","source":"engine/core/math/ChannelMath.js","updated":"","headings":["core/math/ChannelMath.js","Functions","channelRangeReport(centerHz, bandwidthHz)","channelCenterFromIndex(index, options = {})","channelIndexFromCenterReport(centerHz, options = {})","wifi24ChannelCenterHz(channelNumber)","wifi24ChannelReport(channelNumber, options = {})","channelBandMembershipReport(channel, bands = [], options = {})","channelGuardBandReport(aChannel, bChannel, options = {})","channelHopsetReport(channels = [], options = {})","channelInterferenceReport(candidateChannel, interferers = [], options = {})","channelPlanReport(candidates = [], interferers = [], options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ChannelMath.js reusable channel geometry, spacing, hopset, and planning reports. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"c5c27500fd98a7a7aaf3c74d523f47e970f937aad560b4b0f8bc66693edde0d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/ChecksumMath.md::0000","path":"engine/reference/core/math/ChecksumMath.md","title":"core/math/ChecksumMath.js","description":"","kind":"reference","source":"engine/core/math/ChecksumMath.js","updated":"","headings":["core/math/ChecksumMath.js","Functions","checksumByteView(data)","checksumHex32(value)","checksumHex64(value)","hexTailUint32(hex, fallback = 0)","legacySha1Hex(data)","crc32(data, previousCrc = 0)","adler32(data, previousAdler = 1)","fnv1a32(data, seed = FNV1A32OFFSETBASIS)","fnv1a64(data, seed = FNV1A64OFFSETBASIS)","fnv1aStringCodeUnit32(data, options = {})","fnv1aStringCodePointHead32(data, options = {})","fnv1aLowByteString32(data, options = {})","fnv1aTaggedFloat32Sequence32(values, options = {})","fnv1aTaggedUint32Sequence32(values, options = {})","legacyAvalancheUint32Hash32(value)","legacyAvalancheMixUint32Hash32(hash, value, multiplier = 0x9e3779b1)","fnv1aUint32Sequence32(values, options = {})","fnv1aInt32Sequence32(values, options = {})","xxHash32(data, seed = 0)","legacyFnv1aByteSequenceHash32(data, options = {})","legacyFnv1aNumberSequenceHash32(values, seed = FNV1A32OFFSETBASIS)","legacyFnv1aStringHash32(data, seed = FNV1A32OFFSETBASIS)","legacyDjb2XorStringHash32(data, seed = 5381)","legacyUnsignedStringHash31(data, seed = 0)","legacyStringHash32(data)","legacyScaledNumberSequenceHash32(values, options = {})","bufferHash(data, algorithm = CHECKSUMALGORITHMS.crc32)","checksumReport(data)","checksumBlockReport(data, options = {})","rollingHash32(data, windowSize, options = {})","bufferCompare(left, right)","async contentHashBytes(data, algorithm = CHECKSUMALGORITHMS.sha256)","async contentHashHex(data, algorithm = CHECKSUMALGORITHMS.sha256)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ChecksumMath.js reusable byte checksums, non crypto hashes, rolling hashes, and digest wrappers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"5303ac765271ab19986786473de6bb682fb9afa34b49f99f48e937363e2ed02f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/CompressionMath.md::0000","path":"engine/reference/core/math/CompressionMath.md","title":"core/math/CompressionMath.js","description":"","kind":"reference","source":"engine/core/math/CompressionMath.js","updated":"","headings":["core/math/CompressionMath.js","Functions","compressionZigZagEncode(value)","compressionZigZagDecode(encoded)","compressionRunLengthReport(values, options = {})","compressionDeltaReport(values, options = {})","compressionPaletteReport(values, options = {})","compressionVarintReport(values, options = {})","compressionEntropyPlan(data, options = {})","compressionLz77WindowReport(options = {})","compressionHuffmanLengthReport(values, options = {})","compressionRangeModelReport(values, options = {})","compressionDictionaryMatchReport(values, options = {})","compressionPrimitivePlan(values, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CompressionMath.js pure compression primitive reports and planning helpers. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"c9a1b50b9a507bb5336ae03fc42300cfce7e791f66b5b6535fa5576c5a4c4be7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/CongestionMath.md::0000","path":"engine/reference/core/math/CongestionMath.md","title":"core/math/CongestionMath.js","description":"","kind":"reference","source":"engine/core/math/CongestionMath.js","updated":"","headings":["core/math/CongestionMath.js","Functions","bandwidthDelayProductBytes(options = {})","congestionWindowLimitReport(options = {})","quicInitialCongestionWindowBytes(maxDatagramBytes = CONGESTIONDEFAULTMAXDATAGRAMBYTES)","quicMinimumCongestionWindowBytes(maxDatagramBytes = CONGESTIONDEFAULTMAXDATAGRAMBYTES)","renoSlowStartThresholdBytes(options = {})","renoSlowStartIncreaseBytes(acknowledgedBytes, smssBytes = CONGESTIONDEFAULTMAXDATAGRAMBYTES)","renoCongestionAvoidanceIncreaseBytes(congestionWindowBytes, smssBytes = CONGESTIONDEFAULTMAXDATAGRAMBYTES)","renoAckWindowUpdateReport(options = {})","congestionLossResponseReport(options = {})","persistentCongestionDurationMs(options = {})","persistentCongestionReport(options = {})","congestionPacingRateBps(options = {})","cubicKSeconds(options = {})","cubicWindowSegments(options = {})","cubicRenoFriendlyAlpha(beta = CONGESTIONCUBICBETA)","cubicRenoEstimateReport(options = {})","cubicTargetWindowReport(options = {})","cubicLossResponseReport(options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CongestionMath.js reusable congestion window, pacing, Reno, QUIC, and CUBIC report helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"a1fcd130e0fa4a1b9e24464ce93be77e31f16445fcbebea008add765f07a99f4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/ConstraintMath.md::0000","path":"engine/reference/core/math/ConstraintMath.md","title":"core/math/ConstraintMath.js","description":"","kind":"reference","source":"engine/core/math/ConstraintMath.js","updated":"","headings":["core/math/ConstraintMath.js","Functions","constraintNormalizeAngle(angle, options = {})","constraintAngularLimitReport(angle, lowerLimit, upperLimit, options = {})","constraintAxisStateReport(value, options = {})","constraintConeLimitReport(swingY, swingZ, limitY, limitZ, options = {})","constraintSwingTwistLimitReport(rotation, twistAxis = [1, 0, 0], options = {})","constraintSpringDamperCoefficients(options = {})","constraintMotorTargetErrorReport(current, target, options = {})","constraintJointProjectionErrorReport(frameA = {}, frameB = {}, options = {})","constraintComplianceStiffnessReport(options = {})","constraintDriveEnvelopeReport(options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ConstraintMath.js pure joint limit, drive, spring, and projection reports. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"665753d4ad4e05675e4e0e9be0977622931e49fdb08d47af6b2ee97c423a0556"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/DOMGeometryMath.md::0000","path":"engine/reference/core/math/DOMGeometryMath.md","title":"core/math/DOMGeometryMath.js","description":"","kind":"reference","source":"engine/core/math/DOMGeometryMath.js","updated":"","headings":["core/math/DOMGeometryMath.js","Functions","domPointToVec2(point, options = {})","domPointToVec4(point, options = {})","domRectNormalize(rect = {}, options = {})","domMatrix2DFromInit(init = {})","domMatrixToColumnMajor4(init = {})","columnMajor4ToDomMatrix(matrix = IDENTITYCOLUMNMAJOR4)","domMatrixTransformPoint(point, matrixInit = IDENTITYCOLUMNMAJOR4)","domRectTransformBounds(rect, matrixInit = IDENTITYCOLUMNMAJOR4, options = {})","domQuadBoundsReport(quad = {}, options = {})","domQuadTransformBounds(quad = {}, matrixInit = IDENTITYCOLUMNMAJOR4, options = {})","domMatrixInverse2DReport(matrixInit = IDENTITYCOLUMNMAJOR4)","canvasBackingStoreReport(cssWidth, cssHeight, devicePixelRatio = 1, options = {})","domScrollCoordinateReport(point = {}, viewport = {}, options = {})","canvasPointerCssPoint(event = {}, rect = {}, options = {})","canvasPointerWorldPoint(event = {}, rect = {}, matrixInit = IDENTITYCOLUMNMAJOR4, options = {})","canvasPointerDevicePoint(event = {}, rect = {}, canvasOrScale = {}, options = {})","domGeometryInteropReport(options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DOMGeometryMath.js DOMPoint, DOMRect, DOMMatrix, and canvas coordinate helpers. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"86338b04a9bba237b1a06fa8ce33a22dabca389041295a22bb14234346b089ef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/EngineMath.md::0000","path":"engine/reference/core/math/EngineMath.md","title":"core/math/EngineMath.js","description":"","kind":"reference","source":"engine/core/math/EngineMath.js","updated":"","headings":["core/math/EngineMath.js","Functions","quatRotateVec3(v, q)","quatConjugate(q)","quatNormalize(q)","quatMultiply(a, b)","quatInverse(q)","mat4Identity()","mat4Multiply(a, b, out)","mat4Translate(m, x, y, z)","mat4Scale(m, sx, sy, sz)","mat4PerspectiveRad(fovRad, aspect, near, far)","mat4PerspectiveRadWebGPU(fovRad, aspect, near, far)","mat4PerspectiveDeg(fovDeg, aspect, near, far)","mat4PerspectiveDegWebGPU(fovDeg, aspect, near, far)","mat4Orthographic(left, right, bottom, top, near, far)","mat4OrthographicWebGPU(left, right, bottom, top, near, far)","mat4LookAt(eye, center, up)","mat4Inverse(m, out)","mat4FromRotationTranslation(q, t)","Re-exports","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EngineMath basic 3D vector and matrix helpers shared across engine and tests Pure math, no rendering or platform side effects. Functions Re exports , , , , , , , , , <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"0c44d7024be429e2973c0da5619618fb763de0b0ae3c72b218d4c7e400837edf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/FilterMath.md::0000","path":"engine/reference/core/math/FilterMath.md","title":"core/math/FilterMath.js","description":"","kind":"reference","source":"engine/core/math/FilterMath.js","updated":"","headings":["core/math/FilterMath.js","Functions","filterKernelReport(kernel, options = {})","normalizeFilterKernel(kernel, targetSum = 1, options = {})","boxFilterKernel1D(radius = 1, options = {})","gaussianFilterKernel1D(radius = 1, sigma = null)","gaussianFilterKernel2D(radius = 1, sigma = null)","filterKernelPreset(name)","filterSignalFIR(signal, kernel, options = {})","filterSignalMedian(signal, windowSize = 3)","filterSignalTemporalSmooth(signal, alpha = 0.5)","filterSignalNoiseReduce(signal, options = {})","filterImageConvolutionRgba(image, kernelSpec, options = {})","filterImageMorphologyRgba(image, operator = 'dilate', radius = 1, options = {})","filterImageDilateRgba(image, radius = 1, options = {})","filterImageErodeRgba(image, radius = 1, options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FilterMath.js reusable filter kernel, signal FIR, and CPU RGBA convolution helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"f3c974531ec39eac920ac607fb2597aa9bb44662cf1ff880273fd0457ddd9968"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/FormatMath.md::0000","path":"engine/reference/core/math/FormatMath.md","title":"core/math/FormatMath.js","description":"","kind":"reference","source":"engine/core/math/FormatMath.js","updated":"","headings":["core/math/FormatMath.js","Classes","class TokenCursor","Functions","byteSignature(data, options = {})","hexToBytes(hex, options = {})","magicNumberDetect(data, options = {})","formatExtensionFromPath(pathOrExtension)","formatMimeFromExtension(pathOrExtension, fallback = DEFAULTMIMETYPE)","parseMimeType(input)","mimeTypeGroupReport(input)","formatMimeSniff(data, options = {})","formatAcceptListReport(accept)","formatAcceptMatchReport(file, accept, options = {})","formatAcceptHeaderReport(acceptHeader, offeredMimeTypes, options = {})","parseSemanticVersion(version)","semanticVersionCompare(leftVersion, rightVersion)","semanticVersionRangeReport(version, range = '')","formatCompatibilityReport(candidate, requirements = {}, options = {})","versionCompare(leftVersion, rightVersion)","lineColumnMap(text)","lineColumnAt(mapOrText, index)","lineColumnToIndex(mapOrText, line, column)","rangeSpan(start, end, options = {})","chunkTableParse(data, options = {})","createTokenCursor(text, options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FormatMath.js reusable signatures, MIME helpers, SemVer, text ranges, token cursors, and chunk tables. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"c9308cf83802236d46885df4931529472f62a8c1700d80dd6d1e930e208662c0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/FrameMath.md::0000","path":"engine/reference/core/math/FrameMath.md","title":"core/math/FrameMath.js","description":"","kind":"reference","source":"engine/core/math/FrameMath.js","updated":"","headings":["core/math/FrameMath.js","Functions","frameDataReport(frame, options = {})","frameDifferenceReport(referenceFrame, candidateFrame, options = {})","frameMotionMagnitudeMap(referenceFrame, candidateFrame, options = {})","frameResidualImage(referenceFrame, candidateFrame, options = {})","frameAverageReport(frame, options = {})","frameSceneChangeReport(referenceFrame, candidateFrame, options = {})","frameKeyframeScoreReport(referenceFrame, candidateFrame, options = {})","frameSequenceDifferenceReport(frames, options = {})","runtimeFrameDeltaSeconds(timestampMs, previousTimestampMs, maxDeltaSeconds = 0.1)","runtimeMonotonicClockStep(timestampMs, previousTimestampMs = 0)","frameRateFromDurations(durationsSeconds)","frameTimingReport(frames, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FrameMath.js pure ImageData like frame and temporal media math helpers. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"3df133f96425b5be7ee800f5dde206739b4532c1547ec41c29773a574b69cc0b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/ImageMath.md::0000","path":"engine/reference/core/math/ImageMath.md","title":"core/math/ImageMath.js","description":"","kind":"reference","source":"engine/core/math/ImageMath.js","updated":"","headings":["core/math/ImageMath.js","Functions","imageDataReport(image, options = {})","imagePixelOffset(width, x, y, options = {})","imageReadPixel(image, x, y, options = {})","imageWritePixel(image, x, y, rgba, options = {})","imageSampleNearest(image, x, y, options = {})","imageSampleBilinear(image, x, y, options = {})","imageCopyRect(image, rect = {}, options = {})","imageFlipX(image, options = {})","imageFlipY(image, options = {})","imageSwizzleRgba(image, order = [0, 1, 2, 3], options = {})","imagePremultiplyAlpha(image, options = {})","imageUnpremultiplyAlpha(image, options = {})","imageHistogramReport(image, options = {})","imageAverageColor(image, options = {})","imageLuminanceMap(image, options = {})","imageEdgeMap(image, options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"5373bd936d182a3178a4d2aee8b853a4ef74cba9be0914a30e7dd5786577a7a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/InputSignalMath.md::0000","path":"engine/reference/core/math/InputSignalMath.md","title":"core/math/InputSignalMath.js","description":"","kind":"reference","source":"engine/core/math/InputSignalMath.js","updated":"","headings":["core/math/InputSignalMath.js","Functions","inputAxisRemapReport(axis, options = {})","inputRadialDeadzoneReport(axes, options = {})","inputPressureCurve(pressure, options = {})","inputPressureReport(samples, options = {})","pointerTiltToAltitudeAzimuth(tiltX = 0, tiltY = 0)","pointerAltitudeAzimuthToTilt(altitudeAngle = HALFPI, azimuthAngle = 0)","inputSampleVelocityReport(samples, options = {})","smoothInputSamples(samples, options = {})","predictInputSample(samples, lookaheadMs = 16.6666666667, options = {})","blendInputSamples(leftSample, rightSample, amount = 0.5, options = {})","inputStrokeStabilizationReport(samples, options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: InputSignalMath.js pure pointer/stylus sample shaping, smoothing, and prediction helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"9e2b25393298d3b21f858230742c0dafdec13e3173c0ea5b875256b96a0f115b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/JitterMath.md::0000","path":"engine/reference/core/math/JitterMath.md","title":"core/math/JitterMath.js","description":"","kind":"reference","source":"engine/core/math/JitterMath.js","updated":"","headings":["core/math/JitterMath.js","Functions","jitterQualityScore(jitterMs, options = {})","packetDelayVariationMs(firstDelayMs, secondDelayMs)","packetDelayVariationReport(samplesMs = [], options = {})","rtpJitterUpdateReport(previous = null, packet = {}, options = {})","rtpJitterReport(packets = [], options = {})","adaptiveJitterEstimateUpdate(previous = {}, intervalMs, options = {})","adaptiveJitterBufferReport(options = {})","peerRttJitterReport(rttSamplesMs = [], options = {})","webRtcJitterBufferReport(stats = {}, options = {})","interFrameDelayVariationReport(stats = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: JitterMath.js packet delay variation, RTP/WebRTC jitter, and adaptive buffer reports. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"626af650c0af07ec46f5757e2c33eb84610c65c9e6a34873065477c697e65834"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/LineToVoxel.md::0000","path":"engine/reference/core/math/LineToVoxel.md","title":"core/math/LineToVoxel.js","description":"","kind":"reference","source":"engine/core/math/LineToVoxel.js","updated":"","headings":["core/math/LineToVoxel.js","Classes","class NetworkNode","class NetworkEdge","class LineNetwork","class LineToVoxelizer","class GPULineVoxelizer","Functions","generateTree(options = {})","generateRoots(options = {})","generateTunnel(options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Node in a line network (branch point or endpoint) Method Signature Summary Edge connecting two nodes Method Signature Summary Network of connected curves for voxelization Method Signature Summary Add a node to the network Connect two nodes with a curve Build Bezier curves from network Get all curves (builds if dirty) Compute distance from point to network Get bounding box of network Convert line network to voxel density field Method Signature Summary Generate density field from network Generate density at single point GPU accelerated line network voxelizer Method Signature Summary Initialize GPU resources Run voxelization on GPU Read back density field Functions Generate a simple tree structure Parameters: (Object) — No description in source JSDoc. Generate root system Parameters: (Object) — No description in source JSDoc. Generate cave/tunnel network Parameters: (Object) — No description in source JSDoc. Constants — Default voxel resolution — Blend radius for smooth junctions — Material IDs <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"7a68ab9b7013584ab8efd87a725a04f55e50ba46c79e416c1bb4d33578359220"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/LossyCompressionMath.md::0000","path":"engine/reference/core/math/LossyCompressionMath.md","title":"core/math/LossyCompressionMath.js","description":"","kind":"reference","source":"engine/core/math/LossyCompressionMath.js","updated":"","headings":["core/math/LossyCompressionMath.js","Functions","lossyDct1D(values)","lossyIdct1D(coefficients)","lossyDct2D(values, options = {})","lossyIdct2D(coefficients, options = {})","lossyZigZagIndices(width = DEFAULTBLOCKWIDTH, height = DEFAULTBLOCKHEIGHT)","lossyQuantizeCoefficients(coefficients, quantization = 1)","lossyScalarQuantizationReport(values, options = {})","lossyResidualReport(reference, candidate, options = {})","lossyBlockDctReport(values, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: LossyCompressionMath.js pure transform, quantization, and reconstruction reports. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"9c0ea6a37204a87510c04e4d54ed958ea3ad9bbef1755fd583e5d4209ea31734"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathBits.md::0000","path":"engine/reference/core/math/MathBits.md","title":"core/math/MathBits.js","description":"","kind":"reference","source":"engine/core/math/MathBits.js","updated":"","headings":["core/math/MathBits.js","Functions","floorPowerOfTwo(x)","nextPowerOf2(x)","prevPowerOf2(x)","popCount(x)","reverseBits(x)","ctz(x)","morton2DEncode(x, y)","morton2DDecode(m)","morton3DEncode(x, y, z)","morton3DDecode(m)","morton2DIncX(m)","morton2DIncY(m)","morton3DIncX(m)","morton3DIncY(m)","morton3DIncZ(m)","hilbert2DEncode(n, x, y)","hilbert2DDecode(n, d)","hash1D(n)","hash2D(x, y)","hash3D(x, y, z)","hash4D(x, y, z, w)","legacyStructureHash3D(x, y, z)","legacyWorldGeneratorHash3D(x, y, z)","legacyStructureSeededHash3D(x, y, z, seed)","legacyStructureChunkSeed3D(cx, cy, cz, seed = 0)","legacyStructurePositionSeed3D(x, y, z, seed = 0)","legacyPrimeCoordinateXorHash3D(x, y, z)","legacyPrimeCoordinateAbsXorBucket3D(x, y, z, tableSize)","legacyPrimeCoordinateU32XorBucket3D(x, y, z, tableSize)","legacyPrimeCoordinateSignedAddAbsBucket3D(x, y, z, tableSize)","legacyPrimeAxisHash32(value, axis = 'x', modulo = 0)","legacyWindTurbulenceAxisHash32(timeHash, axis)","legacyPrimeCoordinateXorSeed2D(x, z)","legacyPrimeCoordinateAdditiveSeed3D(x, y, z)","legacyDualRngPositionHash3D(x, y, z, seed = 0)","legacySeedCharWeightedXorHash32(seed, charCode, seedMultiplier, charMultiplier)","legacySeedCharXorHash32(seed, charCode)","legacySeedCharEffectXorHash32(seed, charCode)","legacyGoldenRatioMul32(value)","legacyGoldenRatioChunkSeed32(seedBase, chunkIndex)","legacyMeshParticleSeed32(seedBase, triIndex, particleIndex)","legacyPcgAdvanceState32(state)","legacyPcgOutput32(state)","legacyPcgHash32(value)","legacyPathTracingPcgHash32(input)","legacyPbrMaterialsPcgHash32(value)","legacyFluidWaterPcgHash32(value)","legacyMagicEffectsPcgHash32(value)","legacyPhaseVFXPcgHash32(value)","legacyPathtracingGIPcgHash32(input)","legacyPathtracingGIRandomFloat01Step(state)","legacyWorld3DPreviewPcgHash32(value)","legacyAuroraPcgHash32(value)","legacyCelestialStarsPcgHash32(value)","legacyUnderwaterPcgHash32(value)","legacyVoronoiRuntimePcgHash32(value)","legacyProceduralTreeRuntimePcgHash32(value)","legacyMeshToParticlesPcgHash32(input)","legacyMeshToParticlesRandomFloat01Step(state)","legacyParticleRuntimeSdfPcgHash32(value)","legacyParticleRuntimePcgHash32(value)","legacyParticleRuntimeRandomFloat01Step(state)","legacyRayTracingRandomFloat01Step(state)","legacyPcgRandomFloat01Step(state)","legacyPcgHashStepRandomFloat01Step(state)","legacyPcgPixelFrameHash2D(x, y, frameIndex, salt = 0)","legacyPcgPixelFrameRandom24Float01(x, y, frameIndex, salt = 0)","legacyRestirTemporalHash2Float01(x, y, frameIndex)","legacyRestirSpatialHash2Float01(x, y, frameIndex)","legacyPcgCloudJitterHash2D(xBits, yBits)","legacyVolumetricCloudsJitterPcgHash2D(xBits, yBits)","legacyPcgSsrJitterHash2D(xBits, yBits)","legacySsrJitterPcgHash2D(xBits, yBits)","legacyPcgSparkleHash3D(xBits, yBits, zBits)","legacyCustomParticleSparklePcgHash3D(xBits, yBits, zBits)","legacyMarchingCubesMaterialPcgHash2D(xBits, zBits)","legacyParticleVertexQualityPcgHash2D(instanceIndex, centerXBits)","legacyParticleVertexQualityRandomFloat01(instanceIndex, centerXBits)","legacyStandaloneRuntimePcgHash32(value)","legacyStandaloneRuntimePcgFloat01(value)","legacyStandaloneRuntimePcgHashStepRandomFloat01Step(state)","legacyDeterministicRngTickSeed32(worldSeed, tick)","legacyDeterministicRngEntitySeed32(worldSeed, entityId, tick)","legacyDeterministicRngPositionSeed32(worldSeed, x, y, z)","legacyDeterministicRngInteractionSeed32(worldSeed, entityA, entityB, tick)","xxHash32(seed, data)","pcgHash(state)","spatialKey2D(x, y)","spatialUnkey2D(key)","spatialKey3D(x, y, z)","spatialUnkey3D(key)","packUnorm(value, bits)","unpackUnorm(packed, bits)","packSnorm(value, bits)","unpackSnorm(packed, bits)","packRGB565(r, g, b)","unpackRGB565(packed)","packRGBA4444(r, g, b, a)","unpackRGBA4444(packed)","isPowerOf2(x)","log2Int(x)","ceilLog2(x)","clz(x)","ffs(x)","byteSwap16(x)","byteSwap32(x)","rotateLeft(x, n)","rotateRight(x, n)","hashFloat1D(n)","hashFloat2D(x, y)","hashFloat3D(x, y, z)","spatialKeyString2D(x, y)","spatialKeyString3D(x, y, z)","pack2x16(a, b)","unpack2x16(packed)","pack4x8(a, b, c, d)","unpack4x8(packed)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathBits.js Bit manipulation, Morton codes, Hilbert curves, hash functions Critical for voxel systems, spatial indexing, and procedural generation Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"e7dd096e6eb7e3fe1ffe9b3ba99a0cd3fe1a0fbf7f8ffb132627fbe8d919a331"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathColor.md::0000","path":"engine/reference/core/math/MathColor.md","title":"core/math/MathColor.js","description":"","kind":"reference","source":"engine/core/math/MathColor.js","updated":"","headings":["core/math/MathColor.js","Functions","colorSpaceMetadata(colorSpace = 'srgb')","srgbChannelToLinear(value)","linearChannelToSrgb(value)","srgbToLinearRgb(color)","linearRgbToSrgb(color)","linearRgbLuminance(color, coefficients = COLORLUMAREC709)","relativeLuminance(color)","contrastRatio(a, b)","rgbToYuv(color)","yuvToRgb(color)","rgbToYCbCr(color)","yCbCrToRgb(color)","toneMapReinhard(color)","toneMapReinhardExtended(color, whitePoint = 1)","toneMapACES(color)","colorExposure(color, exposure = 1)","colorContrastAdjust(color, amount = 1, pivot = 0.5)","colorSaturationAdjust(color, amount = 1, coefficients = COLORLUMAREC709)","colorGamutReport(color, options = {})","colorHdrMetadataReport(options = {})","colorDisplayTransformReport(color, options = {})","colorDisplayCapabilityReport(observed = {}, options = {})","canvasColorSettingsReport(settings = {}, observedAttributes = null)","canvasPixelReadbackReport(settings = {}, observedReadback = {}, options = {})","canvasPixelReadbackCapabilityReport(cases = [], options = {})","canvasPixelReadbackPrecisionReport(cases = [], options = {})","cssRelativeColorReport(value, options = {})","cssNamedColorReport(value)","cssSystemColorReport(value, options = {})","cssSystemColorResolutionReport(systemColors = {}, options = {})","cssColorParseReport(value, options = {})","colorContrastChoiceReport(background, candidates = [[0, 0, 0], [1, 1, 1]], options = {})","cssLightDarkColorReport(lightColor, darkColor, options = {})","rgbContrast(c, amount)","rgbSaturateAmount(c, amount)","rgbBrighten(c, amount)","hexToRgb(hex)","rgbToHex(c)","byteRgbToHex(r, g, b)","hexToRgba(hex)","rgbaToHex(c)","intToRgb(int)","rgbToInt(c)","rgbToHsl(c)","hslToRgb(c)","rgbToHsv(c)","hsvToRgb(c)","rgbToXyz(c)","xyzD65ToD50(xyz)","xyzD50ToD65(xyz)","xyzToRgb(c)","xyzToLab(c)","labToXyz(c)","labDistance(a, b)","labToLch(c)","lchToLab(c)","rgbToOklab(c)","oklabToRgb(c)","oklabToOklch(c)","oklchToOklab(c)","rgbLerpOklab(a, b, t)","kelvinToRgb(kelvin)","blendSoftLight(base, blend)","blendHardLight(base, blend)","blendColorDodge(base, blend)","blendColorBurn(base, blend)","gradientLinear(stops, t)","gradientOklab(stops, t)","paletteAnalogous(baseHue, count = 5, spread = 30)","paletteComplementary(baseHue)","paletteTriadic(baseHue)","paletteSplitComplementary(baseHue, spread = 30)","paletteTetradic(baseHue)","paletteMonochromatic(baseHue, count = 5)","rgb(r, g, b)","rgba(r, g, b, a = 1)","rgbClone(c)","rgbAdd(a, b)","rgbSub(a, b)","rgbMul(a, b)","rgbScale(c, s)","rgbLerp(a, b, t)","rgbClamp(c)","rgbLuminance(c)","rgbBrightness(c)","rgbMax(c)","rgbMin(c)","rgbInvert(c)","rgbGrayscale(c)","hslLerp(a, b, t)","rgbToLab(c)","labToRgb(c)","rgbDistance(a, b)","rgbToLch(c)","lchToRgb(c)","rgbToOklch(c)","oklchToRgb(c)","blendNormal(base, blend)","blendMultiply(base, blend)","blendScreen(base, blend)","blendOverlay(base, blend)","blendDarken(base, blend)","blendLighten(base, blend)","blendDifference(base, blend)","blendExclusion(base, blend)","blendAdd(base, blend)","blendSubtract(base, blend)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathColor.js Color spaces and conversions RGB, HSL, HSV, LAB, LCH, OKLAB, OKLCH, hex, blend modes, gradients, palettes Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"9ae817c4a7d5c176c09404911e9176f5bdb8da093e5c7faa235c4b2d74720542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathConstants.md::0000","path":"engine/reference/core/math/MathConstants.md","title":"core/math/MathConstants.js","description":"","kind":"reference","source":"engine/core/math/MathConstants.js","updated":"","headings":["core/math/MathConstants.js","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"306e8f0731939c193fb3bb812ce36b0129f45dd7e3fad52c15dabd35f160d828"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathDualQuat.md::0000","path":"engine/reference/core/math/MathDualQuat.md","title":"core/math/MathDualQuat.js","description":"","kind":"reference","source":"engine/core/math/MathDualQuat.js","updated":"","headings":["core/math/MathDualQuat.js","Functions","dqFromRotationTranslation(q, t)","dqFromMat4(m)","dqGetTranslation(dq)","dqToMat4(dq)","dqMultiply(a, b)","dqConjugate(dq)","dqNormalize(dq)","dqInverse(dq)","dqLerp(a, b, t)","dqSclerp(a, b, t)","dqTransformPoint(dq, point)","dqTransformVec3(dq, vec)","dqEquals(a, b, eps = EPSILON)","dqCreate(rx, ry, rz, rw, dx, dy, dz, dw)","dqIdentity()","dqClone(dq)","dqCopy(out, dq)","dqGetRotation(dq)","dqAdd(a, b)","dqScale(dq, s)","dqDot(a, b)","dqLength(dq)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"2d2dd49f99ebb4fb2898f264fb1f9e8097f52bbb3e65a4bfbc69eca08a2e47d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathEasing.md::0000","path":"engine/reference/core/math/MathEasing.md","title":"core/math/MathEasing.js","description":"","kind":"reference","source":"engine/core/math/MathEasing.js","updated":"","headings":["core/math/MathEasing.js","Functions","easeOutBounce(t)","easeSpring(t, mass = 1, stiffness = 100, damping = 10)","easeSpringSimple(t, bounces = 3, decay = 0.4)","cssCubicBezierValue(x1, y1, x2, y2, progress)","cssStepEasing(progress, steps = 1, position = 'end', options = {})","cssEasingParseReport(easing)","cssEasingReport(easing, progress, options = {})","cssEasingValue(easing, progress, options = {})","cubicBezierEasing(x1, y1, x2, y2)","catmullRom(p0, p1, p2, p3, t)","catmullRomSpline(points, t, closed = false)","hermite(p0, m0, p1, m1, t)","bspline(points, t, degree = 3)","computeArcLengthTable(curveFn, segments = 100)","getUniformT(arcTable, u)","easeLinear(t)","easeInQuad(t)","easeOutQuad(t)","easeInOutQuad(t)","easeInCubic(t)","easeOutCubic(t)","easeInOutCubic(t)","easeInQuart(t)","easeOutQuart(t)","easeInOutQuart(t)","easeInQuint(t)","easeOutQuint(t)","easeInOutQuint(t)","easeInSine(t)","easeOutSine(t)","easeInOutSine(t)","easeInExpo(t)","easeOutExpo(t)","easeInOutExpo(t)","easeInCirc(t)","easeOutCirc(t)","easeInOutCirc(t)","easeInElastic(t)","easeOutElastic(t)","easeInOutElastic(t)","easeInBack(t)","easeOutBack(t)","easeInOutBack(t)","easeInBounce(t)","easeInOutBounce(t)","easeInPow(t, p)","easeOutPow(t, p)","easeInOutPow(t, p)","bezier2(p0, p1, p2, t)","bezier2Vec2(p0, p1, p2, t)","bezier2Vec3(p0, p1, p2, t)","bezier3(p0, p1, p2, p3, t)","bezier3Vec2(p0, p1, p2, p3, t)","bezier3Vec3(p0, p1, p2, p3, t)","bezier3Derivative(p0, p1, p2, p3, t)","bezier3DerivativeVec3(p0, p1, p2, p3, t)","catmullRomVec3(p0, p1, p2, p3, t)","hermiteVec3(p0, m0, p1, m1, t)","getEasing(name)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathEasing.js Easing functions, Bezier curves, splines For animation, UI transitions, and procedural motion Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"f9db429c53c7957ff8d1ce543ec31522371fc973b9b53f195e2301a67dccae02"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathEntropy.md::0000","path":"engine/reference/core/math/MathEntropy.md","title":"core/math/MathEntropy.js","description":"","kind":"reference","source":"engine/core/math/MathEntropy.js","updated":"","headings":["core/math/MathEntropy.js","Functions","byteFrequencyHistogram(data, histogram = new Uint32Array(256)","symbolFrequencyHistogram(values, symbolCount, histogram = new Uint32Array(symbolCount)","histogramSampleCount(histogram)","histogramUniqueCount(histogram)","probabilityTableFromHistogram(histogram, sampleCount = histogramSampleCount(histogram)","shannonEntropyFromHistogram(histogram, options = {})","minEntropyFromHistogram(histogram, options = {})","maxEntropyForSymbolCount(symbolCount, options = {})","collisionProbabilityFromHistogram(histogram)","klDivergence(pDistribution, qDistribution, options = {})","crossEntropy(pDistribution, qDistribution, options = {})","mutualInformationFromJointHistogram(jointHistogram, xSymbolCount, ySymbolCount, options = {})","conditionalEntropyFromJointHistogram(jointHistogram, xSymbolCount, ySymbolCount, options = {})","jointEntropyReport(jointHistogram, xSymbolCount, ySymbolCount, options = {})","bitRunReport(data, options = {})","monobitRatio(data, options = {})","byteDistributionReport(data, options = {})","collisionCount(data, options = {})","serialCorrelation(data, options = {})","repetitionCount(data, options = {})","adaptiveProportionReport(data, options = {})","minEntropyThresholdReport(data, options = {})","predictabilityScore(data, options = {})","randomnessHealthReport(data, options = {})","entropyWindowReport(data, options = {})","streamingEntropyHealthReport(data, options = {})","entropyCompressionEstimate(sampleCount, entropyBitsPerSymbol, options = {})","histogramEntropyReport(histogram, options = {})","entropyReport(data, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathEntropy.js histograms, entropy reports, and distribution diagnostics. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"cc01d15282b94cfecbad9dcb2120c8d4e091a0eb4fcc8b2c7aaa7639832bc403"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathGeometry.md::0000","path":"engine/reference/core/math/MathGeometry.md","title":"core/math/MathGeometry.js","description":"","kind":"reference","source":"engine/core/math/MathGeometry.js","updated":"","headings":["core/math/MathGeometry.js","Functions","sdfBox3D(p, b)","sdfCylinder(p, h, r)","sdfCapsule(p, a, b, r)","sdfTorus(p, R, r)","sdfCone(p, angle, h)","pointInTriangle2D(p, a, b, c)","lineLineIntersection(p1, p2, p3, p4)","sphereAABB(center, radius, aabbMin, aabbMax)","raySphere(rayOrigin, rayDir, center, radius)","rayAABB(rayOrigin, rayDir, aabbMin, aabbMax)","rayPlane(rayOrigin, rayDir, planeNormal, planeD)","rayTriangle(rayOrigin, rayDir, v0, v1, v2)","aabbFromPoints(points)","transformedAabbBoundingSphereReport(localMin, localMax, position, rotation, scale)","aabbSurfaceArea(aabb)","aabbVolume(aabb)","boundingSphereFromPoints(points)","frustumFromMatrix(m)","frustumNormalizePlanes(frustum)","frustumContainsSphere(frustum, center, radius)","frustumContainsAABB(frustum, aabbMin, aabbMax)","frustumTestAABB(frustum, aabbMin, aabbMax)","triangleBarycentric(p, a, b, c)","triangleClosestPoint(p, a, b, c)","closestPointOnSegment(p, a, b)","closestPointOnAABB(p, aabbMin, aabbMax)","closestPointOnSphere(p, center, radius)","sdfCircle(p, r)","sdfBox2D(p, b)","sdfSegment2D(p, a, b)","sdfRoundedBox2D(p, b, r)","sdfSphere(p, r)","sdfRoundBox(p, b, r)","sdfPlane(p, n, d)","sdfUnion(d1, d2)","sdfSubtract(d1, d2)","sdfIntersect(d1, d2)","sdfSmoothUnion(d1, d2, k)","sdfSmoothSubtract(d1, d2, k)","sdfSmoothIntersect(d1, d2, k)","sdfRound(d, r)","sdfOnion(d, r)","pointInCircle(point, center, radius)","pointInRect(point, rectMin, rectMax)","circleCircle(c1, r1, c2, r2)","rectRect(min1, max1, min2, max2)","pointInSphere(point, center, radius)","pointInAABB(point, aabbMin, aabbMax)","sphereSphere(c1, r1, c2, r2)","aabbAABB(min1, max1, min2, max2)","aabbCenter(aabb)","aabbSize(aabb)","aabbHalfSize(aabb)","aabbExpand(aabb, point)","aabbMerge(a, b)","aabbGrow(aabb, amount)","triangleNormal(a, b, c)","triangleArea(a, b, c)","distancePointToSegment(p, a, b)","distancePointToAABB(p, aabbMin, aabbMax)","distancePointToSphere(p, center, radius)","distancePointToPlane(p, normal, d)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"2d25fac91bab193b0158ead88ce803030f8026f2fac8565963c6e77f3ca85130"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathGrid.md::0000","path":"engine/reference/core/math/MathGrid.md","title":"core/math/MathGrid.js","description":"","kind":"reference","source":"engine/core/math/MathGrid.js","updated":"","headings":["core/math/MathGrid.js","Functions","bilinearSample(grid, width, height, u, v)","bilinearSampleVec3(grid, width, height, u, v)","trilinearSample(grid, width, height, depth, u, v, w)","trilinearSampleVec3(grid, width, height, depth, u, v, w)","trilinearSampleVec4(grid, width, height, depth, u, v, w)","gridGradient(grid, width, height, depth, x, y, z, cellSize = 1)","gridDivergence(grid, width, height, depth, x, y, z, cellSize = 1)","gridCurl(grid, width, height, depth, x, y, z, cellSize = 1)","gridLaplacian(grid, width, height, depth, x, y, z, cellSize = 1)","gridLaplacianVec3(grid, width, height, depth, x, y, z, cellSize = 1)","advectScalar(scalarField, velocityField, out, width, height, depth, dt, cellSize = 1)","advectVelocity(velocityField, out, width, height, depth, dt, cellSize = 1)","gridCreateScalar(width, height, depth)","gridCreateVec3(width, height, depth)","gridCreateVec4(width, height, depth)","worldToGrid(worldPos, gridOrigin, cellSize)","gridToWorld(gridPos, gridOrigin, cellSize)","gridSampleScalarWorld(grid, width, height, depth, worldPos, gridOrigin, cellSize)","gridSampleVec3World(grid, width, height, depth, worldPos, gridOrigin, cellSize)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Bilinear interpolation on a 2D scalar grid Parameters: (Float32Array number[]) — Flat array [y width + x] (number) — Grid width (number) — Grid height (number) — X coordinate (0 to width 1, fractional) (number) — Y coordinate (0 to height 1, fractional) Returns: Interpolated value Bilinear interpolation on a 2D vector grid (3 component, interleaved) Parameters: (Float32Array number[]) — Flat array [y width 3 + x 3 + component] (number) — Grid width (number) — Grid height (number) — X coordinate (fractional) (number) — Y coordinate (fractional) Returns: Interpolated [x, y, z] Trilinear interpolation on a 3D scalar grid Parameters: (Float32Array number[]) — Flat array [z height width + y width + x] (number) — Grid X dimension (number) — Grid Y dimension (number) — Grid Z dimension (number) — X coordinate (fractional) (number) — Y coordinate (fractional) (number) — Z coordinate (fractional) Returns: Interpolated value Trilinear interpolation on a 3D vector grid (3 component, interleaved) Matches FluidSimWorld.js sampleVelocityTrilinear GPU implementation Parameters: (Float32Array number[]) — Flat array [(z H W + y W + x) 3 + component] (number) — Grid X dimension (number) — Grid Y dimension (number) — Grid Z dimension (number) — X coordinate (fractional) (number) — Y coordinate (fractional) (number) — Z coordinate (fractional) Returns: Interpolated [x, y, z] Trilinear interpolation on a 3D grid stored as vec4 (4 component, e.g. velocity + spin)","contentHash":"8bb67a537eb1b20f3ac3543838bf89cb8dcdfa2313f0626bcfc04ce2c9819625"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathGrid.md::0001","path":"engine/reference/core/math/MathGrid.md","title":"core/math/MathGrid.js","description":"","kind":"reference","source":"engine/core/math/MathGrid.js","updated":"","headings":["core/math/MathGrid.js","Functions","bilinearSample(grid, width, height, u, v)","bilinearSampleVec3(grid, width, height, u, v)","trilinearSample(grid, width, height, depth, u, v, w)","trilinearSampleVec3(grid, width, height, depth, u, v, w)","trilinearSampleVec4(grid, width, height, depth, u, v, w)","gridGradient(grid, width, height, depth, x, y, z, cellSize = 1)","gridDivergence(grid, width, height, depth, x, y, z, cellSize = 1)","gridCurl(grid, width, height, depth, x, y, z, cellSize = 1)","gridLaplacian(grid, width, height, depth, x, y, z, cellSize = 1)","gridLaplacianVec3(grid, width, height, depth, x, y, z, cellSize = 1)","advectScalar(scalarField, velocityField, out, width, height, depth, dt, cellSize = 1)","advectVelocity(velocityField, out, width, height, depth, dt, cellSize = 1)","gridCreateScalar(width, height, depth)","gridCreateVec3(width, height, depth)","gridCreateVec4(width, height, depth)","worldToGrid(worldPos, gridOrigin, cellSize)","gridToWorld(gridPos, gridOrigin, cellSize)","gridSampleScalarWorld(grid, width, height, depth, worldPos, gridOrigin, cellSize)","gridSampleVec3World(grid, width, height, depth, worldPos, gridOrigin, cellSize)","Notes & Examples","Math Library Conventions"],"chunkIndex":1,"chunkCount":3,"text":"(number) — Z coordinate (fractional) Returns: Interpolated [x, y, z] Trilinear interpolation on a 3D grid stored as vec4 (4 component, e.g. velocity + spin) Parameters: (Float32Array number[]) — Flat array [(z H W + y W + x) 4 + component] (number) — Grid X dimension (number) — Grid Y dimension (number) — Grid Z dimension (number) — X coordinate (fractional) (number) — Y coordinate (fractional) (number) — Z coordinate (fractional) Returns: Interpolated [x, y, z, w] Discrete gradient of a scalar field (central differences) Parameters: (Float32Array number[]) — Scalar grid [z H W + y W + x] (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Integer grid coordinate (number) — Integer grid coordinate (number) — Integer grid coordinate (number) — Grid cell spacing (default 1) Returns: [dF/dx, dF/dy, dF/dz] Discrete divergence of a vector field (central differences) Parameters: (Float32Array number[]) — Vector grid [(z H W + y W + x) 3 + component] (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Integer grid coordinate (number) — Integer grid coordinate (number) — Integer grid coordinate (number) — No description in source JSDoc. Returns: div(F) = dFx/dx + dFy/dy + dFz/dz Discrete curl of a vector field (central differences) Parameters: (Float32Array number[]) — Vector grid [(z H W + y W + x) 3 + component] (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Integer grid coordinate (number) — Integer grid coordinate (number) — Integer grid coordinate (number) — No description in source JSDoc. Returns: curl(F) =","contentHash":"d004bbc355201d944e2149de6124798d107061006bacf387e24ce8f5d2f6ad5b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathGrid.md::0002","path":"engine/reference/core/math/MathGrid.md","title":"core/math/MathGrid.js","description":"","kind":"reference","source":"engine/core/math/MathGrid.js","updated":"","headings":["core/math/MathGrid.js","Functions","bilinearSample(grid, width, height, u, v)","bilinearSampleVec3(grid, width, height, u, v)","trilinearSample(grid, width, height, depth, u, v, w)","trilinearSampleVec3(grid, width, height, depth, u, v, w)","trilinearSampleVec4(grid, width, height, depth, u, v, w)","gridGradient(grid, width, height, depth, x, y, z, cellSize = 1)","gridDivergence(grid, width, height, depth, x, y, z, cellSize = 1)","gridCurl(grid, width, height, depth, x, y, z, cellSize = 1)","gridLaplacian(grid, width, height, depth, x, y, z, cellSize = 1)","gridLaplacianVec3(grid, width, height, depth, x, y, z, cellSize = 1)","advectScalar(scalarField, velocityField, out, width, height, depth, dt, cellSize = 1)","advectVelocity(velocityField, out, width, height, depth, dt, cellSize = 1)","gridCreateScalar(width, height, depth)","gridCreateVec3(width, height, depth)","gridCreateVec4(width, height, depth)","worldToGrid(worldPos, gridOrigin, cellSize)","gridToWorld(gridPos, gridOrigin, cellSize)","gridSampleScalarWorld(grid, width, height, depth, worldPos, gridOrigin, cellSize)","gridSampleVec3World(grid, width, height, depth, worldPos, gridOrigin, cellSize)","Notes & Examples","Math Library Conventions"],"chunkIndex":2,"chunkCount":3,"text":"— Integer grid coordinate (number) — Integer grid coordinate (number) — Integer grid coordinate (number) — No description in source JSDoc. Returns: curl(F) = [dFz/dy dFy/dz, dFx/dz dFz/dx, dFy/dx dFx/dy] Discrete Laplacian of a scalar field (6 point stencil) Parameters: (Float32Array number[]) — Scalar grid [z H W + y W + x] (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: ∇²F Discrete Laplacian of a vector field (per component, 6 point stencil) Parame","contentHash":"dbeee08ab232d39e9fe8fa59b02d53dc0974453d35d7cf7aef468021c4c48d7b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathLine3.md::0000","path":"engine/reference/core/math/MathLine3.md","title":"core/math/MathLine3.js","description":"","kind":"reference","source":"engine/core/math/MathLine3.js","updated":"","headings":["core/math/MathLine3.js","Functions","segmentFromPointDir(origin, direction, length)","segmentClosestPointToPoint(seg, point)","segmentDistanceToPoint(seg, point)","segmentDistanceSqToPoint(seg, point)","segmentClosestPointToSegment(seg1, seg2)","segmentDistanceToSegment(seg1, seg2)","segmentDistanceSqToSegment(seg1, seg2)","segmentClosestPointToRay(seg, rayOrigin, rayDir)","segmentDistanceToRay(seg, rayOrigin, rayDir)","segmentEquals(a, b, eps = EPSILON)","segmentCreate(a, b)","segmentClone(seg)","segmentAt(seg, t)","segmentCenter(seg)","segmentDelta(seg)","segmentDirection(seg)","segmentLength(seg)","segmentLengthSq(seg)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"dd048e95413b8180155f9bc3eb74e730fc5daa310dcd6a15bf76ab540f6e1bf5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathMat.md::0000","path":"engine/reference/core/math/MathMat.md","title":"core/math/MathMat.js","description":"","kind":"reference","source":"engine/core/math/MathMat.js","updated":"","headings":["core/math/MathMat.js","Functions","mat2Inverse(m)","mat3Multiply(a, b)","mat3Inverse(m)","mat3NormalFromMat4(m)","mat3FromQuat(q)","mat4Determinant(m)","mat4MultiplyMany(...matrices)","mat4MultiplyInto(out, a, b)","mat4FromRotationAxis(axis, angle)","mat4FromQuat(q)","mat4FromRotationTranslationScale(q, t, s)","mat4Decompose(m)","mat4TransformPoint(m, v)","mat4Lerp(a, b, t)","mat4Equals(a, b, eps = EPSILON)","mat4IsIdentity(m, eps = EPSILON)","mat4Frustum(left, right, bottom, top, near, far)","mat4PerspectiveInfinite(fov, aspect, near)","mat4PerspectiveReverseZ(fov, aspect, near, far)","mat4TargetTo(eye, target, up)","mat4Rotate(m, axis, angle)","mat4InverseTranspose(m)","mat2Identity()","mat2(a, b, c, d)","mat2Clone(m)","mat2Copy(out, m)","mat2Multiply(a, b)","mat2Determinant(m)","mat2Transpose(m)","mat2FromRotation(angle)","mat2FromScale(sx, sy)","mat2TransformVec2(m, v)","mat3Identity()","mat3Clone(m)","mat3Copy(out, m)","mat3FromMat4(m)","mat3Determinant(m)","mat3Transpose(m)","mat3FromRotationX(angle)","mat3FromRotationY(angle)","mat3FromRotationZ(angle)","mat3TransformVec3(m, v)","mat3FromTranslation2D(x, y)","mat3FromScale2D(sx, sy)","mat3FromRotation2D(angle)","mat4Clone(m)","mat4Copy(out, m)","mat4Transpose(m)","mat4FromTranslation(x, y, z)","mat4FromTranslationVec3(v)","mat4FromScale(sx, sy, sz)","mat4FromScaleVec3(v)","mat4FromScaleUniform(s)","mat4FromRotationX(angle)","mat4FromRotationY(angle)","mat4FromRotationZ(angle)","mat4GetTranslation(m)","mat4GetScale(m)","mat4GetForward(m)","mat4GetRight(m)","mat4GetUp(m)","mat4GetBack(m)","mat4TransformDirection(m, v)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"13665763e289506893fa3518160ed90fb27a3a5ee9b142727a10182d514a008d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathNoise.md::0000","path":"engine/reference/core/math/MathNoise.md","title":"core/math/MathNoise.js","description":"","kind":"reference","source":"engine/core/math/MathNoise.js","updated":"","headings":["core/math/MathNoise.js","Functions","perlin1D(x)","perlin2D(x, y)","perlin3D(x, y, z)","simplex2D(x, y)","simplex3D(x, y, z)","valueNoise2D(x, y)","valueNoise3D(x, y, z)","shaderHash2D(x, y)","shaderNoise2D(x, y)","shaderFbm2D(x, y)","shaderHash3D(x, y, z)","shaderNoise3D(x, y, z)","shaderFbm3D(x, y, z, octaves = 4)","shaderFbm3DRotated(x, y, z, octaves = 4)","voronoi2D(x, y)","voronoi3D(x, y, z)","fbm2D(x, y, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin2D)","fbm3D(x, y, z, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin3D)","ridged2D(x, y, octaves = 6, lacunarity = 2, gain = 0.5, offset = 1, noiseFn = perlin2D)","ridged3D(x, y, z, octaves = 6, lacunarity = 2, gain = 0.5, offset = 1, noiseFn = perlin3D)","warpedNoise2D(x, y, warpStrength = 0.5, noiseFn = perlin2D)","warpedNoise3D(x, y, z, warpStrength = 0.5, noiseFn = perlin3D)","curlNoise2D(x, y, epsilon = 0.0001, noiseFn = perlin2D)","curlNoise3D(x, y, z, epsilon = 0.0001, noiseFn = perlin3D)","turbulence2D(x, y, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin2D)","turbulence3D(x, y, z, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin3D)","billow2D(x, y, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin2D)","billow3D(x, y, z, octaves = 6, lacunarity = 2, gain = 0.5, noiseFn = perlin3D)","createSeededNoise(seed)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"7ed05f92c9e14d2f30a6d25740baca5cb9e9e293c49f27006d29039f82ba1bbd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathOscillator.md::0000","path":"engine/reference/core/math/MathOscillator.md","title":"core/math/MathOscillator.js","description":"","kind":"reference","source":"engine/core/math/MathOscillator.js","updated":"","headings":["core/math/MathOscillator.js","Functions","normalizePhase(phase)","cyclesToRadians(cycles)","radiansToCycles(radians)","phaseFromTime(frequency, time, phase = 0)","advancePhase(phase, frequency, dt)","createOscillator(config = {})","oscillatorCycle(phase)","sampleWave(shape, phase, dutyCycle = 0.5)","sampleOscillatorAtPhase(oscillator, phase)","sampleOscillator(oscillator, time)","sampleOscillatorArray(oscillators, time, out = [])","beatFrequency(a, b)","resonanceWeight(a, b, bandwidth = 1)","applyAmplitudeModulation(sampleValue, modulatorValue, amount = 1, bipolar = false)","applyPhaseModulation(phase, modulatorValue, amount = 1)","waveInterference(a, b)","ringModulate(a, b)","sampleAmplitudeModulated(carrier, modulator, time, amount = 1, bipolar = false)","samplePhaseModulated(carrier, modulator, time, amount = 1)","sampleRingModulated(a, b, time)","phaseCoherence(phases)","stepKuramotoPhases(phases, naturalFrequencies, dt, coupling = 0.5, weights = null, out = null)","stepCoupledOscillators(oscillators, dt, coupling = 0.5, weights = null)","kuramotoOrderParameterComplex(phases)","kuramotoOrderParameter(phases)","stepKuramotoDriven(phases, naturalFrequencies, dt, t, coupling = 0.5, driveFrequency = 1, driveStrength = 0, weights = null, out = null)","stepKuramotoMeanFieldDriven(phases, naturalFrequencies, dt, t, coupling = 0.5, driveFrequency = 1, driveStrength = 0, out = null, order = null,)","createOscillatorBank(count, factory = null)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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). Scalar synchronization metric r = <e^(iθ) . Game uses: swarm AI cohesion, rhythm combat sync signals, magic ritual progress bars, ambient life pulse coherence. 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. Parameters: (number[]) — current phase array (radians) (number[]) — natural frequencies (Hz) (number) — time step (seconds) (number) — absolute time (seconds) (number) — K — inter oscillator coupling strength (number) — f drive — external forcing frequency (Hz) (number) — λ — external forcing amplitude (number[][] null) — optional pairwise coupling weights (number[] null) — optional output array (avoids alloc) 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 while avoiding its O(N²) pair loop. may be supplied when the caller already","contentHash":"8659a58c2f6dc214884a8c5ad4b5579d4f4645db62bbde5ed92acd5b5c83bb09"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathOscillator.md::0001","path":"engine/reference/core/math/MathOscillator.md","title":"core/math/MathOscillator.js","description":"","kind":"reference","source":"engine/core/math/MathOscillator.js","updated":"","headings":["core/math/MathOscillator.js","Functions","normalizePhase(phase)","cyclesToRadians(cycles)","radiansToCycles(radians)","phaseFromTime(frequency, time, phase = 0)","advancePhase(phase, frequency, dt)","createOscillator(config = {})","oscillatorCycle(phase)","sampleWave(shape, phase, dutyCycle = 0.5)","sampleOscillatorAtPhase(oscillator, phase)","sampleOscillator(oscillator, time)","sampleOscillatorArray(oscillators, time, out = [])","beatFrequency(a, b)","resonanceWeight(a, b, bandwidth = 1)","applyAmplitudeModulation(sampleValue, modulatorValue, amount = 1, bipolar = false)","applyPhaseModulation(phase, modulatorValue, amount = 1)","waveInterference(a, b)","ringModulate(a, b)","sampleAmplitudeModulated(carrier, modulator, time, amount = 1, bipolar = false)","samplePhaseModulated(carrier, modulator, time, amount = 1)","sampleRingModulated(a, b, time)","phaseCoherence(phases)","stepKuramotoPhases(phases, naturalFrequencies, dt, coupling = 0.5, weights = null, out = null)","stepCoupledOscillators(oscillators, dt, coupling = 0.5, weights = null)","kuramotoOrderParameterComplex(phases)","kuramotoOrderParameter(phases)","stepKuramotoDriven(phases, naturalFrequencies, dt, t, coupling = 0.5, driveFrequency = 1, driveStrength = 0, weights = null, out = null)","stepKuramotoMeanFieldDriven(phases, naturalFrequencies, dt, t, coupling = 0.5, driveFrequency = 1, driveStrength = 0, out = null, order = null,)","createOscillatorBank(count, factory = null)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":1,"chunkCount":2,"text":"(K/N) Σⱼ sin(θⱼ θᵢ) = K (im·cos θᵢ re·sin θᵢ) This is mathematically equivalent to while avoiding its O(N²) pair loop. may be supplied when the caller already computed the current order parameter for telemetry. Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"c605f547b0a7bc3f1ff9ff1d3b5540851d6fe215f7b4604b9a6cc04b59691595"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathPacking.md::0000","path":"engine/reference/core/math/MathPacking.md","title":"core/math/MathPacking.js","description":"","kind":"reference","source":"engine/core/math/MathPacking.js","updated":"","headings":["core/math/MathPacking.js","Functions","floatToHalf(val)","halfToFloat(h)","floatArrayToHalf(arr)","halfArrayToFloat(arr)","packUNORM8Array(arr)","unpackUNORM8Array(arr)","packUNORM16Array(arr)","unpackUNORM16Array(arr)","packSignedRangeUNORMBits(value, range, bitDepth = 16, fallback = 0)","unpackSignedRangeUNORMBits(packed, range, bitDepth = 16, fallback = 0)","packSignedRangeUNORM16(value, range, fallback = 0)","unpackSignedRangeUNORM16(packed, range, fallback = 0)","packSignedRangeSNORMBits(value, range, bitDepth = 16, fallback = 0)","unpackSignedRangeSNORMBits(packed, range, bitDepth = 16, fallback = 0)","packSignedRangeSNORM16(value, range, fallback = 0)","unpackSignedRangeSNORM16(packed, range, fallback = 0)","packUint8x4(x, y, z, w)","unpackUint8x4(packed)","packUNORM8x4(x, y, z, w)","unpackUNORM8x4(packed)","packSNORM8x4(x, y, z, w)","unpackSNORM8x4(packed)","packUNORM16x2(x, y)","unpackUNORM16x2(packed)","packSNORM16x2(x, y)","unpackSNORM16x2(packed)","packTransformTRS10(transform = {}, options = {})","unpackTransformTRS10(packed, options = {})","packParticlePositionAge(x, y, z, age, options = {})","unpackParticlePositionAge(packed, options = {})","packParticleVelocityLifetime(vx, vy, vz, lifetime, options = {})","unpackParticleVelocityLifetime(packed, options = {})","packORM8(occlusion = 1, roughness = 1, metallic = 0, alpha = 1)","unpackORM8(packed)","packPBRMaterialParams8(metallic = 0, roughness = 1, normalScale = 1, alphaCutoff = 0)","unpackPBRMaterialParams8(packed)","normalizeVoxelMaterialUniforms(params = {})","packVoxelMaterialUniforms(params = {}, out = new Float32Array(VOXELMATERIALUNIFORMFLOATS)","packRGB9E5(r, g, b)","unpackRGB9E5(v)","packR11G11B10F(r, g, b)","unpackR11G11B10F(v)","packOctNormal(nx, ny, nz)","unpackOctNormal(packed)","packQuatSmallestThree(x, y, z, w)","unpackQuatSmallestThree(packed)","packUNORM8(f)","unpackUNORM8(u)","packUNORM16(f)","unpackUNORM16(u)","packSNORM8(f)","unpackSNORM8(s)","packSNORM16(f)","unpackSNORM16(s)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathPacking.js GPU data packing utilities Half float, SNORM/UNORM, RGB9E5, R11G11B10F Consolidates: World3DPreviewRenderer. floatToHalf, MeshCompression.quantizeUVs Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"d746174a68f9f1a09e8fa6012a844c714906ad67a485ea9cb27294606a3e207c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathPhysics.md::0000","path":"engine/reference/core/math/MathPhysics.md","title":"core/math/MathPhysics.js","description":"","kind":"reference","source":"engine/core/math/MathPhysics.js","updated":"","headings":["core/math/MathPhysics.js","Functions","linearMotion(position, velocity, acceleration, dt)","eulerIntegrate(position, velocity, acceleration, dt)","semiImplicitEuler(position, velocity, acceleration, dt)","projectileMotion(position, velocity, gravity, dt)","projectilePosition(start, velocity, gravity, t)","projectileTimeToApex(velocityY, gravity)","projectileMaxHeight(startY, velocityY, gravity)","projectileRange(speed, angle, gravity)","projectileLaunchAngle(range, speed, gravity)","projectileVelocityToTarget(start, target, gravity, preferHighArc = false)","pointVelocityFromAngular(angularVelocity, centerOfRotation, point)","totalPointVelocity(linearVelocity, angularVelocity, centerOfMass, point)","gravitationalForce(m1, m2, p1, p2, G = 6.674e-11)","springForce(position, anchor, restLength, stiffness)","dampedSpringForce(position, velocity, anchor, restLength, stiffness, damping)","dragForce(velocity, dragCoefficient, area, fluidDensity = 1.225)","linearDragForce(velocity, dragCoefficient)","frictionForce(velocity, normalForce, frictionCoefficient)","buoyancyForce(submergedVolume, fluidDensity, gravity = 9.81)","torqueFromForce(force, point, centerOfMass)","angularAccelerationFromTorque(torque, inertia)","elasticCollision(m1, v1, m2, v2)","inelasticCollision(m1, v1, m2, v2, restitution = 0.5)","sphereCollisionResponse(p1, v1, m1, r1, p2, v2, m2, r2, restitution = 0.8)","planeCollisionResponse(velocity, normal, restitution = 0.8)","collisionResponseWithFriction(velocity, normal, restitution, friction)","distanceConstraint(p1, p2, targetDistance, stiffness = 1)","distanceConstraintMass(p1, m1, p2, m2, targetDistance, stiffness = 1)","pointConstraint(position, target, stiffness = 1)","angleConstraint(p1, p2, p3, targetAngle, stiffness = 1)","collisionConstraint(p1, r1, p2, r2)","verletIntegrate(current, previous, acceleration, dt)","verletIntegrateDamped(current, previous, acceleration, dt, damping = 0.99)","verletVelocity(current, previous, dt)","parallelAxisTheorem(inertia, mass, offset)","totalMechanicalEnergy(mass, velocity, height, g = 9.81)","rk2Integrate(position, velocity, accelerationFn, t, dt)","rk4Integrate(position, velocity, accelerationFn, t, dt)","rk4AdaptiveStep(position, velocity, accelerationFn, t, dt)","pointAttractorForce(position, attractorPos, strength, falloffRadius = 1)","pointAttractorForceInvSq(position, attractorPos, strength, minDist = 0.1)","vortexFieldForce(position, vortexPos, vortexAxis, strength, radius = 1)","orbitForce(position, centerPos, orbitSpeed, upAxis = [0, 1, 0])","windForce(velocity, windVelocity, sensitivity = 0.1)","sphereSphereTimeOfImpact(p1, v1, r1, p2, r2)","sphereSphereMovingTOI(p1, v1, r1, p2, v2, r2)","spherePlaneTimeOfImpact(center, velocity, radius, planeNormal, planeD)","sphereAABBTimeOfImpact(center, velocity, radius, aabbMin, aabbMax)","clampVelocity(velocity, maxSpeed)","applyDrag(velocity, drag, dt)","separateSpheres(p1, r1, p2, r2)","forceFromAcceleration(mass, acceleration)","accelerationFromForce(mass, force)","inertiaBox(mass, width, height, depth)","inertiaSphere(mass, radius)","inertiaHollowSphere(mass, radius)","inertiaCylinder(mass, radius, height)","inertiaCapsule(mass, radius, height)","inertiaCone(mass, radius, height)","kineticEnergy(mass, velocity)","potentialEnergyGravity(mass, height, g = 9.81)","springPotentialEnergy(stiffness, displacement)","rotationalKineticEnergy(inertia, angularVelocity)","linearMomentum(mass, velocity)","angularMomentum(inertia, angularVelocity)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"13665763e289506893fa3518160ed90fb27a3a5ee9b142727a10182d514a008d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathPlane.md::0000","path":"engine/reference/core/math/MathPlane.md","title":"core/math/MathPlane.js","description":"","kind":"reference","source":"engine/core/math/MathPlane.js","updated":"","headings":["core/math/MathPlane.js","Functions","planeFromPointNormal(point, normal)","planeFromPoints(a, b, c)","planeNormalize(p)","planeClassifyPoint(plane, point, eps = EPSILON)","planeProjectPoint(plane, point)","planeIntersectRay(plane, rayOrigin, rayDir)","planeIntersectSegment(plane, p1, p2)","planeIntersectPlane(p1, p2)","planeIntersectThreePlanes(p1, p2, p3)","planeTransformMat4(plane, m)","planeEquals(a, b, eps = EPSILON)","planeCreate(nx, ny, nz, d)","planeClone(p)","planeGetNormal(p)","planeDistanceToPoint(plane, point)","planeAbsDistanceToPoint(plane, point)","planeNegate(p)","planeCoplanarPoint(plane)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"30e0e1247b394697e2a925d8c816296f3ab2944df078e21e409e0c160d9b5ea1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathPolynomial.md::0000","path":"engine/reference/core/math/MathPolynomial.md","title":"core/math/MathPolynomial.js","description":"","kind":"reference","source":"engine/core/math/MathPolynomial.js","updated":"","headings":["core/math/MathPolynomial.js","Functions","polyEval(coeffs, x)","polyDerivative(coeffs)","polyEvalWithDerivative(coeffs, x)","solveLinear(a, b)","solveQuadratic(a, b, c)","solveQuadraticPositive(a, b, c)","solveCubic(a, b, c, d)","solveQuartic(a, b, c, d, e)","polyNewtonRoot(coeffs, guess, maxIter = 20, tolerance = EPSILON)","polyRealRoots(coeffs, lo = -1000, hi = 1000, tolerance = 1e-10)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Evaluate polynomial using Horner's method: coeffs[0] x^n + coeffs[1] x^(n 1) + ... + coeffs[n] Derivative coefficients: returns new array of degree n 1 Evaluate polynomial and its derivative simultaneously (Horner's) Smallest positive root of quadratic, or null Find all real roots of an arbitrary polynomial using Sturm chain + bisection Parameters: (number[]) — Polynomial coefficients [a n, a {n 1}, ..., a 1, a 0] (number) — Lower bound for root search (default: 1000) (number) — Upper bound for root search (default: 1000) (number) — Root accuracy (default: EPSILON) Returns: Sorted array of real roots <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"801ca45f6c55928951bc64a3dd787c74444cfe647b3364740c0453e34d551190"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathPrecision.md::0000","path":"engine/reference/core/math/MathPrecision.md","title":"core/math/MathPrecision.js","description":"","kind":"reference","source":"engine/core/math/MathPrecision.js","updated":"","headings":["core/math/MathPrecision.js","Functions","absoluteError(actual, expected)","relativeError(actual, expected)","numberWithinTolerance(actual, expected, absoluteTolerance = DEFAULTABSOLUTETOLERANCE, relativeTolerance = DEFAULTRELATIVETOLERANCE)","maxAbsError(actual, expected)","vecWithinTolerance(actual, expected, absoluteTolerance = DEFAULTABSOLUTETOLERANCE, relativeTolerance = DEFAULTRELATIVETOLERANCE)","splitFloat64ToFloat32(value)","joinFloat32Split(split)","splitVec3Float64ToFloat32(value)","joinVec3Float32Split(split)","serializeFloat32Split(split)","deserializeFloat32Split(payload)","serializeVec3Float32Split(split)","deserializeVec3Float32Split(payload)","jsonRoundTrip(value)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathPrecision.js numeric tolerance and world scale split double helpers. Pure math helpers for tests, serialization policy, and CPU/GPU coordinate packing. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"7fa31d2ff1d2373163aea727dee90d8e85db71ad858b0cd6793803bba3f3f9aa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathQuality.md::0000","path":"engine/reference/core/math/MathQuality.md","title":"core/math/MathQuality.js","description":"","kind":"reference","source":"engine/core/math/MathQuality.js","updated":"","headings":["core/math/MathQuality.js","Functions","pairwiseErrorStats(reference, candidate)","meanSquaredError(reference, candidate)","rootMeanSquaredError(reference, candidate)","meanAbsoluteError(reference, candidate)","averageError(reference, candidate)","peakAbsoluteError(reference, candidate)","signalToNoiseRatio(reference, candidate)","peakSignalToNoiseRatio(reference, candidate, options = {})","structuralSimilarityLite(reference, candidate, options = {})","windowedStructuralSimilarity(reference, candidate, options = {})","channelQualityReport(reference, candidate, options = {})","imageQualityReport(referenceImage, candidateImage, options = {})","histogramDifference(referenceHistogram, candidateHistogram, options = {})","audioRmsError(reference, candidate)","frameDifference(reference, candidate, options = {})","perceptualErrorScore(reference, candidate, options = {})","qualityMetricsReport(reference, candidate, options = {})","qualitySizeScore({ quality = 1, byteSize = 0, referenceByteSize = 0, byteBudget = Infinity, budgetBytes = byteBudget, qualityWeight = 0.7, sizeWeight = 0.3, budgetWeight, } = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathQuality.js reusable error, quality, signal, and size metrics. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"9a743608abe77083868c459b4f73c0ea8c62c03e72df802f273ad433075f24dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathQuat.md::0000","path":"engine/reference/core/math/MathQuat.md","title":"core/math/MathQuat.js","description":"","kind":"reference","source":"engine/core/math/MathQuat.js","updated":"","headings":["core/math/MathQuat.js","Functions","quatFromAxisAngle(axis, angle)","quatFromEuler(x, y, z, order = 'XYZ')","quatToEuler(q, order = 'XYZ')","quatFromRotationMatrix(m)","quatFromVectors(from, to)","quatLookAt(direction, up = [0, 1, 0])","quatMultiply(a, b)","quatInverse(q)","quatNormalize(q)","quatRotateVec3(v, q)","quatSlerp(a, b, t)","quatGetAxis(q)","quatEquals(a, b, eps = EPSILON)","quatRandom()","quatExp(q)","quatLog(q)","quatRotateTowards(from, to, maxRadiansDelta)","quatSlerpUnclamped(a, b, t)","quatToAxisAngle(q)","quatSwingTwist(q, twistAxis)","quatIntegrateAngularVelocity(q, angularVel, dt)","quat(x = 0, y = 0, z = 0, w = 1)","quatIdentity()","quatClone(q)","quatCopy(out, q)","quatSet(out, x, y, z, w)","quatFromEulerDeg(x, y, z, order = 'XYZ')","quatToEulerDeg(q, order = 'XYZ')","quatAdd(a, b)","quatScale(q, s)","quatConjugate(q)","quatNegate(q)","quatLength(q)","quatLengthSq(q)","quatDot(a, b)","quatLerp(a, b, t)","quatSquad(q0, q1, q2, q3, t)","quatGetAngle(q)","quatAngleBetween(a, b)","quatPow(q, n)","quatRotateX(q, angle)","quatRotateY(q, angle)","quatRotateZ(q, angle)","quatForward(q)","quatRight(q)","quatUp(q)","quatBack(q)","quatToString(q, precision = 3)","quatDifference(from, to)","quatIsIdentity(q, eps = EPSILON)","quatIsNormalized(q, eps = EPSILON)","quatIsFinite(q)","Notes & Examples","Creating rotations","Composing and interpolating","Converting to/from other representations","Gotchas","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Quaternions for 3D rotations — compact, interpolation friendly, and gimbal lock free. Stored as . Use to compose rotations and for smooth interpolation. Creating rotations Composing and interpolating Converting to/from other representations Gotchas Normalization : Always normalize after many operations; is cheap. Shortest path : takes the shortest arc; for long spins, add multiples of 2π to the target angle first. Gimbal lock : Quaternions avoid it, but converting FROM Euler can still hit singularities at ±90° pitch — prefer quat from axis or keep state as quat. See also: MathVec3 · MathMat4 · Math Library Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"f926262cb382ed25da60b8e4456f4639cb45456a42ba7b64a4ee92d62f868b81"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathRandom.md::0000","path":"engine/reference/core/math/MathRandom.md","title":"core/math/MathRandom.js","description":"","kind":"reference","source":"engine/core/math/MathRandom.js","updated":"","headings":["core/math/MathRandom.js","Functions","mulberry32(seed)","splitmix32(seed)","xorshift128(seed)","pcg32(seed)","legacyLcgAdvanceState32(state)","legacyLcgStateToFloat01(state)","setRandomSeed(seed)","resetRandomSeed()","random()","randomRange(min, max)","randomInt(min, max)","randomBool(probability = 0.5)","randomSign()","uniformDistribution(min = 0, max = 1, rng = defaultRng)","normalDistribution(mean = 0, stdDev = 1, rng = defaultRng)","exponentialDistribution(lambda = 1, rng = defaultRng)","poissonDistribution(lambda, rng = defaultRng)","binomialDistribution(n, p, rng = defaultRng)","triangularDistribution(min, max, mode, rng = defaultRng)","gammaDistribution(shape, scale = 1, rng = defaultRng)","betaDistribution(alpha, beta, rng = defaultRng)","logNormalDistribution(mean = 0, stdDev = 1, rng = defaultRng)","cauchyDistribution(x0 = 0, gamma = 1, rng = defaultRng)","paretoDistribution(alpha, xMin = 1, rng = defaultRng)","weightedRandom(weights, rng = defaultRng)","randomElement(array, rng = defaultRng)","shuffle(array, rng = defaultRng)","shuffleInPlace(array, rng = defaultRng)","sample(array, n, rng = defaultRng)","sampleWithReplacement(array, n, rng = defaultRng)","reservoirSample(stream, k, rng = defaultRng)","randomOnCircle(rng = defaultRng)","randomInCircle(rng = defaultRng)","randomOnSphere(rng = defaultRng)","randomInSphere(rng = defaultRng)","randomOnHemisphereCosine(normal, rng = defaultRng)","randomInTriangle(v0, v1, v2, rng = defaultRng)","randomInCone(direction, halfAngle, rng = defaultRng)","haltonSequence(index, base)","halton2D(index)","halton3D(index)","r2Sequence(index)","r3Sequence(index)","fibonacciSphere(index, total, rotation = 0)","fibonacciSpherePoints(count, rotation = 0)","fibonacciDisk(index, total)","poissonDiskSampling(width, height, minDist, maxAttempts = 30, rng = defaultRng)","Notes & Examples","Basic usage","Vectors and directions","Procedural generation (seeded)","Shuffle and pick","Serialization (network sync)","Gotchas","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Seeded random number generation for deterministic simulations, procedural generation, and networked games. Uses a xorshift128+ algorithm with 128 bit state. Each instance is independent and serializable. Basic usage Vectors and directions Procedural generation (seeded) Shuffle and pick Serialization (network sync) Gotchas Don't use : It's not seeded and differs across browsers. Seed 0 : Valid but produces a specific sequence; use larger seeds (timestamps, hashes) for variety. Threading : Each is NOT thread safe; create per thread instances with different seeds derived from a root RNG. See also: Math Library · MathVec3 Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"ba3a9137876e9528c23f1092c5615f1a21ba9ec683bb6ea5435470542786f06d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathRay.md::0000","path":"engine/reference/core/math/MathRay.md","title":"core/math/MathRay.js","description":"","kind":"reference","source":"engine/core/math/MathRay.js","updated":"","headings":["core/math/MathRay.js","Functions","rayCreate(origin, direction)","rayFromPoints(a, b)","rayFromScreen(ndcX, ndcY, invViewProj)","rayClosestPointToPoint(ray, point)","rayDistanceToPoint(ray, point)","rayDistanceSqToPoint(ray, point)","rayClosestPointToRay(ray1, ray2)","rayIntersectSphere(ray, center, radius)","rayIntersectAABB(ray, aabbMin, aabbMax)","rayIntersectPlane(ray, planeNormal, planeD)","rayIntersectTriangle(ray, v0, v1, v2)","rayIntersectCapsule(ray, capA, capB, radius)","rayIntersectOBB(ray, boxCenter, boxAxes, halfExtents)","rayTransformMat4(ray, m)","rayEquals(a, b, eps = EPSILON)","rayClone(ray)","rayAt(ray, t)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"53efcacbef5609e4c60a9a7dc39a568301af851f92633677fc5ca10686d1aae7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathRect2.md::0000","path":"engine/reference/core/math/MathRect2.md","title":"core/math/MathRect2.js","description":"","kind":"reference","source":"engine/core/math/MathRect2.js","updated":"","headings":["core/math/MathRect2.js","Functions","rect2FromPoints(points)","rect2Intersection(a, b)","rect2DistanceToPoint(r, x, y)","rect2ApproxEquals(a, b, eps = 1e-6)","rect2Create(minX, minY, maxX, maxY)","rect2FromCenterSize(cx, cy, w, h)","rect2FromPositionSize(x, y, w, h)","rect2Zero()","rect2Clone(r)","rect2Copy(out, r)","rect2CenterX(r)","rect2CenterY(r)","rect2Center(r)","rect2Width(r)","rect2Height(r)","rect2Size(r)","rect2Area(r)","rect2Perimeter(r)","rect2AspectRatio(r)","rect2IsEmpty(r)","rect2IsFinite(r)","rect2ContainsPoint(r, x, y)","rect2ContainsPointV(r, p)","rect2ContainsRect(outer, inner)","rect2IntersectsRect(a, b)","rect2ExpandPoint(r, x, y)","rect2ExpandPointV(r, p)","rect2Merge(a, b)","rect2Grow(r, amount)","rect2GrowV(r, ax, ay)","rect2Translate(r, dx, dy)","rect2Scale(r, sx, sy)","rect2ClampPoint(r, x, y)","rect2ClampPointV(r, p)","rect2DistanceToPointV(r, p)","rect2GetCorners(r)","rect2Equals(a, b)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"6797eb2b9f64e3b5a927e5fc93ba82703569767e01136603b6013375e3d39ee5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathRegistry.md::0000","path":"engine/reference/core/math/MathRegistry.md","title":"core/math/MathRegistry.js","description":"","kind":"reference","source":"engine/core/math/MathRegistry.js","updated":"","headings":["core/math/MathRegistry.js","Functions","mathRegistryEntries(filters = {})","mathRegistryById(id, registry = MATHREGISTRY)","mathRegistryFunctionsForModule(moduleId, registry = MATHREGISTRY)","mathRegistryReport(registry = MATHREGISTRY)","mathRegistryManifest(registry = MATHREGISTRY)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathRegistry.js inspectable metadata for stable MathEngine modules and functions. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"8e706b60822f61a68336bbc37378e19b41a6b9a6d2e005b0871e5b90d9db154e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathRootAlgebra.md::0000","path":"engine/reference/core/math/MathRootAlgebra.md","title":"core/math/MathRootAlgebra.js","description":"","kind":"reference","source":"engine/core/math/MathRootAlgebra.js","updated":"","headings":["core/math/MathRootAlgebra.js","Functions","rootAlgebraMask(n)","rootAlgebraDimension(n)","rootAlgebraGeneratorName(index)","rootAlgebraBasisName(mask, n = 4)","rootAlgebraFormatElement(element, n = 4)","rootAlgebraSquare(n, basisMask)","rootAlgebraMultiply(n, leftMask, rightMask)","rootAlgebraTraceMultiply(n, leftMask, rightMask)","rootAlgebraReverseMaskBits(mask, n)","rootAlgebraEncodedMultiply(n, leftMask, rightMask, options = {})","rootAlgebraEncodedTrace(n, leftMask, rightMask, options = {})","rootAlgebraGenerateTable(n, multiply = rootAlgebraMultiply)","rootAlgebraCompileExecutionPlan(n, options = {})","rootAlgebraEvaluateExecutionPlan(plan, left, right = null)","rootAlgebraExecutionPlanWGSL(plan, options = {})","rootAlgebraValidate(n, options = {})","rootAlgebraPropertyReport(n, options = {})","rootAlgebraFindSimpleZeroDivisors(n, options = {})","rootAlgebraSearchEncodedMultipliers(n, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. Generate a branch free WGSL product or square directly from a validated plan. <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"9de44ed93039f6158be40439f66891dfbaacf68c4ab9c0afe85169cf6f587ef8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathScalar.md::0000","path":"engine/reference/core/math/MathScalar.md","title":"core/math/MathScalar.js","description":"","kind":"reference","source":"engine/core/math/MathScalar.js","updated":"","headings":["core/math/MathScalar.js","Functions","nearlyEqual(a, b, absEps = EPSILON, relEps = EPSILON)","safeDiv(numerator, denominator, fallback = 0)","gcd(a, b)","lcm(a, b)","normalizeRange(min, max)","clampRange(value, min, max)","rangeContains(value, min, max, inclusive = true)","rangeOverlap(aMin, aMax, bMin, bMax, inclusive = true)","rangeIntersection(aMin, aMax, bMin, bMax)","rangeUnion(aMin, aMax, bMin, bMax)","splitRange(min, max, segments)","degToRad(deg)","radToDeg(rad)","clamp(x, min, max)","saturate(x)","lerp(a, b, t)","inverseLerp(a, b, x)","remap(x, inMin, inMax, outMin, outMax)","remapClamped(x, inMin, inMax, outMin, outMax)","smoothstep(e0, e1, x)","smootherstep(e0, e1, x)","step(edge, x)","pulse(a, b, x)","fract(x)","mod(x, y)","wrap(x, min, max)","sign(x)","signNonZero(x)","approxEqual(a, b, eps = EPSILON)","approxZero(x, eps = EPSILON)","isFiniteNumber(value)","finiteNumber(value, fallback = 0)","snap(x, grid)","snapFloor(x, grid)","snapCeil(x, grid)","roundTo(x, stepSize = 1)","floorTo(x, stepSize = 1)","ceilTo(x, stepSize = 1)","wrapAngle(angle)","wrapAnglePositive(angle)","angleDiff(a, b)","lerpAngle(a, b, t)","angleBetween(a, b)","min3(a, b, c)","max3(a, b, c)","min4(a, b, c, d)","max4(a, b, c, d)","minArray(arr)","maxArray(arr)","moveToward(current, target, maxDelta)","damp(current, target, smoothing, dt)","springDamp(current, target, velocity, smoothTime, dt)","pingPong(t, length)","repeat(t, length)","deltaAngle(current, target)","moveTowardAngle(current, target, maxDelta)","inverseSqrt(x)","fma(a, b, c)","bias(x, b)","gain(x, g)","almostIdentity(x, threshold, value)","Constants","Notes & Examples","Basic range operations","Mapping and wrapping","Easing functions","Gotchas","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathScalar.js Scalar utility functions Depends on: MathConstants.js Functions Constants <! HUMAN NOTES Notes & Examples Scalar (single number) math utilities: clamping, interpolation, stepping, and common easing functions. These are pure functions that return new scalars. Basic range operations Mapping and wrapping Easing functions Gotchas Division by zero : and handle equal edges gracefully (return 0 or start respectively), but check your inputs for logic errors. Precision : For very large ranges, prefer the variants or use double precision temporaries. See also: Math Library Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"cbdae0809294ebe4d2154f54367db62afc8134a08ddfe8cca5279fbee9edf5b3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathSignal.md::0000","path":"engine/reference/core/math/MathSignal.md","title":"core/math/MathSignal.js","description":"","kind":"reference","source":"engine/core/math/MathSignal.js","updated":"","headings":["core/math/MathSignal.js","Functions","fft(real, imag = null)","ifft(real, imag)","rfft(input)","powerSpectrum(real, imag)","magnitudeSpectrum(real, imag)","phaseSpectrum(real, imag)","fftFrequencies(n, sampleRate)","rfftFrequencies(n, sampleRate)","fft2D(data, width, height)","ifft2D(real, imag, width, height)","hannWindow(n)","hammingWindow(n)","blackmanWindow(n)","blackmanHarrisWindow(n)","kaiserWindow(n, beta = 5)","gaussianWindow(n, sigma = 0.4)","triangularWindow(n)","flatTopWindow(n)","rectangularWindow(n)","applyWindow(signal, window)","signalEnergy(signal)","signalMean(signal)","signalRms(signal)","signalPeakReport(signal)","zeroCrossingCount(signal, options = {})","zeroCrossingRate(signal, options = {})","signalSummaryReport(signal, options = {})","resampleLengthForRate(sampleCount, sourceSampleRate, targetSampleRate)","resampleNearest(signal, targetLength)","resampleLinear(signal, targetLength)","movingAverage(signal, windowSize)","exponentialMovingAverage(signal, alpha = 0.3)","medianFilter(signal, windowSize)","savitzkyGolayFilter(signal)","butterworthLowpass1(cutoffFreq, sampleRate)","butterworthHighpass1(cutoffFreq, sampleRate)","iirFilter(signal, b, a)","firFilter(signal, coefficients)","firLowpassCoeffs(cutoffFreq, sampleRate, numTaps)","firHighpassCoeffs(cutoffFreq, sampleRate, numTaps)","firBandpassCoeffs(lowFreq, highFreq, sampleRate, numTaps)","convolve(signal, kernel)","convolveSame(signal, kernel)","convolveFFT(signal, kernel)","crossCorrelation(signal1, signal2)","autocorrelation(signal)","normalizedCrossCorrelation(signal1, signal2)","stft(signal, windowSize, hopSize, windowFn = hannWindow)","istft(frames, windowSize, hopSize, outputLength)","spectrogram(signal, windowSize, hopSize, windowFn = hannWindow)","melFilterbank(numFilters, fftSize, sampleRate, lowFreq = 0, highFreq = null)","applyMelFilterbank(spectrum, filterbank)","mfcc(signal, sampleRate, numCoeffs = 13, numFilters = 26, windowSize = 512, hopSize = 256)","generateSine(frequency, sampleRate, duration, amplitude = 1)","generateCosine(frequency, sampleRate, duration, amplitude = 1)","generateSquare(frequency, sampleRate, duration, amplitude = 1)","generateSawtooth(frequency, sampleRate, duration, amplitude = 1)","generateTriangle(frequency, sampleRate, duration, amplitude = 1)","generateWhiteNoise(sampleRate, duration, amplitude = 1)","generateChirp(startFreq, endFreq, sampleRate, duration, amplitude = 1)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathSignal.js FFT and Signal Processing FFT, window functions, filters, convolution, spectral analysis Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"8d9e1e8cc8c5f3d1097dad0db047937809407c812781d091598c946101e913b8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathSphericalHarmonics.md::0000","path":"engine/reference/core/math/MathSphericalHarmonics.md","title":"core/math/MathSphericalHarmonics.js","description":"","kind":"reference","source":"engine/core/math/MathSphericalHarmonics.js","updated":"","headings":["core/math/MathSphericalHarmonics.js","Functions","shZero()","shClone(sh)","shFromColor(r, g, b)","shEvaluateBasis(dir)","shEvaluateBasisL1(dir)","shEvaluate(sh, dir)","shIrradiance(sh, normal)","shProject(directions, colors)","shAdd(a, b)","shScale(sh, s)","shLerp(a, b, t)","shAccumulate(out, sh, weight)","shConvolve(sh, kernel)","shWindow(sh, windowWidth)","shRotate(sh, mat3)","shFromCubemap(faces)","shToGPUBuffer(sh)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create zero SH (9 RGB coefficients = 27 floats) Clone SH coefficients Create SH from constant color (ambient only, L0 band) Evaluate 9 SH basis functions for a direction [x,y,z] (must be normalized) Evaluate 4 SH basis functions (L0+L1 only, cheaper) Evaluate RGB color from SH coefficients at a direction Evaluate irradiance (diffuse lighting) from SH at a surface normal Project directional samples onto SH coefficients Parameters: (number[][]) — Array of normalized [x,y,z] directions (number[][]) — Array of [r,g,b] color samples Returns: 27 element SH coefficients Add two SH: out = a + b Scale SH by scalar Lerp between two SH Accumulate: out += sh weight (in place) Convolve SH with per band kernel (e.g., cosine lobe for diffuse) Parameters: (Float32Array) — Input SH (27 floats) (number[]) — Per band kernel [k0, k1, k2] for L0, L1, L2 Returns: Convolved SH Apply Hanning window to reduce ringing 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) Parameters: (Float32Array) — Input SH (27 floats) (Float32Array number[]) — 3x3 rotation matrix (column major) Returns: Rotated SH Project 6 face cubemap to SH Returns: 27 element SH Convert SH to Float32Array suitable for GPU uniform upload (already is Float32Array) <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix,","contentHash":"3438202111ffb09f682402ced7678c255889d034ab081677f23869f4b68e13e8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathSphericalHarmonics.md::0001","path":"engine/reference/core/math/MathSphericalHarmonics.md","title":"core/math/MathSphericalHarmonics.js","description":"","kind":"reference","source":"engine/core/math/MathSphericalHarmonics.js","updated":"","headings":["core/math/MathSphericalHarmonics.js","Functions","shZero()","shClone(sh)","shFromColor(r, g, b)","shEvaluateBasis(dir)","shEvaluateBasisL1(dir)","shEvaluate(sh, dir)","shIrradiance(sh, normal)","shProject(directions, colors)","shAdd(a, b)","shScale(sh, s)","shLerp(a, b, t)","shAccumulate(out, sh, weight)","shConvolve(sh, kernel)","shWindow(sh, windowWidth)","shRotate(sh, mat3)","shFromCubemap(faces)","shToGPUBuffer(sh)","Notes & Examples","Math Library Conventions"],"chunkIndex":1,"chunkCount":2,"text":"suitable for GPU uniform upload (already is Float32Array) <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"6002f61d8b064b08d4c731b9d1fc772c19a686ac3b22d24dc0db401b372ccf5c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathStatistics.md::0000","path":"engine/reference/core/math/MathStatistics.md","title":"core/math/MathStatistics.js","description":"","kind":"reference","source":"engine/core/math/MathStatistics.js","updated":"","headings":["core/math/MathStatistics.js","Functions","runningStatsCreate()","runningStatsPush(stats, value)","runningStatsRemove(stats, value)","runningStatsVariance(stats)","runningStatsPopulationVariance(stats)","runningStatsStdDev(stats)","runningStatsMerge(a, b)","runningStatsReset(stats)","runningStatsClone(stats)","statsMean(arr)","statsSum(arr)","statsVariance(arr)","statsPopulationVariance(arr)","statsMin(arr)","statsMax(arr)","statsMedian(arr)","statsPercentile(arr, p)","statsIQR(arr)","emaCreate(alpha = 0.1)","emaPush(ema, value)","emaReset(ema)","windowedStatsCreate(windowSize = 60)","windowedStatsPush(ws, value)","windowedStatsVariance(ws)","windowedStatsReset(ws)","runningStatsMean(stats)","runningStatsCount(stats)","runningStatsMin(stats)","runningStatsMax(stats)","runningStatsRange(stats)","statsStdDev(arr)","statsPopulationStdDev(arr)","statsRange(arr)","emaGet(ema)","windowedStatsMean(ws)","windowedStatsStdDev(ws)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"e857b2a6c238b148969fbabbe57591ce344b87e95cc32df4f9b3f17e74362234"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathValidation.md::0000","path":"engine/reference/core/math/MathValidation.md","title":"core/math/MathValidation.js","description":"","kind":"reference","source":"engine/core/math/MathValidation.js","updated":"","headings":["core/math/MathValidation.js","Functions","finiteNumberReport(value, options = {})","finiteArrayReport(values, options = {})","rangeValidationReport(value, min, max, options = {})","alignmentReport(offset, alignment, options = {})","powerOfTwoReport(value)","histogramValidationReport(histogram, options = {})","probabilityDistributionReport(probabilities, options = {})","typedArrayLayoutReport(view, options = {})","vectorValidationReport(values, options = {})","unitVectorReport(values, options = {})","colorValidationReport(color, options = {})","schemaValidationReport(value, schema, options = {})","assertValidationReport(report, message = 'validation failed')","assertFiniteArray(values, options = {})","assertUnitVector(values, options = {})","assertColor(color, options = {})","assertSchema(value, schema, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathValidation.js reusable finite, range, alignment, histogram, and probability reports. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"e46b665df1d01672d0a404f2ae3107102d072b4e88b5ea461a65385836e9e2ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathVec2.md::0000","path":"engine/reference/core/math/MathVec2.md","title":"core/math/MathVec2.js","description":"","kind":"reference","source":"engine/core/math/MathVec2.js","updated":"","headings":["core/math/MathVec2.js","Functions","vec2SmoothDamp(current, target, currentVelocity, smoothTime, dt, maxSpeed = Infinity)","vec2Refract(incident, normal, eta)","vec2(x = 0, y = 0)","vec2FromAngle(angle, len = 1)","vec2FromArray(arr, offset = 0)","vec2Zero()","vec2One()","vec2Up()","vec2Down()","vec2Left()","vec2Right()","vec2Clone(v)","vec2Copy(out, v)","vec2Set(out, x, y)","vec2Add(a, b)","vec2Sub(a, b)","vec2Mul(a, b)","vec2Div(a, b)","vec2Scale(v, s)","vec2Negate(v)","vec2Inverse(v)","vec2AddInto(out, a, b)","vec2SubInto(out, a, b)","vec2ScaleInto(out, v, s)","vec2ScaleAndAdd(out, a, b, s)","vec2Dot(a, b)","vec2Cross(a, b)","vec2LengthSq(v)","vec2Length(v)","vec2DistanceSq(a, b)","vec2Distance(a, b)","vec2Manhattan(a, b)","vec2Chebyshev(a, b)","vec2Normalize(v)","vec2NormalizeInto(out, v)","vec2SetLength(v, len)","vec2ClampLength(v, min, max)","vec2Limit(v, maxLen)","vec2Lerp(a, b, t)","vec2SmoothStep(a, b, t)","vec2Bezier2(p0, p1, p2, t)","vec2Bezier3(p0, p1, p2, p3, t)","vec2Min(a, b)","vec2Max(a, b)","vec2Clamp(v, min, max)","vec2ClampScalar(v, min, max)","vec2Floor(v)","vec2Ceil(v)","vec2Round(v)","vec2Trunc(v)","vec2Fract(v)","vec2Abs(v)","vec2Sign(v)","vec2Snap(v, step)","vec2SnapV(v, step)","vec2Angle(v)","vec2AngleBetween(a, b)","vec2AngleTo(from, to)","vec2Rotate(v, angle)","vec2RotateAround(v, center, angle)","vec2Perpendicular(v)","vec2PerpendicularCW(v)","vec2Reflect(v, n)","vec2Project(v, onto)","vec2Reject(v, from)","vec2MoveToward(cur, tgt, maxDelta)","vec2Equals(a, b, eps = EPSILON)","vec2IsZero(v, eps = EPSILON)","vec2IsNormalized(v, eps = EPSILON)","vec2IsFinite(v)","vec2Random(scale = 1)","vec2RandomInCircle(r = 1)","vec2RandomInRect(w, h)","vec2RandomInRectCentered(w, h)","vec2ComplexMul(a, b)","vec2ComplexDiv(a, b)","vec2ComplexPow(v, n)","vec2ComplexSqrt(v)","vec2TransformMat2(v, m)","vec2TransformMat3(v, m)","vec2ToString(v, precision = 3)","vec2ToArray(v, out = [], offset = 0)","vec2GetComponent(v, index)","vec2SetComponent(v, index, value)","vec2FromScalar(s)","vec2Infinity()","vec2NegInfinity()","vec2AddScalar(v, s)","vec2SubScalar(v, s)","vec2MulInto(out, a, b)","vec2NegateInto(out, v)","vec2ManhattanLength(v)","vec2SafeNormalize(v, fallback = [0, 1])","vec2LerpInto(out, a, b, t)","vec2LerpUnclamped(a, b, t)","vec2LerpV(a, b, t)","vec2Hermite(p0, t0, p1, t1, t)","vec2CatmullRom(p0, p1, p2, p3, t)","vec2BezierDerivative(p0, p1, p2, p3, t)","vec2DirectionTo(from, to)","vec2Midpoint(a, b)","vec2Slide(v, n)","vec2Bounce(v, n)","vec2FaceForward(v, incident, reference)","vec2Saturate(v)","vec2InverseSqrt(v)","vec2FMA(a, b, c)","vec2Step(edge, v)","vec2StepScalar(edge, v)","vec2SmoothStepV(low, high, v)","vec2PosMod(v, m)","vec2PosModV(v, m)","vec2MinScalar(v, s)","vec2MaxScalar(v, s)","vec2ExactEquals(a, b)","vec2IsNaN(v)","vec2MinComponent(v)","vec2MaxComponent(v)","vec2Sum(v)","vec2Average(v)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"7ed05f92c9e14d2f30a6d25740baca5cb9e9e293c49f27006d29039f82ba1bbd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathVec3.md::0000","path":"engine/reference/core/math/MathVec3.md","title":"core/math/MathVec3.js","description":"","kind":"reference","source":"engine/core/math/MathVec3.js","updated":"","headings":["core/math/MathVec3.js","Functions","vec3Slerp(a, b, t)","vec3SignedAngle(from, to, axis)","vec3RotateX(v, origin, angle)","vec3RotateY(v, origin, angle)","vec3RotateZ(v, origin, angle)","vec3RotateAxis(v, axis, angle)","vec3RandomDirection(scale = 1)","vec3RandomInSphere(radius = 1)","vec3RandomOnSphere(radius = 1)","vec3RandomInHemisphere(normal)","vec3FromSpherical(radius, phi, theta)","vec3ToSpherical(v)","vec3FromCylindrical(radius, theta, y)","vec3ToCylindrical(v)","vec3TransformMat4(v, m)","vec3TransformQuat(v, q)","vec3OrthonormalBasis(n)","vec3Barycentric(a, b, c, u, v)","vec3RotateTowards(current, target, maxRadiansDelta, maxMagnitudeDelta)","vec3SmoothDamp(current, target, currentVelocity, smoothTime, dt, maxSpeed = Infinity)","vec3OrthoNormalize(normal, tangent)","vec3Refract(incident, normal, eta)","vec3OctEncode(n)","vec3OctDecode(uv)","vec3Outer(a, b)","vec3OrthonormalBasisDuff(n)","vec3(x = 0, y = 0, z = 0)","vec3FromArray(arr, offset = 0)","vec3FromVec2(v, z = 0)","vec3FromScalar(s)","vec3Zero()","vec3One()","vec3Up()","vec3Down()","vec3Left()","vec3Right()","vec3Forward()","vec3Back()","vec3Clone(v)","vec3Copy(out, v)","vec3Set(out, x, y, z)","vec3Add(a, b)","vec3Sub(a, b)","vec3Mul(a, b)","vec3Div(a, b)","vec3Scale(v, s)","vec3Negate(v)","vec3Inverse(v)","vec3AddScalar(v, s)","vec3SubScalar(v, s)","vec3AddInto(out, a, b)","vec3SubInto(out, a, b)","vec3MulInto(out, a, b)","vec3ScaleInto(out, v, s)","vec3ScaleAndAdd(out, a, b, s)","vec3NegateInto(out, v)","vec3CrossInto(out, a, b)","vec3Dot(a, b)","vec3Cross(a, b)","vec3Triple(a, b, c)","vec3LengthSq(v)","vec3Length(v)","vec3DistanceSq(a, b)","vec3Distance(a, b)","vec3Manhattan(a, b)","vec3Chebyshev(a, b)","vec3ManhattanLength(v)","vec3Normalize(v)","vec3NormalizeInto(out, v)","vec3SetLength(v, len)","vec3ClampLength(v, min, max)","vec3Limit(v, maxLen)","vec3SafeNormalize(v, fallback = [0, 1, 0])","vec3Lerp(a, b, t)","vec3LerpInto(out, a, b, t)","vec3SmoothStep(a, b, t)","vec3Hermite(p0, t0, p1, t1, t)","vec3Bezier2(p0, p1, p2, t)","vec3Bezier3(p0, p1, p2, p3, t)","vec3CatmullRom(p0, p1, p2, p3, t)","vec3Min(a, b)","vec3Max(a, b)","vec3Clamp(v, min, max)","vec3ClampScalar(v, min, max)","vec3Floor(v)","vec3Ceil(v)","vec3Round(v)","vec3Trunc(v)","vec3Fract(v)","vec3Abs(v)","vec3Sign(v)","vec3Snap(v, step)","vec3AngleBetween(a, b)","vec3Reflect(v, n)","vec3Project(v, onto)","vec3Reject(v, from)","vec3ProjectOnPlane(v, planeNormal)","vec3Slide(v, normal)","vec3MoveToward(cur, tgt, maxDelta)","vec3Equals(a, b, eps = EPSILON)","vec3ExactEquals(a, b)","vec3IsZero(v, eps = EPSILON)","vec3IsNormalized(v, eps = EPSILON)","vec3IsFinite(v)","vec3IsNaN(v)","vec3Random()","vec3RandomInBox(w, h, d)","vec3RandomInBoxCentered(w, h, d)","vec3TransformMat3(v, m)","vec3TransformDirection(v, m)","vec3TransformNormal(v, normalMat)","vec3MinComponent(v)","vec3MaxComponent(v)","vec3Sum(v)","vec3Average(v)","vec3DominantAxis(v)","vec3ToString(v, precision = 3)","vec3ToArray(v, out = [], offset = 0)","vec3GetComponent(v, index)","vec3SetComponent(v, index, value)","vec3ToVec4Point(v)","vec3ToVec4Direction(v)","vec3DirectionTo(from, to)","vec3Midpoint(a, b)","vec3Bounce(v, n)","vec3LerpUnclamped(a, b, t)","vec3LerpV(a, b, t)","vec3FaceForward(v, incident, reference)","vec3Saturate(v)","vec3InverseSqrt(v)","vec3FMA(a, b, c)","vec3Step(edge, v)","vec3StepScalar(edge, v)","vec3SmoothStepV(low, high, v)","vec3PosMod(v, m)","vec3PosModV(v, m)","vec3MinScalar(v, s)","vec3MaxScalar(v, s)","vec3SnapV(v, step)","vec3BezierDerivative(p0, p1, p2, p3, t)","vec3Infinity()","vec3NegInfinity()","Notes & Examples","Two calling conventions","Gotchas","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MathVec3.js 3D Vector operations Depends on: MathConstants.js, MathScalar.js, MathRandom.js Functions <! HUMAN NOTES Notes & Examples A flat, allocation conscious 3D vector library. Vectors are plain arrays (or typed arrays), not class instances — so they serialize, pool, and pass to the GPU without conversion. Two calling conventions Most operations come in two flavours: Pure — returns a new vector: . — writes into an array (zero allocation), ideal for hot loops: . Gotchas on a zero length vector returns s — use when the input may be zero. Equality uses an epsilon ( ); use only when you truly need bit exact comparison. See also: Math Library Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"f5d6879cd0b2743d9ca07cef251505e9a0f7a5e92991ceacecb621c8a99e82a5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MathVec4.md::0000","path":"engine/reference/core/math/MathVec4.md","title":"core/math/MathVec4.js","description":"","kind":"reference","source":"engine/core/math/MathVec4.js","updated":"","headings":["core/math/MathVec4.js","Functions","vec4(x = 0, y = 0, z = 0, w = 1)","vec4FromVec3(v, w = 1)","vec4FromVec2(v, z = 0, w = 1)","vec4FromArray(arr, offset = 0)","vec4Zero()","vec4One()","vec4Clone(v)","vec4Copy(out, v)","vec4Set(out, x, y, z, w)","vec4ToVec3(v)","vec4ToVec2(v)","vec4XYZ(v)","vec4XY(v)","vec4Add(a, b)","vec4Sub(a, b)","vec4Mul(a, b)","vec4Div(a, b)","vec4Scale(v, s)","vec4Negate(v)","vec4Inverse(v)","vec4AddInto(out, a, b)","vec4SubInto(out, a, b)","vec4ScaleInto(out, v, s)","vec4ScaleAndAdd(out, a, b, s)","vec4Dot(a, b)","vec4LengthSq(v)","vec4Length(v)","vec4DistanceSq(a, b)","vec4Distance(a, b)","vec4Normalize(v)","vec4NormalizeInto(out, v)","vec4Lerp(a, b, t)","vec4Min(a, b)","vec4Max(a, b)","vec4Clamp(v, min, max)","vec4ClampScalar(v, min, max)","vec4Floor(v)","vec4Ceil(v)","vec4Round(v)","vec4Abs(v)","vec4PerspectiveDivide(v)","vec4TransformMat4(v, m)","vec4TransformMat4Into(out, v, m)","vec4Equals(a, b, eps = EPSILON)","vec4IsZero(v, eps = EPSILON)","vec4IsFinite(v)","vec4FromRGBA(r, g, b, a = 1)","vec4ToRGBA(v)","vec4FromHex(hex)","vec4ToHex(v)","vec4Premultiply(v)","vec4Unpremultiply(v)","vec4Random()","vec4RandomUnit()","vec4ToString(v, precision = 3)","vec4ToArray(v, out = [], offset = 0)","vec4GetComponent(v, index)","vec4SetComponent(v, index, value)","vec4FromScalar(s)","vec4Infinity()","vec4NegInfinity()","vec4AddScalar(v, s)","vec4SubScalar(v, s)","vec4MulInto(out, a, b)","vec4NegateInto(out, v)","vec4Manhattan(a, b)","vec4Chebyshev(a, b)","vec4ManhattanLength(v)","vec4SetLength(v, len)","vec4ClampLength(v, min, max)","vec4Limit(v, maxLen)","vec4SafeNormalize(v, fallback = [0,0,0,1])","vec4LerpInto(out, a, b, t)","vec4LerpUnclamped(a, b, t)","vec4LerpV(a, b, t)","vec4SmoothStep(a, b, t)","vec4Midpoint(a, b)","vec4Trunc(v)","vec4Fract(v)","vec4Sign(v)","vec4Snap(v, step)","vec4SnapV(v, step)","vec4Saturate(v)","vec4InverseSqrt(v)","vec4FMA(a, b, c)","vec4Step(edge, v)","vec4StepScalar(edge, v)","vec4SmoothStepV(low, high, v)","vec4PosMod(v, m)","vec4PosModV(v, m)","vec4MinScalar(v, s)","vec4MaxScalar(v, s)","vec4DirectionTo(from, to)","vec4ExactEquals(a, b)","vec4IsNormalized(v, eps = EPSILON)","vec4IsNaN(v)","vec4MinComponent(v)","vec4MaxComponent(v)","vec4Sum(v)","vec4Average(v)","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"7ed05f92c9e14d2f30a6d25740baca5cb9e9e293c49f27006d29039f82ba1bbd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MediaTimingMath.md::0000","path":"engine/reference/core/math/MediaTimingMath.md","title":"core/math/MediaTimingMath.js","description":"","kind":"reference","source":"engine/core/math/MediaTimingMath.js","updated":"","headings":["core/math/MediaTimingMath.js","Functions","mediaTimestampUs(value, options = {})","mediaDurationUs(value, options = {})","mediaTimestampReport(sample = {}, options = {})","mediaFrameIndexAtTimestamp(timestamp, options = {})","mediaTimestampForFrameIndex(frameIndex, options = {})","mediaTimelineReport(samples = [], options = {})","mediaDroppedFrameReport(samples = [], options = {})","mediaDriftReport(reference, candidate, options = {})","mediaAvSyncReport(audioSamples = [], videoSamples = [], options = {})","mediaAudioDataTimingReport(audioData = {}, options = {})","mediaColorSpaceReport(videoFrameOrColorSpace = {}, options = {})","mediaQueuePressureReport(queue = {}, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MediaTimingMath.js pure WebCodecs shaped timestamp, cadence, sync, and metadata reports. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"103a2eb972992321714b6669966643f95bbfeb14b0b6b866d944f3727c7a5082"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MemoryLayoutMath.md::0000","path":"engine/reference/core/math/MemoryLayoutMath.md","title":"core/math/MemoryLayoutMath.js","description":"","kind":"reference","source":"engine/core/math/MemoryLayoutMath.js","updated":"","headings":["core/math/MemoryLayoutMath.js","Functions","memoryLayoutAlignmentForKind(kind, fallback = 1)","alignMemoryOffset(offset, alignment)","memoryPaddingForAlignment(offset, alignment)","isMemoryAligned(offset, alignment)","alignedMemoryByteSize(byteSize, alignment)","memoryFieldLayout(fields, options = {})","interleavedVertexLayoutReport(attributes, options = {})","planarBufferLayoutReport(attributes, elementCount, options = {})","aosElementByteOffset(index, stride, fieldOffset = 0, baseOffset = 0)","soaElementByteOffset(index, elementByteSize, baseOffset = 0)","wgslStructLayoutReport(wgslCode)","std140StructLayoutReport(name, fields)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MemoryLayoutMath.js byte alignment, struct, interleaved, planar, WGSL, and std140 layout reports. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"697f30936cbf050af058cc81b0f11296348ee0eed4ed31de313596b9169d6808"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MeshAttributeMath.md::0000","path":"engine/reference/core/math/MeshAttributeMath.md","title":"core/math/MeshAttributeMath.js","description":"","kind":"reference","source":"engine/core/math/MeshAttributeMath.js","updated":"","headings":["core/math/MeshAttributeMath.js","Functions","morphWeightStateReport(value, options = {})","positionBoundsReport(positions, options = {})","morphAttributeDeltasReport(baseValues, morphTargets, morphWeights, options = {})","morphedPositionBoundsReport(basePositions, morphTargets, morphWeights, options = {})","skinnedPositionBoundsReport(bindPositions, jointIndices, jointWeights, skinMatrices, options = {},)","componentTypedArray(componentType)","componentByteSize(componentType)","accessorElementCount(type)","normalizedComponentRange(componentType)","normalizeAccessorComponent(value, componentType)","readAccessorComponent(view, byteOffset, componentType, normalized = false)","accessorPackedByteStride(accessor)","accessorByteLayout(accessor, bufferView = {})","readAccessorArray(source, accessor, bufferView = {}, options = {})","accessorDecodeMetadata(accessor, bufferView = {})","attributeBounds(values, componentCount = 3)","attributeScaleBiasFromBounds(min, max)","meshoptDecodeMetadata(extension = {}, bufferView = {})","indexBounds(indices, vertexCount)","tangentHandedness(tangent, fallback = 1)","tangentFrameFromNormalTangent(normal, tangent, options = {})","gltfBitangentFromTangent(normal, tangent, options = {})","decodeNormalTextureSample(sample, normalScale = 1, options = {})","normalTextureSampleToWorld(sample, normal, tangent, normalScale = 1, options = {})","prepareMikkTSpaceInputGeometry(geometry)","mikkTSpaceReferenceFingerprint(preparedInput, faceTangents = null)","mikkTSpaceReferenceRegistryReport(registry = MIKKREFERENCECORPUSREGISTRY)","mikkTSpaceReferenceProofReport(preparedInput, faceTangents, proof = null, registry = MIKKREFERENCECORPUSREGISTRY)","mikkTSpaceFaceTangentOutputReport(faceTangents, expectedVertexCount, options = {})","applyMikkTSpaceFaceTangents(preparedInput, faceTangents, options = {})","splitGeometryForTangentSpace(geometry, options = {})","tangentSpaceCompatibilityReport(geometry, referenceTangents = null, options = {})","generateTangentsFromGeometry(positions, normals, uvs, indices = null, options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MeshAttributeMath.js glTF style accessor component, stride, tangent frame, and decode helpers. Functions Validate serializable per model morph control state keyed by stable part index. Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"f718bb2772c8b49685fb2c33d850257f7b4ce5cfd7fde90a986d69ab740582e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/MeshMath.md::0000","path":"engine/reference/core/math/MeshMath.md","title":"core/math/MeshMath.js","description":"","kind":"reference","source":"engine/core/math/MeshMath.js","updated":"","headings":["core/math/MeshMath.js","Functions","meshGraphReport(options = {})","peerDegreeReport(options = {})","partitionDetectionReport(options = {})","meshLinkQualityScore(options = {})","peerNeighborScoreReport(peer = {}, options = {})","neighborSelectionReport(options = {})","supernodeScoreReport(options = {})","relaySelectionReport(options = {})","nearestPeerReport(options = {})","gossipFanoutReport(options = {})","redundantPathReport(options = {})","meshHealthReport(options = {})","topologyModeReport(options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MeshMath.js reusable peer graph, neighbor, relay, gossip, and mesh health helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"a011a29d69e6a0bf321409200ddc06edbac2157c9ea2a68b9cbea5a868d36cd5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/NavigationMath.md::0000","path":"engine/reference/core/math/NavigationMath.md","title":"core/math/NavigationMath.js","description":"","kind":"reference","source":"engine/core/math/NavigationMath.js","updated":"","headings":["core/math/NavigationMath.js","Functions","navPoint2(point, options = {})","navDistance2D(a, b, options = {})","navPathLength(waypoints = [], options = {})","navPortalReport(portal, options = {})","navStringPull(portals = [], options = {})","navPathCorridorReport(portals = [], options = {})","navAreaTraversalCost(distance, area = 0, options = {})","navNearestPolyScore(point, polygon, options = {})","navPackPolyRef(ref = {}, options = {})","navUnpackPolyRef(value, options = {})","navSmoothPath(waypoints = [], smoothing = 0.5, options = {})","navSteeringTargetReport(currentPosition, waypoints = [], options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NavigationMath.js pure navigation corridor, path, area cost, and steering reports. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"64d12d3b00103e6bf2ad35c2e1af94a13ab02518d150d12dabf7faeca25f66e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/NetworkMetricMath.md::0000","path":"engine/reference/core/math/NetworkMetricMath.md","title":"core/math/NetworkMetricMath.js","description":"","kind":"reference","source":"engine/core/math/NetworkMetricMath.js","updated":"","headings":["core/math/NetworkMetricMath.js","Functions","networkDurationSeconds(durationMs)","networkRatePerSecond(count, durationMs)","packetsPerSecond(packetCount, durationMs)","bitrateBps(byteCount, durationMs)","throughputBps(byteCount, durationMs)","goodputReport(options = {})","packetLossReport(options = {})","rttSampleMs(options = {})","oneWayLatencyEstimateMs(options = {})","timeoutEstimateMs(estimator = {}, options = {})","rttEstimatorUpdate(sampleRttMs, previous = null, options = {})","quicProbeTimeoutMs(estimator = {}, options = {})","rtpTransitTimeMs(packet = {})","interarrivalJitterUpdate(previousTransitMs, currentTransitMs, previousJitterMs = 0, options = {})","rtpInterarrivalJitterUpdate(previous = null, packet = {})","latencyJitterReport(samplesMs = [])","networkQualityReport(options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NetworkMetricMath.js reusable RTT, jitter, loss, throughput, goodput, and timeout helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"543ad4f47d0d935d5819a78a8612061e7a31ad73e78723f8e364a6f171c4657c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/PacketMath.md::0000","path":"engine/reference/core/math/PacketMath.md","title":"core/math/PacketMath.js","description":"","kind":"reference","source":"engine/core/math/PacketMath.js","updated":"","headings":["core/math/PacketMath.js","Functions","packetSequenceModulo(sequenceBits = PACKETSEQUENCEBITSDEFAULT)","wrapPacketSequence(sequence, sequenceBits = PACKETSEQUENCEBITSDEFAULT)","advancePacketSequence(sequence, increment = 1, sequenceBits = PACKETSEQUENCEBITSDEFAULT)","packetSequenceForwardDelta(fromSequence, toSequence, sequenceBits = PACKETSEQUENCEBITSDEFAULT)","packetSequenceSignedDelta(fromSequence, toSequence, sequenceBits = PACKETSEQUENCEBITSDEFAULT)","comparePacketSequence(leftSequence, rightSequence, sequenceBits = PACKETSEQUENCEBITSDEFAULT)","isPacketSequenceNewer(candidateSequence, baselineSequence, sequenceBits = PACKETSEQUENCEBITSDEFAULT)","packetSequenceWindowReport(sequence, windowStart, windowSize, sequenceBits = PACKETSEQUENCEBITSDEFAULT)","packetAckRangeReport(packetNumbers = [], options = {})","packetMissingRangeReport(options = {})","packetPayloadBudgetReport(options = {})","packetFragmentPlan(payloadBytes, options = {})","packetReassemblyReport(fragments = [], options = {})","packetFlightReport(packets = [])","packetSendWindowReport(options = {})","packetLossCandidateReport(sentPackets = [], options = {})","quicPacketNumberEncodingBytes(packetNumber, largestAcknowledgedPacket = null)","quicDecodeTruncatedPacketNumber(largestReceivedPacket, truncatedPacketNumber, packetNumberBits)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PacketMath.js reusable packet sequence, ACK range, fragmentation, flight, and loss helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"c402f831ec1ee6832db3ef7e096c50d16a73744909cbdf60806d995dafcbc85a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/ProfileMath.md::0000","path":"engine/reference/core/math/ProfileMath.md","title":"core/math/ProfileMath.js","description":"","kind":"reference","source":"engine/core/math/ProfileMath.js","updated":"","headings":["core/math/ProfileMath.js","Functions","latencyStatsReport(samplesMs, options = {})","frameBudgetReport(frameTimeMs, options = {})","profileStageReport(stages, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProfileMath.js reusable latency, frame budget, and stage profile summaries. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"99dd79374ec06d54c801f54e4e490d177c50313324bee31945df69460a16ea2b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/QuantMath.md::0000","path":"engine/reference/core/math/QuantMath.md","title":"core/math/QuantMath.js","description":"","kind":"reference","source":"engine/core/math/QuantMath.js","updated":"","headings":["core/math/QuantMath.js","Functions","quantizationStep(range, maxValue = QUANTINT16MAX)","quantizationMaxAbsoluteError(range, maxValue = QUANTINT16MAX)","quantizeSignedFloat(value, range, maxValue = QUANTINT16MAX)","dequantizeSignedFloat(quantized, range, maxValue = QUANTINT16MAX)","quantizeSignedFloatToInt16(value, range)","dequantizeSignedInt16ToFloat(quantized, range)","quantizeSignedFloatToInt8(value, range)","dequantizeSignedInt8ToFloat(quantized, range)","quantizeSignedFloatArrayToInt16(values, range)","dequantizeSignedInt16ArrayToFloat32(quantized, range)","quantizeSignedFloatArrayToInt8(values, range)","dequantizeSignedInt8ArrayToFloat32(quantized, range)","quantizeUnitFloatToUint16(value)","dequantizeUint16ToUnitFloat(quantized)","quantizeUnitFloatArrayToUint16(values)","dequantizeUint16ArrayToFloat32(quantized)","quantizeVec2ToInt16(value, range)","dequantizeVec2FromInt16(quantized, range)","quantizeVec3ToInt16(value, range)","dequantizeVec3FromInt16(quantized, range)","signedQuantizationMaxValue(bitDepth = 16)","unsignedQuantizationMaxValue(bitDepth = 16)","quantizeSignedFloatArray(values, range, bitDepth = 16)","dequantizeSignedFloatArray(quantized, range, bitDepth = 16)","quantizeRange(value, min, max, bitDepth = 16, fallback = 0)","dequantizeRange(quantized, min, max, bitDepth = 16, fallback = 0)","quantizeRangeArray(values, min, max, bitDepth = 16)","dequantizeRangeArray(quantized, min, max, bitDepth = 16)","quantizeVec2(value, range, bitDepth = 16)","dequantizeVec2(quantized, range, bitDepth = 16)","quantizeVec3(value, range, bitDepth = 16)","dequantizeVec3(quantized, range, bitDepth = 16)","quantizeColor(color, bitDepth = 8)","dequantizeColor(quantized, bitDepth = 8)","quantizeColorRGBA8(color)","dequantizeColorRGBA8(quantized)","quantizeNormal(normal)","dequantizeNormal(packed)","deltaQuantize(values, range, bitDepth = 16)","deltaDequantize(packed)","quantizationErrorReport(source, decoded, tolerance = 0)","quaternionOrientationErrorReport(source, decoded, toleranceRadians = 0)","adaptiveQuantize(values, options = {})","adaptiveDequantize(packed)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: QuantMath.js reusable scalar and array quantization primitives. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"e24b8d8fe680d6c4839b25f4b656fcf2950b4a3fac0bbe166598e731bdb18e29"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/QueueMath.md::0000","path":"engine/reference/core/math/QueueMath.md","title":"core/math/QueueMath.js","description":"","kind":"reference","source":"engine/core/math/QueueMath.js","updated":"","headings":["core/math/QueueMath.js","Functions","queueDepthReport(options = {})","queueDrainTimeMs(options = {})","queueDelayReport(options = {})","queueDrainReport(options = {})","tokenBucketRefill(tokens, options = {})","tokenBucketConsume(options = {})","singleRateThreeColorMarkerReport(options = {})","leakyBucketReport(options = {})","queueBudgetReport(options = {})","fairShareRateReport(options = {})","rateRampReport(options = {})","queueBackpressureReport(options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: QueueMath.js reusable queue depth, delay, bucket, share, ramp, and backpressure helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"c3c837da82a16410ecc62242cb26e97c623936a73b53c2921f161b39c2bdce68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/RadioMath.md::0000","path":"engine/reference/core/math/RadioMath.md","title":"core/math/RadioMath.js","description":"","kind":"reference","source":"engine/core/math/RadioMath.js","updated":"","headings":["core/math/RadioMath.js","Functions","linearToDecibels(ratio)","decibelsToLinear(decibels)","milliwattsToDbm(milliwatts)","dbmToMilliwatts(dbm)","wattsToDbm(watts)","dbmToWatts(dbm)","dbmToDbw(dbm)","dbwToDbm(dbw)","snrDb(signalDbm, noiseDbm)","snrLinear(signalWatts, noiseWatts)","thermalNoiseFloorDbm(bandwidthHz, options = {})","receiverSensitivityDbm(options = {})","freeSpacePathLossDb(options = {})","logDistancePathLossDb(options = {})","receivedPowerDbm(options = {})","linkBudgetReport(options = {})","channelCapacityBps(bandwidthHz, options = {})","requiredSnrForCapacityDb(capacityBps, bandwidthHz)","rssiQualityScore(rssiDbm, options = {})","snrQualityScore(snrValueDb, options = {})","channelOverlapReport(aCenterHz, aBandwidthHz, bCenterHz, bBandwidthHz)","interferencePowerDbm(powersDbm = [])","signalInterferenceNoiseRatioDb(signalDbm, noiseDbm, interferenceDbm = -Infinity)","interferenceScore(interferenceDbm, signalDbm, options = {})","radioLinkQualityReport(options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RadioMath.js reusable RF power, noise, path loss, channel, and link budget helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"b983dcee73cd53484a128f4c6c5eee035042516bfa5494464a304b94dc9fe1eb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/RobustNumericMath.md::0000","path":"engine/reference/core/math/RobustNumericMath.md","title":"core/math/RobustNumericMath.js","description":"","kind":"reference","source":"engine/core/math/RobustNumericMath.js","updated":"","headings":["core/math/RobustNumericMath.js","Functions","float64Bits(value)","float64FromBits(bits)","float64Classify(value)","float64NextAfter(value, direction)","float64Ulp(value)","float64UlpDistance(left, right)","compensatedSum(values)","pairwiseSum(values)","stableSumReport(values)","cancellationReport(left, right, operation = 'subtract')","orientation2DReport(a, b, c, options = {})","robustNumericPolicyReport(values)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RobustNumericMath.js floating point policy, stable sums, cancellation, and filtered predicates. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"613795f8f62840d7c108b28d59ab5ebba485049c00f0af8fef27492e7ff6d835"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/SIMDLayoutMath.md::0000","path":"engine/reference/core/math/SIMDLayoutMath.md","title":"core/math/SIMDLayoutMath.js","description":"","kind":"reference","source":"engine/core/math/SIMDLayoutMath.js","updated":"","headings":["core/math/SIMDLayoutMath.js","Functions","simdLaneShape(shape = 'f32x4')","simdVectorByteSize(shape = 'f32x4')","simdLaneByteOffset(shape = 'f32x4', vectorIndex = 0, laneIndex = 0, baseOffset = 0)","simdVectorAlignmentReport(shape = 'f32x4', byteOffset = 0, options = {})","simdChunkPlan(elementCount, shape = 'f32x4')","simdLaneMask(shape = 'f32x4', enabledLanes = 'all')","simdTailLaneMask(elementCount, shape = 'f32x4')","simdSoALayoutReport(componentCount, elementCount, options = {})","simdAoSToSoA(vectors, options = {})","simdSoAToAoS(soa, options = {})","simdScalarFallbackReport(elementCount, shape = 'f32x4', options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SIMDLayoutMath.js WebAssembly style v128 lane metadata and SoA/AoS layout helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"a69e1e6a85b8a949ebc4a126de2b282432a502320e542f1241e73a8237fa6e0f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/SamplingMath.md::0000","path":"engine/reference/core/math/SamplingMath.md","title":"core/math/SamplingMath.js","description":"","kind":"reference","source":"engine/core/math/SamplingMath.js","updated":"","headings":["core/math/SamplingMath.js","Functions","sampleRateReport(sampleRate = DEFAULTSAMPLERATE)","sampleIndexForTime(seconds, sampleRate = DEFAULTSAMPLERATE, options = {})","sampleTimeForIndex(index, sampleRate = DEFAULTSAMPLERATE, options = {})","sampleWindowReport(options = {})","sampleFrameWindowReport(sampleCount, windowSize, hopSize, options = {})","sampleRateConversionReport(sampleCount, sourceSampleRate, targetSampleRate)","samplePlaybackRateReport(bufferSampleRate, contextSampleRate, playbackRate = 1, options = {})","spatialBilinearSampleReport(grid, width, height, x, y, options = {})","spatialTrilinearSampleReport(grid, width, height, depth, x, y, z, options = {})","catmullRomSample(p0, p1, p2, p3, t)","catmullRomSampleReport(samples, x, options = {})","spatialBicubicSampleReport(grid, width, height, x, y, options = {})","spatialAreaSampleReport(grid, width, height, area = {}, options = {})","stratifiedSampleGridReport(columns, rows, options = {})","weightedSampleDistributionReport(weights, options = {})","discreteImportanceSampleReport(weights, u, options = {})","blueNoiseSampleSetReport(points, options = {})","sobol2DSample(index)","lowDiscrepancySequenceReport(count, options = {})","multiJitteredSampleGridReport(size, options = {})","sampleSetUniformityReport(points, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SamplingMath.js pure sample grid, time window, and sample rate report helpers. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"ed027daf229bcb1fcef8cb0e93ccbee54875e704ec5db3296c1810e1e38cb312"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/SceneQueryMath.md::0000","path":"engine/reference/core/math/SceneQueryMath.md","title":"core/math/SceneQueryMath.js","description":"","kind":"reference","source":"engine/core/math/SceneQueryMath.js","updated":"","headings":["core/math/SceneQueryMath.js","Functions","sceneQueryHitReport(hit, options = {})","sceneQueryHitListReport(hits, options = {})","sceneQueryFilterReport(query = {}, target = {}, options = {})","sceneQuerySweptAabbReport(movingMin, movingMax, staticMin, staticMax, delta, options = {})","sceneQueryAabbOverlapReport(aMin, aMax, bMin, bMax, options = {})","sceneQuerySpherePenetrationReport(centerA, radiusA, centerB, radiusB, options = {})","sceneQueryContactNormalReport(normal, options = {})","sceneQueryConvexRadiusReport(radius, options = {})","sceneQueryBroadphasePairScore(aMin, aMax, bMin, bMax, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SceneQueryMath.js pure ray/overlap/sweep query reports for engine callers. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"58a1dbd60aab81ec04e5b3fd829504197547f13774c44a7a913a757e9a8744db"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/SignalQualityMath.md::0000","path":"engine/reference/core/math/SignalQualityMath.md","title":"core/math/SignalQualityMath.js","description":"","kind":"reference","source":"engine/core/math/SignalQualityMath.js","updated":"","headings":["core/math/SignalQualityMath.js","Functions","signalLevelQualityScore(valueDb, options = {})","signalDeliveryQualityScore(options = {})","signalLatencyQualityScore(rttMs, options = {})","signalJitterQualityScore(jitterMs, options = {})","signalBitrateQualityScore(bitrateBps, options = {})","signalQualityReport(options = {})","webrtcStatsSignalReport(stats, options = {})","signalQualityTrendReport(samples = [], options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SignalQualityMath.js reusable signal/link health scoring for radio and WebRTC diagnostics. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"4381888df8a5fd8c75f18b29508333a911a7ed7b14747069373f2f99cf481a23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/SpatialHash.md::0000","path":"engine/reference/core/math/SpatialHash.md","title":"core/math/SpatialHash.js","description":"","kind":"reference","source":"engine/core/math/SpatialHash.js","updated":"","headings":["core/math/SpatialHash.js","Classes","class SpatialHash","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes SpatialHash.js Fast spatial queries for particles and entities Uses a grid based hash for O(1) average case neighbor queries. Method Signature Summary Get cell key for a position Clear all entries Insert an object with position Remove an object Update object position Query all objects within radius of a point Query all objects in a cell Get total object count <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"bd4cd56640246e8619a45e9032871b6a1f3a62c1fd2b3b7afb6f6f67a7e7be9d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/SpatialHashCompute.md::0000","path":"engine/reference/core/math/SpatialHashCompute.md","title":"core/math/SpatialHashCompute.js","description":"","kind":"reference","source":"engine/core/math/SpatialHashCompute.js","updated":"","headings":["core/math/SpatialHashCompute.js","Classes","class SpatialHashCompute","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize the compute system Rebuild the spatial hash from particles Get buffers for use in other shaders Load configuration from engine.cfg section Destroy GPU resources <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"39fbdffa76b5ef2f3e9d520f1fce5c258bbcbcce5faed07176cee6a74f280658"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/TensorShapeMath.md::0000","path":"engine/reference/core/math/TensorShapeMath.md","title":"core/math/TensorShapeMath.js","description":"","kind":"reference","source":"engine/core/math/TensorShapeMath.js","updated":"","headings":["core/math/TensorShapeMath.js","Functions","normalizeTensorShape(shape, options = {})","tensorElementCount(shape, options = {})","tensorDTypeByteSize(dtype)","contiguousStrides(shape, options = {})","tensorIndexToOffset(indices, strides, options = {})","tensorOffsetToIndices(offset, shape, options = {})","broadcastShapes(...inputShapes)","broadcastReport(inputShapes)","unidirectionalBroadcastShape(shapeFrom, shapeTo)","blockwiseBroadcastReport(shapeFrom, shapeTo)","reshapeReport(inputShape, targetShape, options = {})","tensorLayoutReport(shape, options = {})","tensorBufferSizeReport(shape, dtype = 'float32', options = {})","reductionShape(shape, axes, options = {})","matmulShapeReport(shapeA, shapeB)","elementwiseShapeReport(inputShapes)","tensorGraphMemoryReport(tensors, options = {})","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TensorShapeMath.js reusable tensor shape, broadcast, stride, dtype, and graph memory reports. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"e9ffe6ce6a7a3fb7ba5b5de8ce90c851bc914190aada43e88dfd82d619611c25"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/TextMetricMath.md::0000","path":"engine/reference/core/math/TextMetricMath.md","title":"core/math/TextMetricMath.js","description":"","kind":"reference","source":"engine/core/math/TextMetricMath.js","updated":"","headings":["core/math/TextMetricMath.js","Functions","textGraphemeSegments(text, options = {})","textGraphemeBoundaries(text, options = {})","textCursorAdvance(text, offset = 0, direction = 1, options = {})","textRunMetricReport(text, options = {})","textBidiRunReport(text, options = {})","textLineBreakOpportunityReport(text, options = {})","textLineWrapReport(text, maxWidth = Infinity, options = {})","textTruncateReport(text, maxWidth = Infinity, options = {})","textBaselineReport(metrics = {}, options = {})","textSelectionRects(wrapReport, start = 0, end = start, options = {})","glyphAtlasPlacementReport(glyphs = [], options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TextMetricMath.js grapheme, text run, wrap, baseline, selection, and glyph atlas reports. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"31b1d443307358f0838b9462e62c24872a68cfca4c1e4d48d10f541a446a72a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/TextureMath.md::0000","path":"engine/reference/core/math/TextureMath.md","title":"core/math/TextureMath.js","description":"","kind":"reference","source":"engine/core/math/TextureMath.js","updated":"","headings":["core/math/TextureMath.js","Functions","uvWrap(uv, min = [0, 0], max = [1, 1])","uvClamp(uv, min = [0, 0], max = [1, 1])","uvMirror(uv)","tileUV(uv, scale = [1, 1], offset = [0, 0])","textureTransformUV(uv, transform = {})","atlasUVTransform(x, y, width, height, atlasWidth, atlasHeight = atlasWidth)","textureMipExtent3D(width, height = width, depth = 1, mipLevel = 0)","atlasUV(uv, transform)","atlasPaddedExtent(width, height = width, padding = 1)","atlasContentRect(x, y, width, height, padding = 1)","atlasPaddedRectFromContent(x, y, width, height, padding = 1)","atlasPaddedArea(width, height, padding = 1)","atlasRegionUVs(x, y, width, height, atlasWidth, atlasHeight = atlasWidth)","virtualTexturePageGrid(pageTableWidth = 2048, pageTableHeight = pageTableWidth)","virtualTexturePageId(pageX, pageY, pageTableWidth = 2048, pageTableHeight = pageTableWidth)","virtualTexturePageCoord(pageId, pageTableWidth = 2048, pageTableHeight = pageTableWidth)","virtualTexturePageCoordFromUV(uv, pageTableWidth = 2048, pageTableHeight = pageTableWidth)","virtualTexturePhysicalPageGrid(cacheWidth = 4096, pageSize = 256, cacheHeight = cacheWidth)","virtualTexturePhysicalPageOrigin(slotIndex, cacheWidth = 4096, pageSize = 256, cacheHeight = cacheWidth)","virtualTexturePhysicalUV(uv, physicalPage, { pageTableWidth = 2048, pageTableHeight = pageTableWidth, pageSize = 256, cacheWidth = 4096, cacheHeight = cacheWidth, } = {})","virtualTexturePageTableEntry(pageId, physicalLocation, { pageTableWidth = 2048, pageTableHeight = pageTableWidth, pageSize = 256, resident = 1, reserved = 0, } = {})","virtualTextureFeedbackBufferLayout(pageTableWidth = 2048, pageTableHeight = pageTableWidth, bytesPerFlag = 4)","virtualTextureFeedbackBufferByteSize(pageTableWidth = 2048, pageTableHeight = pageTableWidth, bytesPerFlag = 4)","virtualTextureFeedbackIndex(pageId, pageTableWidth = 2048, pageTableHeight = pageTableWidth)","compactVirtualTextureFeedback(feedbackData, { pageTableWidth = 2048, pageTableHeight = pageTableWidth, maxRequests = Infinity, residentPages = null, } = {})","pixelToUV(pixel, textureSize, centered = false)","uvToPixel(uv, textureSize, centered = false)","triplanarWeights(normal, sharpness = 1)","textureMipLevelCount(width, height = width, depth = 1, maxMipLevels = Infinity)","textureMipExtent(width, height, mipLevel = 0)","textureMipByteSize(width, height, bytesPerPixel = 4, mipLevels = 1, depthOrArrayLayers = 1)","textureFormatBlockInfo(format = 'rgba8unorm', fallbackBytesPerPixel = 4)","textureFormatFamily(format = 'rgba8unorm')","textureFormatFeature(format = 'rgba8unorm')","textureFormatAlphaMode(format = 'rgba8unorm')","textureFormatIsSupported(format = 'rgba8unorm', features = null)","textureDefaultTranscodeTargets({ needsAlpha = true, preferSrgb = false } = {})","textureBytesPerPixel(format = 'rgba8unorm', fallbackBytesPerPixel = 4)","textureFormatBitsPerPixel(format = 'rgba8unorm', fallbackBytesPerPixel = 4)","textureMipBlockExtent(width, height, format = 'rgba8unorm', mipLevel = 0)","textureMipBlockExtent3D(width, height, depth = 1, format = 'rgba8unorm', mipLevel = 0)","textureFormatMipByteSize(width, height, format = 'rgba8unorm', mipLevels = 1, depthOrArrayLayers = 1)","textureDescriptorByteSize(descriptor = {})","textureContainerLevelByteSize({ width, height = width, depth = 1, format = 'rgba8unorm', mipLevel = 0, layerCount = 1, faceCount = 1, } = {})","textureKtxLevelAlignment(format = 'rgba8unorm', supercompressionScheme = 0)","alignByteOffset(byteOffset, alignment = 1)","textureKtxMipPadding(byteOffset, format = 'rgba8unorm', supercompressionScheme = 0)","textureKtxSupercompressionSchemeInfo(supercompressionScheme = 0)","textureKtxSupercompressionLevelReport({ byteLength = 0, uncompressedByteLength = byteLength, supercompressionScheme = 0, expectedUncompressedByteLength = null, faceCount = 1, layerCount = 1, } = {})","textureKtxSupercompressionGlobalDataRange({ byteOffset = 0, byteLength = 0, precedingByteEnd = 0, supercompressionScheme = 0, } = {})","textureKtxSupercompressionPolicy({ supercompressionScheme = 0, levels = [], expectedUncompressedByteLengths = null, sgdByteOffset = 0, sgdByteLength = 0, precedingByteEnd = 0, faceCount = 1, layerCount = 1, } = {})","textureContainerImageLayout({ width, height = width, depth = 1, format = 'rgba8unorm', mipLevel = 0, layerCount = 1, faceCount = 1, } = {})","textureContainerImageByteOffset(layout, layer = 0, face = 0, zSlice = 0)","textureWebGpuUploadLayout({ width, height = width, depthOrArrayLayers = 1, format = 'rgba8unorm', mipLevel = 0, offset = 0, bytesPerRowAlignment = 1, copyBufferToTexture = false, } = {})","textureKtxLevelLayout({ width, height = width, depth = 1, format = 'rgba8unorm', levelCount = textureMipLevelCount(width, height, depth)","textureMemorySavingsRatio(width, height, compressedFormat, referenceFormat = 'rgba8unorm', mipLevels = 1)","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, } = {})","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, } = {})","textureRankTranscodeTargets({ candidates = null, needsAlpha = true, preferSrgb = false, ...options } = {})","textureSelectTranscodeTarget(options = {})","textureStreamingPriorityScore({ priority = 0, distance = Infinity, lastUsedFrame = 0, frameIndex = 0, distanceScale = 0.01, recencyScale = 0.1, distanceWeight = 10, recencyWeight = 5, } = {})","mipLevelFromPixelSize(pixelSize, maxMipLevel = Infinity)","textureFade(distance, fadeStart, fadeEnd)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TextureMath.js shared UV, atlas, format, and mip pyramid helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"bf9db4454d6406f5da8a386770d61289b6000af96e386f0e0acf26f9cf4767ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/UILayoutMath.md::0000","path":"engine/reference/core/math/UILayoutMath.md","title":"core/math/UILayoutMath.js","description":"","kind":"reference","source":"engine/core/math/UILayoutMath.js","updated":"","headings":["core/math/UILayoutMath.js","Functions","uiCssUnitMetadata(unit, context = {})","uiCssMathFunctionReport(value, context = {})","uiLayoutValueReport(value, context = {})","uiPercentageBasisReport(value, basis, options = {})","uiViewportUnitReport(value, viewport = {}, options = {})","uiSafeAreaInsetReport(insets = {}, options = {})","uiVisualViewportReport(observed = {}, options = {})","uiLayoutClampReport(value, minValue, maxValue, context = {})","uiBoxConstraintReport(style = {}, context = {})","uiFlexBasisReport(style = {}, context = {})","uiFitContentReport(options = {})","uiIntrinsicSizePolicyReport(value = 'auto', options = {})","uiGridTrackSizingReport(trackList = [], options = {})","uiResponsiveStepReport(value, steps = [], options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: UILayoutMath.js pure CSS/UI length, constraint, and responsive layout reports. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"649957df0888b7bac94ac69ddb7f158a84f27d592335015fec0814945ac1ade1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/UnionFind.md::0000","path":"engine/reference/core/math/UnionFind.md","title":"core/math/UnionFind.js","description":"","kind":"reference","source":"engine/core/math/UnionFind.js","updated":"","headings":["core/math/UnionFind.js","Classes","class UnionFind","class VoxelUnionFind extends UnionFind","class HybridConnectivity","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Reset all elements to be their own component Find the root of element x with path compression Union two components by rank Check if two elements are in the same component Get the size of the component containing x Get all unique component roots Get number of distinct components Get all elements in the same component as x Union Find specialized for 3D voxel grids Method Signature Summary Convert 3D position to linear index Convert linear index to 3D position Check if position is within grid bounds Get 6 connected neighbor indices Add a voxel and update connectivity Remove a voxel NOTE: This may require recomputation Union Find doesn't support efficient splits Check if a voxel is connected to anchor Get all floating (unanchored) voxel indices Get floating components as separate groups Combines GPU flood fill for initial/full recomputes with CPU Union Find for incremental updates Method Signature Summary Initialize from voxel data Add a voxel (fast incremental) Remove a voxel (may trigger recompute) Process any pending recomputes Check if voxel is anchored Get floating voxels Get floating components <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"2fea60ebfafcf9591f979ee948dcf8daa94fc58dc3a20445920de30e1e9e2957"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/UnitMath.md::0000","path":"engine/reference/core/math/UnitMath.md","title":"core/math/UnitMath.js","description":"","kind":"reference","source":"engine/core/math/UnitMath.js","updated":"","headings":["core/math/UnitMath.js","Functions","angleToRadians(value, unit = 'rad')","radiansToAngle(radians, unit = 'rad')","secondsToFrames(seconds, frameRate = DEFAULTFRAMERATE)","framesToSeconds(frames, frameRate = DEFAULTFRAMERATE)","millisecondsToFrames(milliseconds, frameRate = DEFAULTFRAMERATE)","framesToMilliseconds(frames, frameRate = DEFAULTFRAMERATE)","secondsToSamples(seconds, sampleRate = DEFAULTSAMPLERATE)","samplesToSeconds(samples, sampleRate = DEFAULTSAMPLERATE)","sampleIndexAtTime(seconds, sampleRate = DEFAULTSAMPLERATE)","samplesToMilliseconds(samples, sampleRate = DEFAULTSAMPLERATE)","millisecondsToSamples(milliseconds, sampleRate = DEFAULTSAMPLERATE)","bpmToSecondsPerBeat(bpm = DEFAULTBPM)","secondsPerBeatToBpm(secondsPerBeat)","beatsToSeconds(beats, bpm = DEFAULTBPM)","secondsToBeats(seconds, bpm = DEFAULTBPM)","frequencyToPeriodSeconds(frequencyHz)","periodSecondsToFrequencyHz(periodSeconds)","frequencyToWavelengthMeters(frequencyHz, waveSpeed = SPEEDOFLIGHT)","wavelengthMetersToFrequencyHz(wavelengthMeters, waveSpeed = SPEEDOFLIGHT)","gainToDb(gain, floorDb = -Infinity)","powerRatioToDb(powerRatio, floorDb = -Infinity)","frequencyRatioToCents(ratio, floorCents = -Infinity)","cssPixelsToDevicePixels(cssPixels, devicePixelRatio = 1)","devicePixelsToCssPixels(devicePixels, devicePixelRatio = 1)","worldUnitsToGridIndex(worldValue, cellSize = 1, origin = 0)","gridIndexToWorldUnits(gridIndex, cellSize = 1, origin = 0, centered = false)","worldUnitsToChunkIndex(worldValue, chunkCells = 16, cellSize = 1, origin = 0)","chunkIndexToWorldUnits(chunkIndex, chunkCells = 16, cellSize = 1, origin = 0, centered = false)","worldUnitsToLocalChunkIndex(worldValue, chunkCells = 16, cellSize = 1, origin = 0)","degreesToRadians(degrees)","radiansToDegrees(radians)","degreesToTurns(degrees)","turnsToDegrees(turns)","radiansToTurns(radians)","turnsToRadians(turns)","degreesToGradians(degrees)","gradiansToDegrees(gradians)","radiansToGradians(radians)","gradiansToRadians(gradians)","turnsToGradians(turns)","gradiansToTurns(gradians)","secondsToMilliseconds(seconds)","millisecondsToSeconds(milliseconds)","secondsToMinutes(seconds)","minutesToSeconds(minutes)","minutesToHours(minutes)","hoursToMinutes(hours)","hoursToSeconds(hours)","secondsToHours(seconds)","daysToSeconds(days)","secondsToDays(seconds)","bpmToHz(bpm = DEFAULTBPM)","hzToBpm(frequencyHz)","hzToKhz(frequencyHz)","khzToHz(frequencyKHz)","dbToGain(db)","dbToPowerRatio(db)","centsToFrequencyRatio(cents)","bitsToBytes(bits)","bytesToBits(bytes)","bytesToKiB(bytes)","kiBToBytes(kibibytes)","bytesToMiB(bytes)","miBToBytes(mebibytes)","bytesToGiB(bytes)","giBToBytes(gibibytes)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: UnitMath.js deterministic scalar unit conversion helpers. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"704ed8fb59888c282d6be66bcc1377b7d1b296a635c1f7b1d721923b4d755cdd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/VideoMath.md::0000","path":"engine/reference/core/math/VideoMath.md","title":"core/math/VideoMath.js","description":"","kind":"reference","source":"engine/core/math/VideoMath.js","updated":"","headings":["core/math/VideoMath.js","Functions","videoSequenceReport(frames, options = {})","videoTemporalBlendFrame(referenceFrame, candidateFrame, amount = 0.5, options = {})","videoSceneListReport(frames, options = {})","videoKeyframePlanReport(frames, options = {})","videoMotionEntropyReport(frames, options = {})","videoTemporalEntropyReport(frames, options = {})","videoThumbnailCandidateReport(frames, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VideoMath.js pure sequence level video/frame math over ImageData like frames. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"ff371f5b84715b7aefc4b56e6ddc9030775ceb6819d00667780b7eeb46dac168"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/WGSLRegistry.md::0000","path":"engine/reference/core/math/WGSLRegistry.md","title":"core/math/WGSLRegistry.js","description":"","kind":"reference","source":"engine/core/math/WGSLRegistry.js","updated":"","headings":["core/math/WGSLRegistry.js","Functions","wgslRegistryEntries(filters = {})","wgslRegistryById(id, registry = WGSLREGISTRY)","wgslMirrorsForChunk(chunkId, mirrors = WGSLMIRRORREGISTRY)","wgslRegistryReport(chunks = WGSLCHUNKREGISTRY, mirrors = WGSLMIRRORREGISTRY, moduleExports = WGSLMODULEEXPORTS, moduleExportClassifications = WGSLMODULEEXPORTCLASSIFICATIONS)","mathRegistryWGSLMirrorReport(mathFunctions = MATHFUNCTIONREGISTRY, wgslMirrors = WGSLMIRRORREGISTRY)","wgslRegistryManifest(chunks = WGSLCHUNKREGISTRY, mirrors = WGSLMIRRORREGISTRY)","Constants","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WGSLRegistry.js metadata for reusable WGSL chunks and CPU/WGSL mirror links. Functions Constants <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"6e3d9b57f990c86cbbd20d46074bccfb41e9e6cb597a8ab640cd4bdf4e323007"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/XRMath.md::0000","path":"engine/reference/core/math/XRMath.md","title":"core/math/XRMath.js","description":"","kind":"reference","source":"engine/core/math/XRMath.js","updated":"","headings":["core/math/XRMath.js","Functions","xrRigidTransformReport(transform = {}, options = {})","xrPoseViewMatrix(transform = {}, options = {})","xrViewProjectionReport(view = {}, options = {})","xrViewerPoseReport(views = [], options = {})","xrReferenceSpaceOffsetReport(baseTransform = {}, offsetTransform = {}, options = {})","xrProjectionDepthRangeReport(depthNear, depthFar)","xrDepthRawToMeters(rawDepth, rawValueToMeters = 1)","xrDepthUvTransformPoint(point = {}, matrix = identity4()","xrDepthSampleIndex(width, height, u, v, options = {})","xrDepthSampleMeters(depthData, width, height, u, v, options = {})","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: XRMath.js pure WebXR shaped pose, view, projection, and depth reports. Functions <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"6dc2ce7b9e8c00bb4e6ac04d2cbb74636133c2e212a83ab6f8b7d547d19edc27"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/math/index.md::0000","path":"engine/reference/core/math/index.md","title":"core/math/index.js","description":"","kind":"reference","source":"engine/core/math/index.js","updated":"","headings":["core/math/index.js","Re-exports","Notes & Examples","Math Library Conventions"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/core/math/index.js Math Utilities Barrel Export Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Math Library Conventions The math library provides vector, matrix, quaternion, and utility operations. All math functions follow consistent patterns: pure functions return new values, variants write to an output parameter (zero allocation), and out parameters come first . Matrices are column major for WebGPU compatibility. Example: Common math operations See also: Math Library","contentHash":"575fbd5421944da4c0c950387fdd87d9192d2407662fed72f208774e95de6451"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/ChunkBufferPool.md::0000","path":"engine/reference/core/memory/ChunkBufferPool.md","title":"core/memory/ChunkBufferPool.js","description":"","kind":"reference","source":"engine/core/memory/ChunkBufferPool.js","updated":"","headings":["core/memory/ChunkBufferPool.js","Classes","class ChunkBufferPool","Functions","getChunkBufferPool()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Pre allocate buffers to avoid cold start allocations Get a voxel buffer (reused or new) Return a voxel buffer to the pool Get a mesh vertex buffer (Float32Array) Return a mesh vertex buffer to the pool Get a mesh index buffer (Uint32Array) Return a mesh index buffer to the pool Clear all pools (for memory pressure situations) Get pool statistics Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5f952157beebb3e965104d093011d5c80b079c31fce9681faffdd1082cfcfef8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/GPUMemoryManager.md::0000","path":"engine/reference/core/memory/GPUMemoryManager.md","title":"core/memory/GPUMemoryManager.js","description":"","kind":"reference","source":"engine/core/memory/GPUMemoryManager.js","updated":"","headings":["core/memory/GPUMemoryManager.js","Classes","class RingBuffer","class BuddyAllocator","class StagingBufferPool","class BindGroupCache","class TextureManager","class GPUMemoryManager","Functions","getGPUMemoryManager(device)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Circular buffer for per frame dynamic data (uniforms, instance data). Wraps around each frame, avoiding buffer creation overhead. Method Signature Summary Begin a new frame mark frame boundary Allocate bytes from the ring buffer Write data to the ring buffer Get the underlying GPU buffer Get statistics Destroy the buffer Buddy allocator for persistent GPU memory (geometry, textures). Handles allocation/deallocation without fragmentation. Method Signature Summary Get tree node index for given order and index within that order Allocate memory from the buddy heap Recursive block allocation Update parent nodes after allocation Free previously allocated memory Recursive block freeing with coalescing Coalesce buddies after freeing Write data to allocated region Allocate and write in one call Get the underlying GPU buffer Get statistics Destroy the buffer Pool of mappable staging buffers for CPU GPU transfers. Avoids creating new buffers for every upload. Method Signature Summary Get a staging buffer for writing Release a staging buffer after use Reclaim buffers that GPU has finished with Get statistics Destroy all buffers Cache for GPUBindGroup objects to avoid redundant creation. Uses content based hashing for deduplication. Method Signature Summary Generate hash key for bind group descriptor Get or create a bind group Evict least recently used entries Clear the cache Get","contentHash":"413c65979a01fb0c92fd1d013914d422e0a3440836f3979d838d141041874bd1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/GPUMemoryManager.md::0001","path":"engine/reference/core/memory/GPUMemoryManager.md","title":"core/memory/GPUMemoryManager.js","description":"","kind":"reference","source":"engine/core/memory/GPUMemoryManager.js","updated":"","headings":["core/memory/GPUMemoryManager.js","Classes","class RingBuffer","class BuddyAllocator","class StagingBufferPool","class BindGroupCache","class TextureManager","class GPUMemoryManager","Functions","getGPUMemoryManager(device)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Method Signature Summary Generate hash key for bind group descriptor Get or create a bind group Evict least recently used entries Clear the cache Get statistics Manages GPU textures with LRU eviction policy. Method Signature Summary Calculate texture memory size Create or get a texture Get texture by ID (marks as recently used) Evict least recently used texture Manually destroy a texture Get statistics Destroy all textures Central GPU memory management facade. Method Signature Summary Initialize all sub managers Begin new frame Allocate uniform data Allocate vertex data (dynamic, per frame) Allocate static geometry Free static geometry Get or create bind group Get comprehensive statistics Log memory report Handle device loss prepare for reinitialization Destroy all resources Functions Get or create GPU memory manager singleton Parameters: (GPUDevice) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"72b99f91cf8c3bde8b41be5277dd2708c2399edbcd337e75ed93d57bf2d5c05e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/HostMemoryManager.md::0000","path":"engine/reference/core/memory/HostMemoryManager.md","title":"core/memory/HostMemoryManager.js","description":"","kind":"reference","source":"engine/core/memory/HostMemoryManager.js","updated":"","headings":["core/memory/HostMemoryManager.js","Classes","class SlabAllocator","class ObjectPool","class SoAContainer","class HostMemoryManager","Functions","createCommonPools(manager = hostMemory)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Linear allocator that resets every frame. Provides zero cost TypedArray views into a pre allocated buffer. Method Signature Summary Align cursor to specified boundary Allocate raw bytes from the slab Allocate from overflow page when main slab is full Allocate a Float32Array view Allocate a Uint32Array view Allocate a Uint8Array view Allocate a 4x4 matrix (16 floats, 64 bytes) Allocate a Vec3 (3 floats, padded to 4 for alignment) Allocate a Vec4 (4 floats) Allocate uniform buffer aligned memory Reset the allocator for a new frame Call this at the START of each frame Get usage statistics Generic object pool for reusable JavaScript objects. Uses LIFO (stack) for hot cache retrieval. Method Signature Summary Create a new object via factory Acquire an object from the pool Release an object back to the pool Expand pool capacity Pre warm the pool by allocating and immediately freeing Get pool statistics Enable debug mode (seals new objects) SoA container for cache efficient mass entity storage. All properties stored in contiguous TypedArrays. Method Signature Summary Allocate a new entity slot Free an entity slot Check if entity is active Get property value for entity Set property value for entity Set all components of a property Get raw array for direct access (faster for bulk operations) Iterate over all active entities Compact the arrays by removing gaps (expensive, use sparingly) Get statistics Central manager for all host memory allocation. Method Signature Summary Create a new slab allocator Get slab by name Create a new object pool Get pool by name Create a new SoA","contentHash":"e81d04767d369a1698b1918ff883f7bd4328e60493367068114b9afde6494cbe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/HostMemoryManager.md::0001","path":"engine/reference/core/memory/HostMemoryManager.md","title":"core/memory/HostMemoryManager.js","description":"","kind":"reference","source":"engine/core/memory/HostMemoryManager.js","updated":"","headings":["core/memory/HostMemoryManager.js","Classes","class SlabAllocator","class ObjectPool","class SoAContainer","class HostMemoryManager","Functions","createCommonPools(manager = hostMemory)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"all host memory allocation. Method Signature Summary Create a new slab allocator Get slab by name Create a new object pool Get pool by name Create a new SoA container Get container by name Reset all frame allocators call at START of each frame End frame processing Get comprehensive memory statistics Log memory report to console Functions Create common pools for game objects Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d0be3e0fc776a079d4f3926d9329a72c39a39fba6d510224a72f8060778e3272"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/MappedBufferRing.md::0000","path":"engine/reference/core/memory/MappedBufferRing.md","title":"core/memory/MappedBufferRing.js","description":"","kind":"reference","source":"engine/core/memory/MappedBufferRing.js","updated":"","headings":["core/memory/MappedBufferRing.js","Classes","class MappedBufferRing","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes MappedBufferRing Efficient GPU data upload with pre mapped buffers Method Signature Summary Initialize the buffer ring Get the size bucket for a given size Create a new mapped buffer Get a mapped buffer of at least the requested size Write data and copy to target buffer Write uniform data efficiently Schedule a buffer to be reclaimed after GPU is done Get statistics Destroy all buffers <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"06177650e4cbc22a1bbcf8d1fee9ade4bbbbf1c106202f21bc7950eaa19f3ca2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/ObjectPool.md::0000","path":"engine/reference/core/memory/ObjectPool.md","title":"core/memory/ObjectPool.js","description":"","kind":"reference","source":"engine/core/memory/ObjectPool.js","updated":"","headings":["core/memory/ObjectPool.js","Classes","class ObjectPool","Functions","acquireVec3(x = 0, y = 0, z = 0)","releaseVec3(v)","acquireChunkInfo(cx, cy, cz)","releaseChunkInfo(info)","acquireRayResult()","releaseRayResult(result)","getPoolStats()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Generic object pool with factory function Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5cdfda89c47c94e1d13f2b83f08aa69233bcf68d71da29a033ffd4a004389c88"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/PipelineCache.md::0000","path":"engine/reference/core/memory/PipelineCache.md","title":"core/memory/PipelineCache.js","description":"","kind":"reference","source":"engine/core/memory/PipelineCache.js","updated":"","headings":["core/memory/PipelineCache.js","Classes","class PipelineCache","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes PipelineCache Async pipeline compilation and caching Method Signature Summary Initialize the cache Warmup by compiling multiple pipelines in parallel Create a render pipeline asynchronously Create a compute pipeline asynchronously Create render pipeline synchronously (use only if async not possible) Create compute pipeline synchronously Get a cached render pipeline Get a cached compute pipeline Get a cached bind group layout Check if a render pipeline exists Check if a compute pipeline exists Wait for a pipeline to be ready Get statistics Load configuration from engine.cfg section Destroy all pipelines <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0aaee4b9445293d57f8a0ce9bed93b344d346cf186b4a2912abd161c633d45aa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/RenderBundleCache.md::0000","path":"engine/reference/core/memory/RenderBundleCache.md","title":"core/memory/RenderBundleCache.js","description":"","kind":"reference","source":"engine/core/memory/RenderBundleCache.js","updated":"","headings":["core/memory/RenderBundleCache.js","Classes","class RenderBundleCache","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes RenderBundleCache Manages render bundles for voxel terrain Method Signature Summary Initialize the render bundle cache Mark bundles as needing rebuild (call when chunks change) Check if bundles need rebuild Build opaque terrain render bundle Build water/transparent render bundle Execute the opaque bundle Execute the water bundle Get statistics Load configuration from engine.cfg section Destroy cached bundles <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0ca0ad029b153e3244fa41e501b25140f42457e050a2bcde112da8fc6c636b64"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/SubChunkBufferPool.md::0000","path":"engine/reference/core/memory/SubChunkBufferPool.md","title":"core/memory/SubChunkBufferPool.js","description":"","kind":"reference","source":"engine/core/memory/SubChunkBufferPool.js","updated":"","headings":["core/memory/SubChunkBufferPool.js","Classes","class SubChunkBufferPool","Functions","getBufferPool()","initBufferPool(device)","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes SubChunkBufferPool Manages GPU buffer reuse for sub chunk meshes Method Signature Summary Initialize the buffer pool Acquire a vertex buffer of at least the specified size Acquire an index buffer of at least the specified size Acquire an indirect draw buffer Return a vertex buffer to the pool Return an index buffer to the pool Return an indirect buffer to the pool Return all buffers from a sub chunk mesh result Update hit rate statistic Update total bytes pooled Clear all pooled buffers (call on context loss or cleanup) Get pool statistics Functions Get the global buffer pool instance Initialize the global buffer pool Parameters: (GPUDevice) — No description in source JSDoc. Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2025ed27f37dd84f8086e8aa93ed62ce56d1454506abdd43a72a73ed2ce461be"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/UniformBufferRing.md::0000","path":"engine/reference/core/memory/UniformBufferRing.md","title":"core/memory/UniformBufferRing.js","description":"","kind":"reference","source":"engine/core/memory/UniformBufferRing.js","updated":"","headings":["core/memory/UniformBufferRing.js","Classes","class UniformBufferRing","class FrameUniformManager","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes UniformBufferRing Rotating uniform buffers Method Signature Summary Initialize the buffer ring Get the buffer to write to this frame Get the current buffer index Advance to the next buffer (call at end of frame) Write data to the current buffer Create or get a bind group for the current buffer Get buffer at specific index Get all buffers Destroy all buffers FrameUniformManager Manages per frame uniforms with automatic rotation Method Signature Summary Initialize the manager Create a new uniform ring Get a ring by name Write to a ring's current buffer Get the write buffer for a ring Advance all rings to next buffer (call at end of frame) Get frame index Destroy all rings <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a098736be119e93bdd7ad7d87809c3d88fe269928e150a8ee333e1cd82f70536"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/VertexPool.md::0000","path":"engine/reference/core/memory/VertexPool.md","title":"core/memory/VertexPool.js","description":"","kind":"reference","source":"engine/core/memory/VertexPool.js","updated":"","headings":["core/memory/VertexPool.js","Classes","class VertexPool","class FaceOrientedVertexPool","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes VertexPool Manages a large persistent vertex buffer with bucket allocation Method Signature Summary Initialize the vertex pool Allocate a bucket for a chunk Free a bucket Update vertex data for a bucket Sort chunks front to back for early Z optimization Apply back face culling based on camera direction Masks out faces that point away from camera Upload draw commands to GPU Get visible bucket count for rendering Get bucket info for a chunk Iterate over visible buckets for rendering Get statistics Destroy the vertex pool FaceOrientedVertexPool Vertex pool with 6 sub buckets per chunk for true back face culling Each chunk gets 6 smaller buckets, one per face direction Method Signature Summary Allocate buckets for a chunk (one per face direction) Free all buckets for a chunk Update face data for a chunk Update visible faces based on camera direction (true back face culling) Render all visible chunks with true back face culling Only renders face pools that are visible from camera direction Load configuration from engine.cfg section <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"757ce348b40bd3a677b551c128d6b24d2de33b1ee8c36495dae9da8ec1af249d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/memory/index.md::0000","path":"engine/reference/core/memory/index.md","title":"core/memory/index.js","description":"","kind":"reference","source":"engine/core/memory/index.js","updated":"","headings":["core/memory/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d8d758c24c38954d2f840906dfe671d9b301b4daaf356f151a9089cdd6c7e9f5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/platform/InputPlumbing.md::0000","path":"engine/reference/core/platform/InputPlumbing.md","title":"core/platform/InputPlumbing.js","description":"","kind":"reference","source":"engine/core/platform/InputPlumbing.js","updated":"","headings":["core/platform/InputPlumbing.js","Functions","installPointerAndKeyboardListeners(options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/platform/MainLoop.md::0000","path":"engine/reference/core/platform/MainLoop.md","title":"core/platform/MainLoop.js","description":"","kind":"reference","source":"engine/core/platform/MainLoop.js","updated":"","headings":["core/platform/MainLoop.js","Functions","createMainLoop(options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/platform/PlatformCanvas.md::0000","path":"engine/reference/core/platform/PlatformCanvas.md","title":"core/platform/PlatformCanvas.js","description":"","kind":"reference","source":"engine/core/platform/PlatformCanvas.js","updated":"","headings":["core/platform/PlatformCanvas.js","Functions","createCanvasSurface(gpuDevice, canvasTarget, options = {})","createViewportManager(gpuDevice, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/profiler/DualRNG.md::0000","path":"engine/reference/core/profiler/DualRNG.md","title":"core/profiler/DualRNG.js","description":"","kind":"reference","source":"engine/core/profiler/DualRNG.js","updated":"","headings":["core/profiler/DualRNG.js","Classes","class DualRNG","Functions","positionHash(x, y, z, seed = 0)","getGlobalRNG()","initGlobalRNG(seed)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes DualRNG Manages synchronized and visual RNGs Method Signature Summary Reset synchronized RNG to initial state Call this when resyncing with server Reset visual RNG (optional, for testing) Get synchronized random number [0, 1) MUST be called in same order on all clients! Synchronized random integer in range [min, max] inclusive Synchronized random float in range [min, max) Synchronized random boolean with given probability Synchronized random item from array Synchronized shuffle (Fisher Yates) Get visual random number [0, 1) Does NOT need to sync across clients Visual random integer in range [min, max] inclusive Visual random float in range min, max) Visual random boolean Visual random item from array Get deterministic random value for a position Same position always returns same value Get deterministic int at position Get deterministic float at position Get deterministic bool at position Get current state for sync verification Verify sync state matches another client Enable call logging for debugging sync issues Get sync call log for comparison with other clients Compare sync logs from two clients to find divergence point Functions Position based hash for deterministic randomness at specific coordinates Useful for terrain generation where you need same result for same position Get or create global DualRNG instance Initialize global RNG with seed (call from game init) <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see [API Reference Standard.","contentHash":"e05f535668e6797946c64dcb4b46f4e8cf1a655407630c5d0c02b093588a7ec4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/profiler/FrameBudgetManager.md::0000","path":"engine/reference/core/profiler/FrameBudgetManager.md","title":"core/profiler/FrameBudgetManager.js","description":"","kind":"reference","source":"engine/core/profiler/FrameBudgetManager.js","updated":"","headings":["core/profiler/FrameBudgetManager.js","Classes","class FrameBudgetManager","Functions","getFrameBudgetManager()","shouldSkipWork(section)","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes FrameBudgetManager Manages per frame time budgets Method Signature Summary Begin a new frame Begin update section End update section and calculate time spent Begin render section End render section End frame and update statistics Check if we're over the update budget Check if we're over a specific sub budget Get remaining time for a section Get throttle multiplier for a section (0 1) Calculate max work items for this frame based on throttle Queue work for later frames Process queued work within budget Get queue depth Adjust throttles when over budget Gradually restore throttles when under budget Set custom budget for a section Get statistics Reset statistics Functions Get global frame budget manager Quick check if we should skip work this frame Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"17aaf76832d9a6a9dab4a8ca7fe9e438a42ccc66621986a0ccdc2d01559d37a5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/profiler/GameplayProfiler.md::0000","path":"engine/reference/core/profiler/GameplayProfiler.md","title":"core/profiler/GameplayProfiler.js","description":"","kind":"reference","source":"engine/core/profiler/GameplayProfiler.js","updated":"","headings":["core/profiler/GameplayProfiler.js","Classes","class GameplayProfiler","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize with game reference Start profiling session Stop profiling and generate analysis Update call each frame from game loop Get current results Run auto tuning benchmark to find optimal settings for this hardware Get auto tune results for saving Generate config string for engine.cfg [frame budget] section Apply auto tuned settings to game runtime Apply recommendations to game config Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ec3eeb8f4ad3703ff61ed635e22a4b8de1573ee5af1651febd3a61767a7bd517"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/profiler/PerformanceOptimizer.md::0000","path":"engine/reference/core/profiler/PerformanceOptimizer.md","title":"core/profiler/PerformanceOptimizer.js","description":"","kind":"reference","source":"engine/core/profiler/PerformanceOptimizer.js","updated":"","headings":["core/profiler/PerformanceOptimizer.js","Classes","class WorkgroupTuner","class PingPongBuffer","class FrameBudgetManager","class BufferPool","class PerformanceOptimizer","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Get optimal workgroup size for a kernel type Calculate dispatch dimensions Benchmark different workgroup sizes Method Signature Summary Get current read buffer Get current write buffer Swap buffers (call after write is complete) Get buffer by index Get all buffers Method Signature Summary Start frame timing Start a phase End a phase End frame and analyze Check if phase is within budget Get recommended particle count based on budget Get stats Method Signature Summary Allocate a buffer from pool Return buffer to pool Get memory stats Destroy all pooled buffers Method Signature Summary Create or get cached pipeline Create ping pong buffer Get optimal dispatch for kernel Start frame timing End frame and get stats Get comprehensive stats Cleanup Constants — Common workgroup sizes — Buffer strategies — Memory allocation tiers — Frame budget targets <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a7ddd89e007cbbad4bcb929cfe600269a406b9f773b4fc316281993711ac12ab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/profiler/index.md::0000","path":"engine/reference/core/profiler/index.md","title":"core/profiler/index.js","description":"","kind":"reference","source":"engine/core/profiler/index.js","updated":"","headings":["core/profiler/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4e3b6c39aab270430fc1dc27aabe365c161cf75e74ba5984fbb5b80727afeb46"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/profiling/PerformanceAnalyzer.md::0000","path":"engine/reference/core/profiling/PerformanceAnalyzer.md","title":"core/profiling/PerformanceAnalyzer.js","description":"","kind":"reference","source":"engine/core/profiling/PerformanceAnalyzer.js","updated":"","headings":["core/profiling/PerformanceAnalyzer.js","Classes","class PerformanceAnalyzer","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/save/SaveSystem.md::0000","path":"engine/reference/core/save/SaveSystem.md","title":"core/save/SaveSystem.js","description":"","kind":"reference","source":"engine/core/save/SaveSystem.js","updated":"","headings":["core/save/SaveSystem.js","Classes","class SaveSystem","Functions","createLocalStorageAdapter(storage)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0698b18e522b8eb6fd1253b8e820cc581c20d2f3768bfe5d7321214196a1272e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/save/index.md::0000","path":"engine/reference/core/save/index.md","title":"core/save/index.js","description":"","kind":"reference","source":"engine/core/save/index.js","updated":"","headings":["core/save/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4b42f1f3cb73b27718c1bf65faeae5ac2e3a268efc18eaf848ddf83ce90f8a37"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/scheduler/TaskScheduler.md::0000","path":"engine/reference/core/scheduler/TaskScheduler.md","title":"core/scheduler/TaskScheduler.js","description":"","kind":"reference","source":"engine/core/scheduler/TaskScheduler.js","updated":"","headings":["core/scheduler/TaskScheduler.js","Classes","class Job","class WorkerPool","class TaskScheduler","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Represents a unit of work Method Signature Summary Execute the job Get execution duration Cancel the job Pool of Web Workers for parallel job execution Method Signature Summary Initialize workers Submit job to worker pool Dispatch job to specific worker Handle worker message Handle worker error Process queued jobs Get shared memory view for direct worker communication Wait for all pending jobs to complete Get statistics Terminate all workers Main task scheduler with frame budget management Method Signature Summary Initialize scheduler with optional worker pool Register a system for ordered updates Unregister a system Submit a job Submit critical job (must run this frame) Submit high priority job Submit low priority job Submit idle job (only runs during idle time) Submit job to worker pool Begin frame processing Process jobs within frame budget Update registered systems in order End frame processing Check if job dependencies are satisfied Execute a job synchronously Defer old jobs that missed their frame Schedule idle work processing Process idle work Fallback idle processing for browsers without requestIdleCallback Get time remaining in frame budget Check if we're over budget Get queue sizes Get comprehensive statistics Log status report Clear all queues Shutdown scheduler Constants — Template for worker script. Export this and use with URL.createObjectURL. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a48f0aea0c6683a44c8922f062f8233ab74053131138299455cafc2bc9afe3d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/scheduler/index.md::0000","path":"engine/reference/core/scheduler/index.md","title":"core/scheduler/index.js","description":"","kind":"reference","source":"engine/core/scheduler/index.js","updated":"","headings":["core/scheduler/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bc4265417c4cdf21b5ccc0dc21dee846ba407776c652e80a357d440bf2fa26e1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/schema/BrowserRecordContract.md::0000","path":"engine/reference/core/schema/BrowserRecordContract.md","title":"core/schema/BrowserRecordContract.js","description":"","kind":"reference","source":"engine/core/schema/BrowserRecordContract.js","updated":"","headings":["core/schema/BrowserRecordContract.js","Classes","class BrowserRecordContractError extends Error","Functions","createBrowserRecordContract({ schema, legacyKey, currentKey = ${legacyKey}.v2, payloadKey = 'value', validate, maxBytes = 4  1024  1024, } = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared expand contract owner for structured browser key/value records. Classes Method Signature Summary Functions ${legacyKey}.v2 Constants — Shared expand contract owner for structured browser key/value records. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d3449a825599de987d2c54fd8951eb3b06ab0492a0d60feeceabee59e81d53c1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/schema/SchemaEvolutionRegistry.md::0000","path":"engine/reference/core/schema/SchemaEvolutionRegistry.md","title":"core/schema/SchemaEvolutionRegistry.js","description":"","kind":"reference","source":"engine/core/schema/SchemaEvolutionRegistry.js","updated":"","headings":["core/schema/SchemaEvolutionRegistry.js","Classes","class SchemaEvolutionError extends Error","class SchemaEvolutionRegistry","Functions","canonicalSchemaValue(value)","cloneSchemaValue(value)","fingerprintSchemaValue(value)","createSchemaEvolutionRegistry()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Pure registry for explicit schema readers, writers, and migration graphs. It transforms decoded values only and never reads or writes persistence. Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"799f6f891cc3e74e09782aadccdd4c34b9a1898f92b7b4eca2e1bfe3e3727871"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/schema/SchemaValidator.md::0000","path":"engine/reference/core/schema/SchemaValidator.md","title":"core/schema/SchemaValidator.js","description":"","kind":"reference","source":"engine/core/schema/SchemaValidator.js","updated":"","headings":["core/schema/SchemaValidator.js","Classes","class SchemaValidator","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes 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. Method Signature Summary Register a schema. Validate data against a named schema. Validate and return a cleaned copy with defaults applied. Get all registered schema names <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"50a6105cb4bb6ffe80b2afddf54df9f98c63787e2a85740b11cbe68d50f1201a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/schema/index.md::0000","path":"engine/reference/core/schema/index.md","title":"core/schema/index.js","description":"","kind":"reference","source":"engine/core/schema/index.js","updated":"","headings":["core/schema/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a89e686480bebc5858af4fbbd82cd90cd94c85a42b1faf8274566ba68509b653"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/timing/DisplayRefreshEstimator.md::0000","path":"engine/reference/core/timing/DisplayRefreshEstimator.md","title":"core/timing/DisplayRefreshEstimator.js","description":"","kind":"reference","source":"engine/core/timing/DisplayRefreshEstimator.js","updated":"","headings":["core/timing/DisplayRefreshEstimator.js","Classes","class DisplayRefreshEstimator","Functions","createDisplayRefreshEstimator(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8cba5b91b2c35c0ac6567325e10785b270ea58a9a1075e85336e9b2e47e4c21c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/timing/FramePacingController.md::0000","path":"engine/reference/core/timing/FramePacingController.md","title":"core/timing/FramePacingController.js","description":"","kind":"reference","source":"engine/core/timing/FramePacingController.js","updated":"","headings":["core/timing/FramePacingController.js","Classes","class FramePacingController","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Calculate optimal frame timing Determine if we should skip this frame to maintain pacing Calculate sleep time to hit target frame time Precise frame limiter using busy wait for last millisecond Get frame pacing quality score (0 100) <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"75d4ed5a6c0963d61da30c53805fdd2a03c7f4119d734f4b806520d41b7f9198"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/timing/index.md::0000","path":"engine/reference/core/timing/index.md","title":"core/timing/index.js","description":"","kind":"reference","source":"engine/core/timing/index.js","updated":"","headings":["core/timing/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e2be9079f478be5772f31f6a69e8605dc4f9b004e0f2dbe57535a0c55de8cf2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/core/workers/WorkerPool.md::0000","path":"engine/reference/core/workers/WorkerPool.md","title":"core/workers/WorkerPool.js","description":"","kind":"reference","source":"engine/core/workers/WorkerPool.js","updated":"","headings":["core/workers/WorkerPool.js","Classes","class WorkerPool","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Web Worker Pool Multi threaded asset loading and processing Eliminates main thread blocking during heavy operations Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"99c01857e5556664bbe05b1b54a5b6f741963a28337136a3701d9248667f5e68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/ComponentHealer.md::0000","path":"engine/reference/ecs/ComponentHealer.md","title":"ecs/ComponentHealer.js","description":"","kind":"reference","source":"engine/ecs/ComponentHealer.js","updated":"","headings":["ecs/ComponentHealer.js","Classes","class TriangulationContext","Functions","getHealingLog()","clearHealingLog()","healComponent(componentName, data, ctx = new TriangulationContext()","healAndValidate(componentName, data, options = {})","getHealingStats()","batchHealComponents(components, sharedContext = {})","validateComponentData(componentName, data)","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Triangulation context provides multiple sources for inferring values Method Signature Summary Get transform for an entity Check if entity exists Get all entity IDs in scene Functions Heal a component using schema and triangulation Parameters: (string) — Name of the component (object) — Component data to heal (TriangulationContext) — Context for triangulation Returns: { data, healed, healedFields } Heal and validate component data before use This is the main entry point for the healing system Get healing statistics with detailed metrics Batch heal multiple components efficiently Parameters: (Array) — Array of {componentName, data, entityId} (object) — Shared context options Returns: Array of healing results Validate component without healing just check for issues Returns: { isValid, issues } <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2","contentHash":"65bceb210efde0b6fb3e0cbcacc333e8c04057e4ad365b378984d375e9b19808"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/ComponentHealer.md::0001","path":"engine/reference/ecs/ComponentHealer.md","title":"ecs/ComponentHealer.js","description":"","kind":"reference","source":"engine/ecs/ComponentHealer.js","updated":"","headings":["ecs/ComponentHealer.js","Classes","class TriangulationContext","Functions","getHealingLog()","clearHealingLog()","healComponent(componentName, data, ctx = new TriangulationContext()","healAndValidate(componentName, data, options = {})","getHealingStats()","batchHealComponents(components, sharedContext = {})","validateComponentData(componentName, data)","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":1,"chunkCount":2,"text":"by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"43f07324cde9d29530934fdb22f39643ce055bf1cd9f5382a8a7dc43da77b16f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/EntityManager.md::0000","path":"engine/reference/ecs/EntityManager.md","title":"ecs/EntityManager.js","description":"","kind":"reference","source":"engine/ecs/EntityManager.js","updated":"","headings":["ecs/EntityManager.js","Functions","deleteEntity(options)","deleteSelectedEntity(ecsState, options)","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Delete an entity with full cleanup of associated resources. Parameters: (Object) — Deletion options (Object) — ECS world (number) — Entity ID to delete (Array) — Array of spawned entity entries (Map) — Map of entity uniform buffers (Map) — Map of entity bind groups (Object) — Grab state object (optional) (Object) — ECS state object with selectedEntityId and inspectorApi (optional) (Function) — Logger function (optional) Returns: Whether deletion succeeded Delete the currently selected entity. Parameters: (Object) — ECS state with world and selectedEntityId (Object) — Additional options (same as deleteEntity) Returns: Whether deletion succeeded <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark","contentHash":"1ee8aae6188652357795f5915e3132a5b82573f50920924f6b5eba177a2062dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/EntityManager.md::0001","path":"engine/reference/ecs/EntityManager.md","title":"ecs/EntityManager.js","description":"","kind":"reference","source":"engine/ecs/EntityManager.js","updated":"","headings":["ecs/EntityManager.js","Functions","deleteEntity(options)","deleteSelectedEntity(ecsState, options)","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":1,"chunkCount":2,"text":"Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"6a7d2be0b0525a41096b1d4d549368ee24b8c7cb442a06fb456f90a0f58175c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/EntitySchema.md::0000","path":"engine/reference/ecs/EntitySchema.md","title":"ecs/EntitySchema.js","description":"","kind":"reference","source":"engine/ecs/EntitySchema.js","updated":"","headings":["ecs/EntitySchema.js","Functions","normalizeField(fieldDef, value)","normalizeBySchema(schema, value)","getSchemaDefaults(schema)","getCollisionMask(...layerNames)","layersCollide(layerA, maskA, layerB, maskB)","getPhysXFlagsForCollisionMode(mode)","registerComponentSchema(schema)","getRegisteredSchemaNames()","validateComponent(componentName, value)","createDefaultComponent(componentName)","validateTransform(value)","validatePhysicsBody(value)","validateCollider(value)","validateLight(value)","validateCamera(value)","validateRenderable(value)","validateParticleEmitter(value)","validateNavAgent(value)","validatePhysicsChain(value)","createDefaultTransform()","createDefaultPhysicsBody()","createDefaultCollider()","createDefaultLight()","createDefaultCamera()","createDefaultRenderable()","createDefaultPhysicsChain()","createEmptyEntity(id)","createEntitySnapshot(entityId, transform, physicsBody)","createWorldSnapshot(time, frameIndex)","jsonReplacer(key, value)","jsonReviver(key, value)","serializeComponent(componentName, value)","deserializeComponent(componentName, json, healingContext = null)","serializeEntitySnapshot(snapshot)","serializeWorldSnapshot(snapshot)","deserializeWorldSnapshot(json)","lerpVec3(a, b, t)","lerpQuat(a, b, t)","interpolateTransform(a, b, t)","interpolatePhysicsBody(a, b, t)","interpolateEntitySnapshot(a, b, t)","getColliderShapeId(shapeName)","getColliderShapeName(shapeId)","getLightTypeId(typeName)","getLightTypeName(typeId)","getCameraProjectionId(projName)","getEmitterShapeId(shapeName)","Constants","Re-exports","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Normalize a single field value based on its type definition Normalize a component value using its schema definition This is the primary function component files should use Get default values from a schema Helper: Get collision layer mask from layer names Helper: Check if two layer masks collide Helper: Get collision mode flags for PhysX Returns { pairFlags, shapeFlags } for PhysX configuration Register a custom component schema at runtime Allows component files to auto register their schemas Get all registered component schema names Validate and normalize a component value against its schema Create default component data Validate Transform component Validate PhysicsBody component Validate Collider component Validate Light component Validate Camera component Validate Renderable component Validate ParticleEmitter component Validate NavAgent component Validate PhysicsChain component Create default Transform Create default PhysicsBody Create default Collider Create default Light Create default Camera Create default Renderable Create default PhysicsChain Create empty entity Create entity snapshot Create world snapshot JSON replacer function for special values Use with JSON.stringify(obj, jsonReplacer) JSON reviver function for special values Use with JSON.parse(str, jsonReviver) Serialize component to JSON safe object Deserialize component from JSON with optional self healing Parameters: (string) — Component type name (object) — JSON data to deserialize (object) — Optional context for triangulation healing Returns: Deserialized and optionally healed component data Serialize","contentHash":"a7175ecd873cbe63e14f8c7ab4157f338dac70a466404a5c7deb19e5f6eab871"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/EntitySchema.md::0001","path":"engine/reference/ecs/EntitySchema.md","title":"ecs/EntitySchema.js","description":"","kind":"reference","source":"engine/ecs/EntitySchema.js","updated":"","headings":["ecs/EntitySchema.js","Functions","normalizeField(fieldDef, value)","normalizeBySchema(schema, value)","getSchemaDefaults(schema)","getCollisionMask(...layerNames)","layersCollide(layerA, maskA, layerB, maskB)","getPhysXFlagsForCollisionMode(mode)","registerComponentSchema(schema)","getRegisteredSchemaNames()","validateComponent(componentName, value)","createDefaultComponent(componentName)","validateTransform(value)","validatePhysicsBody(value)","validateCollider(value)","validateLight(value)","validateCamera(value)","validateRenderable(value)","validateParticleEmitter(value)","validateNavAgent(value)","validatePhysicsChain(value)","createDefaultTransform()","createDefaultPhysicsBody()","createDefaultCollider()","createDefaultLight()","createDefaultCamera()","createDefaultRenderable()","createDefaultPhysicsChain()","createEmptyEntity(id)","createEntitySnapshot(entityId, transform, physicsBody)","createWorldSnapshot(time, frameIndex)","jsonReplacer(key, value)","jsonReviver(key, value)","serializeComponent(componentName, value)","deserializeComponent(componentName, json, healingContext = null)","serializeEntitySnapshot(snapshot)","serializeWorldSnapshot(snapshot)","deserializeWorldSnapshot(json)","lerpVec3(a, b, t)","lerpQuat(a, b, t)","interpolateTransform(a, b, t)","interpolatePhysicsBody(a, b, t)","interpolateEntitySnapshot(a, b, t)","getColliderShapeId(shapeName)","getColliderShapeName(shapeId)","getLightTypeId(typeName)","getLightTypeName(typeId)","getCameraProjectionId(projName)","getEmitterShapeId(shapeName)","Constants","Re-exports","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":1,"chunkCount":3,"text":"(object) — JSON data to deserialize (object) — Optional context for triangulation healing Returns: Deserialized and optionally healed component data Serialize entity snapshot to JSON safe object Serialize world snapshot to JSON safe object Deserialize world snapshot from JSON Interpolate between two vec3 values Interpolate between two quaternions (simple lerp, not slerp) Interpolate Transform between two states Interpolate PhysicsBody between two states Interpolate entity snapshot between two states Get collider shape ID from name Get collider shape name from ID Get light type ID from name Get light type name from ID Get camera projection ID from name Get emitter shape ID from name Constants — Common field types used across components — Transform component schema — PhysicsBody component schema — Collider shapes — Collider component schema — Light types — Light component schema — Camera projection types — Camera modes — Camera component schema — Renderable component schema — Emitter shapes for particle spawning — ParticleEmitter component schema — NavAgent component schema — Chain physics backends — PhysicsChain component schema (unified: particle chains + rigid chains) mode: \"particle\" = PBD/GPU/PhysX particle chain (formerly PhysicsRope) mode: \"rigid\" = rigid linked chain (formerly PhysicsChain) — Weld constraint types — 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 — Collision modes determines how physics engine handles collisions Maps to PhysX PxPairFlags and shape flags — Predefined collision layers (bitmask) Each entity belongs to one layer (collisionLayer) and can","contentHash":"22f7a25ce4ab1ffb3969d5c4b1bb350813d2cb8c333596188a945420ee95be2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/EntitySchema.md::0002","path":"engine/reference/ecs/EntitySchema.md","title":"ecs/EntitySchema.js","description":"","kind":"reference","source":"engine/ecs/EntitySchema.js","updated":"","headings":["ecs/EntitySchema.js","Functions","normalizeField(fieldDef, value)","normalizeBySchema(schema, value)","getSchemaDefaults(schema)","getCollisionMask(...layerNames)","layersCollide(layerA, maskA, layerB, maskB)","getPhysXFlagsForCollisionMode(mode)","registerComponentSchema(schema)","getRegisteredSchemaNames()","validateComponent(componentName, value)","createDefaultComponent(componentName)","validateTransform(value)","validatePhysicsBody(value)","validateCollider(value)","validateLight(value)","validateCamera(value)","validateRenderable(value)","validateParticleEmitter(value)","validateNavAgent(value)","validatePhysicsChain(value)","createDefaultTransform()","createDefaultPhysicsBody()","createDefaultCollider()","createDefaultLight()","createDefaultCamera()","createDefaultRenderable()","createDefaultPhysicsChain()","createEmptyEntity(id)","createEntitySnapshot(entityId, transform, physicsBody)","createWorldSnapshot(time, frameIndex)","jsonReplacer(key, value)","jsonReviver(key, value)","serializeComponent(componentName, value)","deserializeComponent(componentName, json, healingContext = null)","serializeEntitySnapshot(snapshot)","serializeWorldSnapshot(snapshot)","deserializeWorldSnapshot(json)","lerpVec3(a, b, t)","lerpQuat(a, b, t)","interpolateTransform(a, b, t)","interpolatePhysicsBody(a, b, t)","interpolateEntitySnapshot(a, b, t)","getColliderShapeId(shapeName)","getColliderShapeName(shapeId)","getLightTypeId(typeName)","getLightTypeName(typeId)","getCameraProjectionId(projName)","getEmitterShapeId(shapeName)","Constants","Re-exports","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":2,"chunkCount":3,"text":"handles collisions Maps to PhysX PxPairFlags and shape flags — Predefined collision layers (bitmask) Each entity belongs to one layer (collisionLayer) and can collide with multiple layers (collisionMask) — 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 CONT","contentHash":"bc21a37e7f9904e3976197b38794453a0c5b843357aa6139e992b2a749e26656"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/SceneInit.md::0000","path":"engine/reference/ecs/SceneInit.md","title":"ecs/SceneInit.js","description":"","kind":"reference","source":"engine/ecs/SceneInit.js","updated":"","headings":["ecs/SceneInit.js","Functions","initEcsWorld(options)","createMinimalWorld(options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Initialize ECS world with physics sandbox scene. Parameters: (Object) — Initialization options (Object) — ECS state object to populate (Object) — Config state { roomSize, lightHeight, cameraFar } (Object) — Physics state { gravity, staticFriction, dynamicFriction, restitution } (Object) — Render state { lightBrightness } (string) — World name (default: \"SimWorld\") (number) — Fixed timestep (default: 1/60) (Function) — Optional logger Returns: Created world Create a minimal ECS world without physics sandbox. Parameters: (Object) — Options Returns: Created world <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton","contentHash":"5ee95ab3ddf940e3bec9d826e43b21c6328bc8ea9938a28ccce0784fd17aee7e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/SceneInit.md::0001","path":"engine/reference/ecs/SceneInit.md","title":"ecs/SceneInit.js","description":"","kind":"reference","source":"engine/ecs/SceneInit.js","updated":"","headings":["ecs/SceneInit.js","Functions","initEcsWorld(options)","createMinimalWorld(options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":1,"chunkCount":2,"text":"but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"cdffebf40b8fca0bbb67e6c62195b89fa53e6b3f62531157bd3fc0bdd1a5e6b7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/Camera.md::0000","path":"engine/reference/ecs/components/Camera.md","title":"ecs/components/Camera.js","description":"","kind":"reference","source":"engine/ecs/components/Camera.js","updated":"","headings":["ecs/components/Camera.js","Functions","createCamera(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/Cloth.md::0000","path":"engine/reference/ecs/components/Cloth.md","title":"ecs/components/Cloth.js","description":"","kind":"reference","source":"engine/ecs/components/Cloth.js","updated":"","headings":["ecs/components/Cloth.js","Functions","createCloth(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/Collider.md::0000","path":"engine/reference/ecs/components/Collider.md","title":"ecs/components/Collider.js","description":"","kind":"reference","source":"engine/ecs/components/Collider.js","updated":"","headings":["ecs/components/Collider.js","Functions","createCollider(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/ComponentRegistry.md::0000","path":"engine/reference/ecs/components/ComponentRegistry.md","title":"ecs/components/ComponentRegistry.js","description":"","kind":"reference","source":"engine/ecs/components/ComponentRegistry.js","updated":"","headings":["ecs/components/ComponentRegistry.js","Functions","defineComponentType(config)","getComponentDefinition(name)","listComponentDefinitions()","getComponentSchema(name)","validateComponentSchema(name, value)","createDefaultFromSchema(name)","Re-exports","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get schema for a component from EntitySchema Validate component using EntitySchema Create default component using EntitySchema Re exports , <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"cdc19abc915f647ace7a9ae071d32e9ae10292289f3cd99083568f4e8520affd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/FluidSource.md::0000","path":"engine/reference/ecs/components/FluidSource.md","title":"ecs/components/FluidSource.js","description":"","kind":"reference","source":"engine/ecs/components/FluidSource.js","updated":"","headings":["ecs/components/FluidSource.js","Functions","createFluidSource(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/FluidVolume.md::0000","path":"engine/reference/ecs/components/FluidVolume.md","title":"ecs/components/FluidVolume.js","description":"","kind":"reference","source":"engine/ecs/components/FluidVolume.js","updated":"","headings":["ecs/components/FluidVolume.js","Functions","createFluidVolume(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/Input.md::0000","path":"engine/reference/ecs/components/Input.md","title":"ecs/components/Input.js","description":"","kind":"reference","source":"engine/ecs/components/Input.js","updated":"","headings":["ecs/components/Input.js","Functions","createInput(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/Light.md::0000","path":"engine/reference/ecs/components/Light.md","title":"ecs/components/Light.js","description":"","kind":"reference","source":"engine/ecs/components/Light.js","updated":"","headings":["ecs/components/Light.js","Functions","createLight(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/NavAgent.md::0000","path":"engine/reference/ecs/components/NavAgent.md","title":"ecs/components/NavAgent.js","description":"","kind":"reference","source":"engine/ecs/components/NavAgent.js","updated":"","headings":["ecs/components/NavAgent.js","Functions","createNavAgent(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/NetReplicated.md::0000","path":"engine/reference/ecs/components/NetReplicated.md","title":"ecs/components/NetReplicated.js","description":"","kind":"reference","source":"engine/ecs/components/NetReplicated.js","updated":"","headings":["ecs/components/NetReplicated.js","Functions","createNetReplicated(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/ParticleEmitter.md::0000","path":"engine/reference/ecs/components/ParticleEmitter.md","title":"ecs/components/ParticleEmitter.js","description":"","kind":"reference","source":"engine/ecs/components/ParticleEmitter.js","updated":"","headings":["ecs/components/ParticleEmitter.js","Functions","createParticleEmitter(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/ParticleField.md::0000","path":"engine/reference/ecs/components/ParticleField.md","title":"ecs/components/ParticleField.js","description":"","kind":"reference","source":"engine/ecs/components/ParticleField.js","updated":"","headings":["ecs/components/ParticleField.js","Functions","createParticleField(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/PhysicalMaterial.md::0000","path":"engine/reference/ecs/components/PhysicalMaterial.md","title":"ecs/components/PhysicalMaterial.js","description":"","kind":"reference","source":"engine/ecs/components/PhysicalMaterial.js","updated":"","headings":["ecs/components/PhysicalMaterial.js","Functions","createPhysicalMaterialComponent(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/PhysicsBody.md::0000","path":"engine/reference/ecs/components/PhysicsBody.md","title":"ecs/components/PhysicsBody.js","description":"","kind":"reference","source":"engine/ecs/components/PhysicsBody.js","updated":"","headings":["ecs/components/PhysicsBody.js","Functions","createPhysicsBody(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/PhysicsChain.md::0000","path":"engine/reference/ecs/components/PhysicsChain.md","title":"ecs/components/PhysicsChain.js","description":"","kind":"reference","source":"engine/ecs/components/PhysicsChain.js","updated":"","headings":["ecs/components/PhysicsChain.js","Functions","createPhysicsChain(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/PhysicsCloth.md::0000","path":"engine/reference/ecs/components/PhysicsCloth.md","title":"ecs/components/PhysicsCloth.js","description":"","kind":"reference","source":"engine/ecs/components/PhysicsCloth.js","updated":"","headings":["ecs/components/PhysicsCloth.js","Functions","createPhysicsCloth(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/PhysicsHair.md::0000","path":"engine/reference/ecs/components/PhysicsHair.md","title":"ecs/components/PhysicsHair.js","description":"","kind":"reference","source":"engine/ecs/components/PhysicsHair.js","updated":"","headings":["ecs/components/PhysicsHair.js","Functions","createPhysicsHair(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/PhysicsRope.md::0000","path":"engine/reference/ecs/components/PhysicsRope.md","title":"ecs/components/PhysicsRope.js","description":"","kind":"reference","source":"engine/ecs/components/PhysicsRope.js","updated":"","headings":["ecs/components/PhysicsRope.js","Functions","createPhysicsRope(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/PhysicsSoftBody.md::0000","path":"engine/reference/ecs/components/PhysicsSoftBody.md","title":"ecs/components/PhysicsSoftBody.js","description":"","kind":"reference","source":"engine/ecs/components/PhysicsSoftBody.js","updated":"","headings":["ecs/components/PhysicsSoftBody.js","Functions","createPhysicsSoftBody(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/PhysicsWire.md::0000","path":"engine/reference/ecs/components/PhysicsWire.md","title":"ecs/components/PhysicsWire.js","description":"","kind":"reference","source":"engine/ecs/components/PhysicsWire.js","updated":"","headings":["ecs/components/PhysicsWire.js","Functions","createPhysicsWire(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/Renderable.md::0000","path":"engine/reference/ecs/components/Renderable.md","title":"ecs/components/Renderable.js","description":"","kind":"reference","source":"engine/ecs/components/Renderable.js","updated":"","headings":["ecs/components/Renderable.js","Functions","createRenderable(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/StickmanRagdoll.md::0000","path":"engine/reference/ecs/components/StickmanRagdoll.md","title":"ecs/components/StickmanRagdoll.js","description":"","kind":"reference","source":"engine/ecs/components/StickmanRagdoll.js","updated":"","headings":["ecs/components/StickmanRagdoll.js","Functions","createStickmanRagdoll(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/Transform.md::0000","path":"engine/reference/ecs/components/Transform.md","title":"ecs/components/Transform.js","description":"","kind":"reference","source":"engine/ecs/components/Transform.js","updated":"","headings":["ecs/components/Transform.js","Functions","createTransform(initial)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3e5631d9c749ad51b79ffb053ab7345cb36e66873f8accfb49e592d0eba684ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/TwistedRope.md::0000","path":"engine/reference/ecs/components/TwistedRope.md","title":"ecs/components/TwistedRope.js","description":"","kind":"reference","source":"engine/ecs/components/TwistedRope.js","updated":"","headings":["ecs/components/TwistedRope.js","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"806e1620d610c682b2283f8906f331493fb2336348a8d30c456ba62b4eefee9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/WeldConstraint.md::0000","path":"engine/reference/ecs/components/WeldConstraint.md","title":"ecs/components/WeldConstraint.js","description":"","kind":"reference","source":"engine/ecs/components/WeldConstraint.js","updated":"","headings":["ecs/components/WeldConstraint.js","Functions","createWeldConstraint(initial)","createWeld(parentEntityId, childEntityId, options = {})","isValidWeld(weld)","breakWeld(weld)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a new WeldConstraint component Parameters: (Object) — Initial values Returns: WeldConstraint component data Create a weld constraint between two entities Parameters: (number) — Entity that will receive shapes (number) — Entity whose shapes will be transferred (Object) — Additional options Returns: WeldConstraint component data Check if a weld constraint is valid Parameters: (Object) — WeldConstraint component data Returns: True if valid Mark a weld as broken Parameters: (Object) — WeldConstraint component data Returns: Updated weld data Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components","contentHash":"62102e62f0e7a189a07c86db9f7e2d1e39fbacef2828cbef2445e91ae78988ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/components/WeldConstraint.md::0001","path":"engine/reference/ecs/components/WeldConstraint.md","title":"ecs/components/WeldConstraint.js","description":"","kind":"reference","source":"engine/ecs/components/WeldConstraint.js","updated":"","headings":["ecs/components/WeldConstraint.js","Functions","createWeldConstraint(initial)","createWeld(parentEntityId, childEntityId, options = {})","isValidWeld(weld)","breakWeld(weld)","Constants","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":1,"chunkCount":2,"text":"entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"d0b351d7ee920a4a4d96f52e5fb229dd96b40223b39f0336fd5873d2201e901d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/prefabs/PrefabRegistry.md::0000","path":"engine/reference/ecs/prefabs/PrefabRegistry.md","title":"ecs/prefabs/PrefabRegistry.js","description":"","kind":"reference","source":"engine/ecs/prefabs/PrefabRegistry.js","updated":"","headings":["ecs/prefabs/PrefabRegistry.js","Functions","registerPrefab(id, definition)","getPrefab(id)","getAllPrefabs()","getPrefabsByCategory(category)","instantiatePrefab(id, overrides = {})","clearPrefabs()","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Register a prefab Parameters: (string) — Unique prefab ID (Object) — Prefab definition Get a prefab by ID Parameters: (string) — Prefab ID Returns: Prefab definition Get all registered prefabs Returns: All prefabs Get prefabs by category Parameters: (string) — Category name Returns: Prefabs in category Instantiate a prefab into components Parameters: (string) — Prefab ID (Object) — Component overrides Returns: Component map ready for entity creation Clear all prefabs (for testing) <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until","contentHash":"dcc800120d5fbbe8b6a8d6dc36da9050cc0b31a5f87fdf3ff354c1c1341f4130"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/prefabs/PrefabRegistry.md::0001","path":"engine/reference/ecs/prefabs/PrefabRegistry.md","title":"ecs/prefabs/PrefabRegistry.js","description":"","kind":"reference","source":"engine/ecs/prefabs/PrefabRegistry.js","updated":"","headings":["ecs/prefabs/PrefabRegistry.js","Functions","registerPrefab(id, definition)","getPrefab(id)","getAllPrefabs()","getPrefabsByCategory(category)","instantiatePrefab(id, overrides = {})","clearPrefabs()","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":1,"chunkCount":2,"text":"queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"e56dfac7d0f09ed4a8e9f98db52f4954ed7f26f7cbb7845009672eec56dcbc1f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/prefabs/index.md::0000","path":"engine/reference/ecs/prefabs/index.md","title":"ecs/prefabs/index.js","description":"","kind":"reference","source":"engine/ecs/prefabs/index.js","updated":"","headings":["ecs/prefabs/index.js","Re-exports","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Prefab System Runtime entity templates Re exports , , , , , <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"9bf47c0f3f2ba72bd0e1b1251fdb09151786fd2e757db87e6873e2f44171369c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/query/Query.md::0000","path":"engine/reference/ecs/query/Query.md","title":"ecs/query/Query.js","description":"","kind":"reference","source":"engine/ecs/query/Query.js","updated":"","headings":["ecs/query/Query.js","Functions","createQuery(options)","forEachEntity(world, query, callback)","getQueryDebugSnapshot(world, query)","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/replication/ReplicationProfiles.md::0000","path":"engine/reference/ecs/replication/ReplicationProfiles.md","title":"ecs/replication/ReplicationProfiles.js","description":"","kind":"reference","source":"engine/ecs/replication/ReplicationProfiles.js","updated":"","headings":["ecs/replication/ReplicationProfiles.js","Functions","defineReplicationProfile(name, definition, options = {})","getReplicationProfile(name)","listReplicationProfiles()","resolveReplicationProfile(name, overrides = {})","profileAllowsComponent(profileOrName, componentName)","createReplicationProjection(netReplicated, components, context = {})","Constants","Notes & Examples","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"3148036a7588c430f4a38536e166a51a4bd774dd68067da24d081a1864728a08"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/storage/ArchetypeStorage.md::0000","path":"engine/reference/ecs/storage/ArchetypeStorage.md","title":"ecs/storage/ArchetypeStorage.js","description":"","kind":"reference","source":"engine/ecs/storage/ArchetypeStorage.js","updated":"","headings":["ecs/storage/ArchetypeStorage.js","Functions","createArchetypeStorage(world)","getArchetypeStorage(world)","setEntityComponent(world, entityId, componentName, value)","setEntityComponentDirect(world, entityId, componentName, value)","removeEntityComponent(world, entityId, componentName)","removeEntityFromStorage(world, entityId)","getEntityComponent(world, entityId, componentName)","getEntityComponentRecord(world, entityId)","getArchetypeStorageSnapshot(world)","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"50f843e7f74d6da710cdf63b38e2f681690b4d2ff7b857c6277a84328aa4190e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/CameraSystem.md::0000","path":"engine/reference/ecs/systems/CameraSystem.md","title":"ecs/systems/CameraSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/CameraSystem.js","updated":"","headings":["ecs/systems/CameraSystem.js","Functions","registerCameraSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/ClothSystem.md::0000","path":"engine/reference/ecs/systems/ClothSystem.md","title":"ecs/systems/ClothSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/ClothSystem.js","updated":"","headings":["ecs/systems/ClothSystem.js","Functions","registerClothSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/FluidDebugSystem.md::0000","path":"engine/reference/ecs/systems/FluidDebugSystem.md","title":"ecs/systems/FluidDebugSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/FluidDebugSystem.js","updated":"","headings":["ecs/systems/FluidDebugSystem.js","Functions","registerFluidDebugSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/FluidSystem.md::0000","path":"engine/reference/ecs/systems/FluidSystem.md","title":"ecs/systems/FluidSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/FluidSystem.js","updated":"","headings":["ecs/systems/FluidSystem.js","Functions","registerFluidSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/NavAgentSystem.md::0000","path":"engine/reference/ecs/systems/NavAgentSystem.md","title":"ecs/systems/NavAgentSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/NavAgentSystem.js","updated":"","headings":["ecs/systems/NavAgentSystem.js","Functions","registerNavAgentSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/ParticleDebugSystem.md::0000","path":"engine/reference/ecs/systems/ParticleDebugSystem.md","title":"ecs/systems/ParticleDebugSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/ParticleDebugSystem.js","updated":"","headings":["ecs/systems/ParticleDebugSystem.js","Functions","registerParticleDebugSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/ParticleSystem.md::0000","path":"engine/reference/ecs/systems/ParticleSystem.md","title":"ecs/systems/ParticleSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/ParticleSystem.js","updated":"","headings":["ecs/systems/ParticleSystem.js","Functions","registerParticleSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/PerceptionSystem.md::0000","path":"engine/reference/ecs/systems/PerceptionSystem.md","title":"ecs/systems/PerceptionSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/PerceptionSystem.js","updated":"","headings":["ecs/systems/PerceptionSystem.js","Functions","registerPerceptionSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/PhysicsSystem.md::0000","path":"engine/reference/ecs/systems/PhysicsSystem.md","title":"ecs/systems/PhysicsSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/PhysicsSystem.js","updated":"","headings":["ecs/systems/PhysicsSystem.js","Functions","registerPhysicsSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/SystemRegistry.md::0000","path":"engine/reference/ecs/systems/SystemRegistry.md","title":"ecs/systems/SystemRegistry.js","description":"","kind":"reference","source":"engine/ecs/systems/SystemRegistry.js","updated":"","headings":["ecs/systems/SystemRegistry.js","Functions","registerSystem(world, descriptor)","unregisterSystem(world, systemOrId)","setSystemEnabled(world, systemOrId, enabled)","getRegisteredSystems(world)","setSystemGroupEnabled(world, groupName, enabled)","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/ThirdPersonCameraSystem.md::0000","path":"engine/reference/ecs/systems/ThirdPersonCameraSystem.md","title":"ecs/systems/ThirdPersonCameraSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/ThirdPersonCameraSystem.js","updated":"","headings":["ecs/systems/ThirdPersonCameraSystem.js","Functions","registerThirdPersonCameraSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/systems/WorldSystem.md::0000","path":"engine/reference/ecs/systems/WorldSystem.md","title":"ecs/systems/WorldSystem.js","description":"","kind":"reference","source":"engine/ecs/systems/WorldSystem.js","updated":"","headings":["ecs/systems/WorldSystem.js","Functions","registerWorldSystem(world, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/world/World.md::0000","path":"engine/reference/ecs/world/World.md","title":"ecs/world/World.js","description":"","kind":"reference","source":"engine/ecs/world/World.js","updated":"","headings":["ecs/world/World.js","Functions","createWorld(options = {})","createEntity(world)","destroyEntity(world, id)","isEntityAlive(world, id)","getWorldStats(world)","getWorldDebugSnapshot(world, options = {})","captureWorldSnapshot(world, options)","restoreWorldFromSnapshot(world, snapshot)","stepWorld(world, deltaSeconds)","stepWorldFrame(world, deltaSeconds)","debugDecodeEntityId(id)","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/ecs/world/WorldPersistence.md::0000","path":"engine/reference/ecs/world/WorldPersistence.md","title":"ecs/world/WorldPersistence.js","description":"","kind":"reference","source":"engine/ecs/world/WorldPersistence.js","updated":"","headings":["ecs/world/WorldPersistence.js","Functions","createWorldSavePayload(world, options = {})","restoreWorldFromSavePayload(world, payload, options = {})","Notes & Examples","ECS Architecture Pattern","ECS Architecture Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities See also: ECS v2 · Engine Architecture ECS Architecture Pattern The Entity Component System (ECS) separates data (Components) from behavior (Systems). Entities are lightweight IDs that group components. Systems query entities by component type and process them in bulk, enabling cache friendly iteration and parallel execution. Example: Creating and querying entities Advanced: Complex queries Advanced: System groups and ordering Advanced: Component events Gotchas: Adding components during iteration : Safe, but new entities won't appear until next frame. Removing entities : Mark for deletion, processed at end of frame to avoid iterator invalidation. Singleton components : Use for global state like Time, Input. See also: ECS v2 · Engine Architecture","contentHash":"eb66b58443f73ee25765c95fdb42511fe8fafe78b73de2f6f6c4ab974ab306e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/ai/InstinctGraph.md::0000","path":"engine/reference/gameplay/ai/InstinctGraph.md","title":"gameplay/ai/InstinctGraph.js","description":"","kind":"reference","source":"engine/gameplay/ai/InstinctGraph.js","updated":"","headings":["gameplay/ai/InstinctGraph.js","Classes","class InstinctGraph","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/ai/NPCBrain.md::0000","path":"engine/reference/gameplay/ai/NPCBrain.md","title":"gameplay/ai/NPCBrain.js","description":"","kind":"reference","source":"engine/gameplay/ai/NPCBrain.js","updated":"","headings":["gameplay/ai/NPCBrain.js","Classes","class NPCBrain","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Compute drives for an NPC based on their current state and context. Execute the winning drive's action. Constants — 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 <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"63fbfaa6fb43eb00bcc56bbc895d552c4fa8d7dedeaf6ec273cc428f38086b3c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/ai/index.md::0000","path":"engine/reference/gameplay/ai/index.md","title":"gameplay/ai/index.js","description":"","kind":"reference","source":"engine/gameplay/ai/index.js","updated":"","headings":["gameplay/ai/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e2be9079f478be5772f31f6a69e8605dc4f9b004e0f2dbe57535a0c55de8cf2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/events/EventGraph.md::0000","path":"engine/reference/gameplay/events/EventGraph.md","title":"gameplay/events/EventGraph.js","description":"","kind":"reference","source":"engine/gameplay/events/EventGraph.js","updated":"","headings":["gameplay/events/EventGraph.js","Classes","class EventGraph","Functions","createEvent(config)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ' '. Classes EventGraph — global event bus + per entity event logs. Method Signature Summary Emit an event. Notifies all matching listeners and stores in logs. Subscribe to events of a given type. Subscribe to the next event of a given type (auto unsubscribes). Unsubscribe a handler from an event type. Query the global event log. Get the event log for a specific entity. Get events at a specific location. Get events with a specific tag. Replay events matching a filter, calling a handler for each. Useful for rebuilding state from event history. Count events matching a filter. Check if any event matching filter exists. Get stats for debugging. Clear all logs and listeners. Use for testing or full reset. Serialize the global log to a plain array (for save). Functions Creates an immutable event object. Parameters: (object) — No description in source JSDoc. (string) — Event type (e.g. 'npc.stole', 'player.born', 'combat.hit') (string) — Entity ID of who caused this event (string) — Entity ID of who this event affects (object) — Arbitrary payload (string) — Where it happened (location ID or coordinates) (string[]) — Entity IDs of who saw it (string[]) — Content tags (hunger, betrayal, family, fear, etc.) (string) — Human readable description Returns: Frozen event object <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a","contentHash":"0f5514b5ed59ed7683126d6361b21145b858b8a7ae6a0477d686461681c0a6bc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/events/EventGraph.md::0001","path":"engine/reference/gameplay/events/EventGraph.md","title":"gameplay/events/EventGraph.js","description":"","kind":"reference","source":"engine/gameplay/events/EventGraph.js","updated":"","headings":["gameplay/events/EventGraph.js","Classes","class EventGraph","Functions","createEvent(config)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"etc.) (string) — Human readable description Returns: Frozen event object <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"120c9da2d3eb7a218db5ce0ad8345b02731fcf2fabd303fb04e1aafad4332688"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/events/index.md::0000","path":"engine/reference/gameplay/events/index.md","title":"gameplay/events/index.js","description":"","kind":"reference","source":"engine/gameplay/events/index.js","updated":"","headings":["gameplay/events/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e2be9079f478be5772f31f6a69e8605dc4f9b004e0f2dbe57535a0c55de8cf2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/inventory/Inventory.md::0000","path":"engine/reference/gameplay/inventory/Inventory.md","title":"gameplay/inventory/Inventory.js","description":"","kind":"reference","source":"engine/gameplay/inventory/Inventory.js","updated":"","headings":["gameplay/inventory/Inventory.js","Classes","class Inventory","Functions","defaultResolveEquipSlot(itemData)","createInventory(maxSlots, options)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0698b18e522b8eb6fd1253b8e820cc581c20d2f3768bfe5d7321214196a1272e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/inventory/index.md::0000","path":"engine/reference/gameplay/inventory/index.md","title":"gameplay/inventory/index.js","description":"","kind":"reference","source":"engine/gameplay/inventory/index.js","updated":"","headings":["gameplay/inventory/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"32b9397375c3e1e91e114cc2ce681ae942fbdd9bdcc5b8eab84a70e5b02ffe9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/items/ItemOwnership.md::0000","path":"engine/reference/gameplay/items/ItemOwnership.md","title":"gameplay/items/ItemOwnership.js","description":"","kind":"reference","source":"engine/gameplay/items/ItemOwnership.js","updated":"","headings":["gameplay/items/ItemOwnership.js","Classes","class ItemOwnership","Functions","createOwnedItem(config)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ItemOwnership — Tracks who owns what, detects theft, handles transfers. Classes Method Signature Summary Register an owned item Get item by ID Get all items owned by entity Transfer ownership. Check if a transfer would be theft. Functions Constants — ItemOwnership — Tracks who owns what, detects theft, handles transfers. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"87844298c9e2dc34cb6515b369b044abf106a2deb4892f3a459f2972d709e1fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/items/ItemSoulSystem.md::0000","path":"engine/reference/gameplay/items/ItemSoulSystem.md","title":"gameplay/items/ItemSoulSystem.js","description":"","kind":"reference","source":"engine/gameplay/items/ItemSoulSystem.js","updated":"","headings":["gameplay/items/ItemSoulSystem.js","Classes","class ItemSoulSystem","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize or get soul data for an item. Record an item event that may advance its soul. Get a whisper from a talking item. Get all items at or above a soul stage. Get all tracked souls Format soul info Constants — 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"34b9180f16a8e1c72e373f6dab6afae0d7d8c1e3937562e8d47986b02944e0d2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/items/index.md::0000","path":"engine/reference/gameplay/items/index.md","title":"gameplay/items/index.js","description":"","kind":"reference","source":"engine/gameplay/items/index.js","updated":"","headings":["gameplay/items/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6dd9226c1c7dee97e768bc495c735bf8e01343d38a3a6f90b02ef2eef3ce3636"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/BackgroundMatcher.md::0000","path":"engine/reference/gameplay/narrative/BackgroundMatcher.md","title":"gameplay/narrative/BackgroundMatcher.js","description":"","kind":"reference","source":"engine/gameplay/narrative/BackgroundMatcher.js","updated":"","headings":["gameplay/narrative/BackgroundMatcher.js","Functions","extractOriginTags(text)","mapTagsToOrigin(tagResult)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Extract origin tags from player written background text. Parameters: (string) — The player's \"soul memory\" text Returns: { tags: { tag: score }[], topTags: string[], categories: { category: tag[] }, rawScores: { tag: number } } Map extracted tags to world generation parameters. Parameters: (object) — From extractOriginTags() Returns: { familyType, socialStatus, culture, hardships, resolveSeed, startingStorylets, townType } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c0cfe77d989b44f6187a83b97e40203581f130ed39a5d7307f412c4d46f8ebc8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/DialogueSystem.md::0000","path":"engine/reference/gameplay/narrative/DialogueSystem.md","title":"gameplay/narrative/DialogueSystem.js","description":"","kind":"reference","source":"engine/gameplay/narrative/DialogueSystem.js","updated":"","headings":["gameplay/narrative/DialogueSystem.js","Classes","class DialogueSystem","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Generate a dialogue line for an NPC given an intent and context. Get available intents for an NPC given current context. Constants — 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e972f375588aad254977c0c9ecbdb22d725152742aa814aa32036001effc3541"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/DialogueTree.md::0000","path":"engine/reference/gameplay/narrative/DialogueTree.md","title":"gameplay/narrative/DialogueTree.js","description":"","kind":"reference","source":"engine/gameplay/narrative/DialogueTree.js","updated":"","headings":["gameplay/narrative/DialogueTree.js","Classes","class DialogueRunner","Functions","node(type, data)","textNode(speaker, text, next)","choiceNode(prompt, choices)","branchNode(variable, branches, fallback)","setNode(variable, value, next)","endNode(action)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes DialogueRunner — Executes a dialogue tree, manages state, and produces UI output. Method Signature Summary Register nodes from a dialogue tree. Get a dialogue variable. Set a dialogue variable. Check if player knows an NPC's name. Start a conversation with an NPC. Returns the first dialogue output (text + choices for player). Player selects a choice. Returns next dialogue output. End current conversation. Queue an NPC to initiate a conversation with the player. Called by NPC brain, storylets, or world director. Check if any NPC wants to initiate conversation. Call each tick. Returns the highest urgency pending initiation, or null. Start an NPC initiated conversation. NPC speaks first, player responds. Build player response choices for NPC initiated conversations. Detect nearby NPCs who can overhear the conversation. They may react, interject, or remember what was said. Get eavesdropper reactions to a conversation choice. Some NPCs may interject if the topic affects them. Check if a specific NPC wants to interject into the active conversation. Returns an interjection or null. Functions Create a dialogue node. Shorthand builders. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cd61f0d17e22c64047aff15346779b1f2619293b3864506e86cb73a095b93bbe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/LifePhases.md::0000","path":"engine/reference/gameplay/narrative/LifePhases.md","title":"gameplay/narrative/LifePhases.js","description":"","kind":"reference","source":"engine/gameplay/narrative/LifePhases.js","updated":"","headings":["gameplay/narrative/LifePhases.js","Classes","class LifePhases","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Register a phase change listener. Register a narrative text listener (for UI display). Start the origin sequence with generated origin data. Advance to the next phase (called by UI when player clicks \"continue\"). Constants — 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"20649d10dae24067e7f681c4096b7b764495f73c0f31d9ba039b2f5ffcd8db99"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/OriginGenerator.md::0000","path":"engine/reference/gameplay/narrative/OriginGenerator.md","title":"gameplay/narrative/OriginGenerator.js","description":"","kind":"reference","source":"engine/gameplay/narrative/OriginGenerator.js","updated":"","headings":["gameplay/narrative/OriginGenerator.js","Functions","generateOrigin(origin, suggestedName)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Generate a full origin from mapped tags. Parameters: (object) — From mapTagsToOrigin() (string) — Player's suggested name Returns: Full origin data <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fc85cb88b2a290258e89f2d6eed4621fb9fa28a43acfca3b715466131890802e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/SituationGraph.md::0000","path":"engine/reference/gameplay/narrative/SituationGraph.md","title":"gameplay/narrative/SituationGraph.js","description":"","kind":"reference","source":"engine/gameplay/narrative/SituationGraph.js","updated":"","headings":["gameplay/narrative/SituationGraph.js","Classes","class SituationGraph","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Evaluate which situation bucket should be active based on world state. Get current state for debugging Constants — 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9c63d6236e599a404e08c20095ad9b81aa5b7e73d1428d8e50f13733967fdd40"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/StoryGraph.md::0000","path":"engine/reference/gameplay/narrative/StoryGraph.md","title":"gameplay/narrative/StoryGraph.js","description":"","kind":"reference","source":"engine/gameplay/narrative/StoryGraph.js","updated":"","headings":["gameplay/narrative/StoryGraph.js","Classes","class StoryGraph","Functions","createStorylet(config)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Register a storylet. Register multiple storylets at once. Check all storylets and fire the best eligible one. Force fire a specific storylet (for testing / debug). Get all registered storylet IDs and names. Get count of registered storylets Clear all storylets Functions Create a storylet definition. Parameters: (object) — No description in source JSDoc. (string) — Unique storylet ID (string) — Human readable name (string[]) — Content tags (function) — (worldState) = boolean (function) — (worldState, cast) = { narrative, consequences, memories } (function) — (worldState) = object — pick NPCs to fill roles (number) — =60000] Min ms between fires (number) — =5] Higher = checked first (number) — =0] 0 = unlimited (string) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5aa31f47b0f566e9dbec236bca38f6a06abc58146839fca9eb2b2c9ec66457fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/WorldDirector.md::0000","path":"engine/reference/gameplay/narrative/WorldDirector.md","title":"gameplay/narrative/WorldDirector.js","description":"","kind":"reference","source":"engine/gameplay/narrative/WorldDirector.js","updated":"","headings":["gameplay/narrative/WorldDirector.js","Classes","class WorldDirector","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Evaluate world state and potentially fire a director event. Call every tick — internally throttles to checkInterval. Get current director state for debugging. Constants — 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"644a14f4130d28b179195801e7c0f5cb6e1868cfdb8fc9aeb78acab27bc489ca"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/index.md::0000","path":"engine/reference/gameplay/narrative/index.md","title":"gameplay/narrative/index.js","description":"","kind":"reference","source":"engine/gameplay/narrative/index.js","updated":"","headings":["gameplay/narrative/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"db27865824e4acc4c0ccdcb01b7bd19f59d1fe41e04c924c6569dac42dc02916"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/narrative/storylets/core_storylets.md::0000","path":"engine/reference/gameplay/narrative/storylets/core_storylets.md","title":"gameplay/narrative/storylets/core_storylets.js","description":"","kind":"reference","source":"engine/gameplay/narrative/storylets/core_storylets.js","updated":"","headings":["gameplay/narrative/storylets/corestorylets.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Core Storylet Library — Initial content for the StoryGraph. Each storylet has trigger conditions, cast selection, and execution logic. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0582ef95ae635d78e11e45facf1db3219b2320f257822e21d96925bfa21dbc3d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/perception/PerceptionGraph.md::0000","path":"engine/reference/gameplay/perception/PerceptionGraph.md","title":"gameplay/perception/PerceptionGraph.js","description":"","kind":"reference","source":"engine/gameplay/perception/PerceptionGraph.js","updated":"","headings":["gameplay/perception/PerceptionGraph.js","Classes","class PerceptionGraph","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Get perception tags for a target entity from the player's perspective. Get perception tags for ALL nearby entities. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a9b09387fa78e9a699e3c8e76fd90a12a38985398504a66c113a0e29619e4172"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/perception/index.md::0000","path":"engine/reference/gameplay/perception/index.md","title":"gameplay/perception/index.js","description":"","kind":"reference","source":"engine/gameplay/perception/index.js","updated":"","headings":["gameplay/perception/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e2be9079f478be5772f31f6a69e8605dc4f9b004e0f2dbe57535a0c55de8cf2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/progression/ContractSystem.md::0000","path":"engine/reference/gameplay/progression/ContractSystem.md","title":"gameplay/progression/ContractSystem.js","description":"","kind":"reference","source":"engine/gameplay/progression/ContractSystem.js","updated":"","headings":["gameplay/progression/ContractSystem.js","Classes","class ContractSystem","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/progression/DomainGraph.md::0000","path":"engine/reference/gameplay/progression/DomainGraph.md","title":"gameplay/progression/DomainGraph.js","description":"","kind":"reference","source":"engine/gameplay/progression/DomainGraph.js","updated":"","headings":["gameplay/progression/DomainGraph.js","Classes","class DomainGraph","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Check if an entity qualifies to activate a domain. Activate a domain for an entity. Deactivate a domain (expired, failure, or manual). Update all active domains — check expiry, failure conditions, cost. Call every tick. Check if a world position is inside any active domain. Get all active domains. Format domain info as text. Clear all domains <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0e65d964a85487aa3dd361f9c090442267ed09f1cd3bd18ad09c5c81b40566b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/progression/PowerGraph.md::0000","path":"engine/reference/gameplay/progression/PowerGraph.md","title":"gameplay/progression/PowerGraph.js","description":"","kind":"reference","source":"engine/gameplay/progression/PowerGraph.js","updated":"","headings":["gameplay/progression/PowerGraph.js","Classes","class PowerGraph","Functions","createPower(config)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d4ecb0da4b5fa403be0eb91104cb31642a49b0ddece5acbeed252d41fb5b7757"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/progression/ResolveSystem.md::0000","path":"engine/reference/gameplay/progression/ResolveSystem.md","title":"gameplay/progression/ResolveSystem.js","description":"","kind":"reference","source":"engine/gameplay/progression/ResolveSystem.js","updated":"","headings":["gameplay/progression/ResolveSystem.js","Classes","class ResolveSystem","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/progression/index.md::0000","path":"engine/reference/gameplay/progression/index.md","title":"gameplay/progression/index.js","description":"","kind":"reference","source":"engine/gameplay/progression/index.js","updated":"","headings":["gameplay/progression/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"32b9397375c3e1e91e114cc2ce681ae942fbdd9bdcc5b8eab84a70e5b02ffe9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/rules/RuleGraph.md::0000","path":"engine/reference/gameplay/rules/RuleGraph.md","title":"gameplay/rules/RuleGraph.js","description":"","kind":"reference","source":"engine/gameplay/rules/RuleGraph.js","updated":"","headings":["gameplay/rules/RuleGraph.js","Classes","class RuleGraph","Functions","createRule(config)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes RuleGraph — singleton style rule management and resolution. Method Signature Summary Register a rule. Remove a rule by ID. Remove all rules from a specific source. Get a rule by ID. Remove expired rules. Call periodically. Query: Is this action allowed given the current context? Gathers all matching rules, sorts by priority (ascending = higher priority first), then by specificity (descending), and resolves conflicts. Query: What result does an action produce after all modify/replace rules? Runs the action through all matching MODIFY and REPLACE rules in priority order. Explain why a specific action would be allowed or denied. Returns a human readable explanation chain. Get all active rules matching a filter. Get the trace log from the most recent isAllowed() or resolve() call. Get total number of registered rules. Get stats for debugging. Remove all rules. Use for testing or full reset. Serialize all rules to a plain array (for save/debug). Note: condition and apply functions are NOT serializable — only","contentHash":"d5b09192a3e59c68eb95768757a451f922ecb45aaab0b8261fd9f8c9dfa5b162"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/rules/RuleGraph.md::0001","path":"engine/reference/gameplay/rules/RuleGraph.md","title":"gameplay/rules/RuleGraph.js","description":"","kind":"reference","source":"engine/gameplay/rules/RuleGraph.js","updated":"","headings":["gameplay/rules/RuleGraph.js","Classes","class RuleGraph","Functions","createRule(config)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"rules. Use for testing or full reset. Serialize all rules to a plain array (for save/debug). Note: condition and apply functions are NOT serializable — only metadata is saved. Functions Creates a new rule object. Parameters: (object) — No description in source JSDoc. (string) — Human readable rule name (string) — One of RuleCategory values (string) — Who/what created this rule (entity id, system name, etc.) (string) — One of RuleEffect values (function) — (action, context) = boolean — when does this rule apply? (function ) — (action, context) = result — what happens when rule fires (string[]) — Content tags for filtering (number) — Higher = more specific (breaks ties within same priority) (number) — Timestamp when rule expires, null for permanent (string) — Human readable explanation Returns: Frozen rule object Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d000000f3e2b77ede7db52a763c2ef1b346a1feef8918db604b683fbf615190a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/rules/index.md::0000","path":"engine/reference/gameplay/rules/index.md","title":"gameplay/rules/index.js","description":"","kind":"reference","source":"engine/gameplay/rules/index.js","updated":"","headings":["gameplay/rules/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"32b9397375c3e1e91e114cc2ce681ae942fbdd9bdcc5b8eab84a70e5b02ffe9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/simulation/SimulationManager.md::0000","path":"engine/reference/gameplay/simulation/SimulationManager.md","title":"gameplay/simulation/SimulationManager.js","description":"","kind":"reference","source":"engine/gameplay/simulation/SimulationManager.js","updated":"","headings":["gameplay/simulation/SimulationManager.js","Classes","class SimulationManager","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Update simulation levels based on player position, then tick active/warm entities. Force wake an entity (e.g. when an event targets it). Get simulation stats. Constants — 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0aeddcf590f8936ceb4b939481e4c4182aeeb23f6deca133b52bcad88b51557e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/simulation/index.md::0000","path":"engine/reference/gameplay/simulation/index.md","title":"gameplay/simulation/index.js","description":"","kind":"reference","source":"engine/gameplay/simulation/index.js","updated":"","headings":["gameplay/simulation/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e2be9079f478be5772f31f6a69e8605dc4f9b004e0f2dbe57535a0c55de8cf2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/social/SoulGraph.md::0000","path":"engine/reference/gameplay/social/SoulGraph.md","title":"gameplay/social/SoulGraph.js","description":"","kind":"reference","source":"engine/gameplay/social/SoulGraph.js","updated":"","headings":["gameplay/social/SoulGraph.js","Classes","class SoulGraph","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes 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 Method Signature Summary Get all relationship edges for an entity, with computed influence scores. Propagate a social signal through the graph. When an event affects an entity, connected entities react based on their relationship. Find the strongest connection paths between two entities (up to 3 hops). Get the \"social temperature\" of an entity — how much social pressure they're under. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c78c02962777987fc650f99041dc8bf79b90d740199fd00952cd5f46752682d2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/social/SoulGraphMessaging.md::0000","path":"engine/reference/gameplay/social/SoulGraphMessaging.md","title":"gameplay/social/SoulGraphMessaging.js","description":"","kind":"reference","source":"engine/gameplay/social/SoulGraphMessaging.js","updated":"","headings":["gameplay/social/SoulGraphMessaging.js","Classes","class SoulGraphMessaging","Functions","createMessage(config)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Send a message. It enters the pending queue for propagation. Process all pending messages — deliver and propagate. Call this once per game tick or every N ticks. Get delivered message log. Get pending message count. Clear all pending and delivered Functions Create a message. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0ee44e2c75fb535ec0314ad4954411796b4268b7ec454cddfff1e0e1e8630081"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/social/index.md::0000","path":"engine/reference/gameplay/social/index.md","title":"gameplay/social/index.js","description":"","kind":"reference","source":"engine/gameplay/social/index.js","updated":"","headings":["gameplay/social/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4b42f1f3cb73b27718c1bf65faeae5ac2e3a268efc18eaf848ddf83ce90f8a37"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/society/CitySystem.md::0000","path":"engine/reference/gameplay/society/CitySystem.md","title":"gameplay/society/CitySystem.js","description":"","kind":"reference","source":"engine/gameplay/society/CitySystem.js","updated":"","headings":["gameplay/society/CitySystem.js","Classes","class CitySystem","Functions","createCity(config)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CitySystem — City templates, population, economy, laws, reputation. Classes Method Signature Summary Add entity to city population Remove entity from city population Get city reputation toward an entity Modify city reputation Get city by name Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f0b77696487a3c437e1fd8f2e4d0e34fa948e2825a3200e9205df7316116e08b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/society/FactionGraph.md::0000","path":"engine/reference/gameplay/society/FactionGraph.md","title":"gameplay/society/FactionGraph.js","description":"","kind":"reference","source":"engine/gameplay/society/FactionGraph.js","updated":"","headings":["gameplay/society/FactionGraph.js","Classes","class FactionGraph","Functions","createFaction(config)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Register a faction Get faction by ID Get all factions Get reputation of an entity with a faction. Modify reputation. Record a crime against a faction. Determine what action a faction would take toward an entity. Get relationship between two factions. Set relationship between two factions. Get count Clear Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6ab7ba05baf28b1d7dabeb6b7df24060346735858f7d4698fe1d62429af4ae9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/society/LawGraph.md::0000","path":"engine/reference/gameplay/society/LawGraph.md","title":"gameplay/society/LawGraph.js","description":"","kind":"reference","source":"engine/gameplay/society/LawGraph.js","updated":"","headings":["gameplay/society/LawGraph.js","Classes","class LawGraph","Functions","createCrimeRecord(config)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: LawGraph — Crime, witnesses, punishment, and justice. Different cities and factions have different laws. Tracks: witnesses, evidence, suspicion, reputation. Punishment: bounty, exile, prison, revenge, retaliation. Classes Method Signature Summary Define laws for a location or faction. Report a crime. Creates a record, notifies witnesses, adjusts suspicion. Check suspicion level for an entity. Check if an entity is wanted (suspicion threshold). Get all unresolved crimes by a perpetrator. Get all unresolved crimes at a location. Resolve a crime (punished, forgiven, etc.). Decay suspicion over time. Call periodically. Get total crime count Get unresolved count Clear Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6bb5e121441581d7c0ba06cd4ec67cf4916e2e927ebd74b8019c4c4aa3ff39a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/society/index.md::0000","path":"engine/reference/gameplay/society/index.md","title":"gameplay/society/index.js","description":"","kind":"reference","source":"engine/gameplay/society/index.js","updated":"","headings":["gameplay/society/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4e3b6c39aab270430fc1dc27aabe365c161cf75e74ba5984fbb5b80727afeb46"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/spells/SpellElementMixer.md::0000","path":"engine/reference/gameplay/spells/SpellElementMixer.md","title":"gameplay/spells/SpellElementMixer.js","description":"","kind":"reference","source":"engine/gameplay/spells/SpellElementMixer.js","updated":"","headings":["gameplay/spells/SpellElementMixer.js","Classes","class SpellElementMixer","Functions","getSpellElementMixer()","mixElements(element1, element2)","mixMultipleElements(elements)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Build combination lookup cache Mix two elements Enhance a single element (double casting) Create a generic blend for undefined combinations Mix multiple elements (3+) Get all possible combinations for an element Get all available combinations Check if two elements can combine Get combination info without creating Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1a8cfe9569529f897c6e0adb5e62335042dde4c5e270fa80aede10e66e3a0a77"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/spells/SpellGenerator.md::0000","path":"engine/reference/gameplay/spells/SpellGenerator.md","title":"gameplay/spells/SpellGenerator.js","description":"","kind":"reference","source":"engine/gameplay/spells/SpellGenerator.js","updated":"","headings":["gameplay/spells/SpellGenerator.js","Classes","class SpellGenerator","Functions","spellDeterministicIdHash(element, seed)","spellParticleEffectHash(elementId, seed)","serializeSpellForNetwork(spell)","deserializeSpellFromNetwork(data)","validateSpellIntegrity(spell)","getSpellGenerator()","generateSpell(params)","generateRandomSpell(constraints)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Create seeded RNG Generate a complete spell from parameters Calculate spell stats Generate particle effect configuration Generate SDF code based on spell type Generate color code based on element Generate emitter configuration Generate spell name Random choice helper Generate a random spell Generate a set of spells (e.g., for loot) Functions Serialize spell to minimal format for network transmission Only includes data needed to regenerate the spell deterministically Deserialize spell from network format Regenerates full spell from minimal data Validate spell data matches seed (anti cheat) Returns true if spell stats match what seed would generate Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b418ed813da22315c3df3ad2dbdcf0bbe59d8375cce301c4c6742c4a678f758d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/spells/SpellGeneratorIntegration.md::0000","path":"engine/reference/gameplay/spells/SpellGeneratorIntegration.md","title":"gameplay/spells/SpellGeneratorIntegration.js","description":"","kind":"reference","source":"engine/gameplay/spells/SpellGeneratorIntegration.js","updated":"","headings":["gameplay/spells/SpellGeneratorIntegration.js","Functions","generatedSpellToConfig(generatedSpell)","configToGeneratorFormat(spellConfig)","readGeneratedSpellLibraryRecord(storage = globalThis.localStorage)","writeGeneratedSpellLibraryRecord(library, storage = globalThis.localStorage)","async saveGeneratedSpell(generatedSpell, storage = globalThis.localStorage)","getSpellLibrary(storage = globalThis.localStorage)","getGeneratedSpell(id)","deleteGeneratedSpell(id, storage = globalThis.localStorage)","getAllGeneratedSpells(storage = globalThis.localStorage)","createEmitterFromGeneratedSpell(generatedSpell, options = {})","quickGenerateSpell(element, type, powerLevel = 1.0)","generateCombinedSpell(element1, element2, type, powerLevel = 1.0)","generateLootSpell(rarity = 'common')","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Convert a generated spell to the existing SpellConfig format Compatible with SpellConfig.js SPELL PRESETS structure Convert existing SpellConfig preset to generator format Allows editing existing spells in the generator Save generated spell to library (IndexedDB via registry pattern) Load spell library from storage Get a generated spell by ID Delete a generated spell Get all generated spells as array 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. Quick generate a spell with minimal parameters Generate a combined element spell Generate loot style random spell Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ba4e14249c84d15c790e2f62755e52c19f68a8b4d4db23634b4b8e8f2c3ace13"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/gameplay/spells/index.md::0000","path":"engine/reference/gameplay/spells/index.md","title":"gameplay/spells/index.js","description":"","kind":"reference","source":"engine/gameplay/spells/index.js","updated":"","headings":["gameplay/spells/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Spell System Exports Barrel file for easy importing of all spell related modules. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ca688c9d05bf09822854421d7f92a85199e53382b4f8776431c9e43567519cd4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/index.md::0000","path":"engine/reference/kaolin/index.md","title":"kaolin/index.js","description":"","kind":"reference","source":"engine/kaolin/index.js","updated":"","headings":["kaolin/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ee8c55cb5fc59a7f687868f9e9544f7e7122f07c506a077f7968b7eda255729f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/io/MeshIO.md::0000","path":"engine/reference/kaolin/io/MeshIO.md","title":"kaolin/io/MeshIO.js","description":"","kind":"reference","source":"engine/kaolin/io/MeshIO.js","updated":"","headings":["kaolin/io/MeshIO.js","Functions","parseOBJ(objText, options = {})","writeOBJ(positions, indices, options = {})","parsePLY(buffer)","writePLY(positions, indices, options = {})","parseSTL(buffer)","writeSTL(positions, indices, normals = null)","async loadMesh(url)","downloadMesh(filename, data)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Parse an OBJ string into mesh data. Parameters: (string) — — OBJ file content (Object) — No description in source JSDoc. (boolean) — — swap Y and Z axes (default false) Returns: } Write mesh data to OBJ format string. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (Object) — No description in source JSDoc. (Float32Array) — — stride 3 (Float32Array) — — stride 2 (string) — — object name Returns: — OBJ file content Parse a PLY file (ArrayBuffer) into mesh data. Supports ASCII and binary little endian formats. Parameters: (ArrayBuffer) — — raw file bytes Returns: } Write mesh data to PLY format (ASCII). Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (Object) — No description in source JSDoc. (Float32Array) — — stride 3 (Uint8Array) — — stride 3 (RGB, 0 255) Returns: — PLY file content Parse an STL file (ArrayBuffer) into mesh data. Auto detects ASCII vs binary. Parameters: (ArrayBuffer) — — raw file bytes Returns: } Write mesh data to binary STL format. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (Float32Array) — — face normals stride 3 (optional, computed if missing) Load a mesh from URL (auto detects format from","contentHash":"fbce9169b106de9cae229d904206769bd193cc18801126958be621df6f91dd70"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/io/MeshIO.md::0001","path":"engine/reference/kaolin/io/MeshIO.md","title":"kaolin/io/MeshIO.js","description":"","kind":"reference","source":"engine/kaolin/io/MeshIO.js","updated":"","headings":["kaolin/io/MeshIO.js","Functions","parseOBJ(objText, options = {})","writeOBJ(positions, indices, options = {})","parsePLY(buffer)","writePLY(positions, indices, options = {})","parseSTL(buffer)","writeSTL(positions, indices, normals = null)","async loadMesh(url)","downloadMesh(filename, data)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"— — stride 3 (Uint32Array) — — stride 3 (Float32Array) — — face normals stride 3 (optional, computed if missing) Load a mesh from URL (auto detects format from extension). Parameters: (string) — No description in source JSDoc. Returns: } Download mesh as a file (browser). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31026949bb7c6236a4be07bc01a9916c978cbfdfe65987fea6eac52ac592e0e3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/io/PointCloudIO.md::0000","path":"engine/reference/kaolin/io/PointCloudIO.md","title":"kaolin/io/PointCloudIO.js","description":"","kind":"reference","source":"engine/kaolin/io/PointCloudIO.js","updated":"","headings":["kaolin/io/PointCloudIO.js","Functions","parsePLYPointCloud(buffer)","writePLYPointCloud(points, options = {})","parseXYZ(text)","writeXYZ(points, options = {})","parsePCD(text)","writePCD(points, options = {})","async loadPointCloud(url)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Load a point cloud from PLY (ArrayBuffer). Ignores face data — returns only vertex positions + attributes. Parameters: (ArrayBuffer) — No description in source JSDoc. Returns: } Write a point cloud to PLY format (ASCII string, no faces). Parameters: (Float32Array) — — stride 3 (Object) — No description in source JSDoc. (Float32Array) — — stride 3 (Uint8Array) — — stride 3 (RGB 0 255) Parse XYZ text format. Each line: x y z [nx ny nz] [r g b] Parameters: (string) — No description in source JSDoc. Returns: } Write points to XYZ text format. Parameters: (Float32Array) — — stride 3 (Object) — No description in source JSDoc. (Float32Array) — — stride 3 (Float32Array) — — stride 3 (0 1 range) Parse PCD text format (ASCII only). Parameters: (string) — No description in source JSDoc. Returns: } Write points to PCD ASCII format. Parameters: (Float32Array) — — stride 3 (Object) — No description in source JSDoc. (Float32Array) — — stride 3 Load a point cloud from URL (auto detects format from extension). Parameters: (string) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5880e2e074a5fdcf36aec8af3d777e9f1cb2a01f5f1aaa8323b75c7ea78eb8e7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/io/index.md::0000","path":"engine/reference/kaolin/io/index.md","title":"kaolin/io/index.js","description":"","kind":"reference","source":"engine/kaolin/io/index.js","updated":"","headings":["kaolin/io/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kaolin IO — Barrel exports Mesh and point cloud import/export (OBJ, PLY, STL, XYZ, PCD). Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bbe2973213564ae67f82b140fc555bf895b437c9429b578310a4dd73fa70dd2c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/metrics/ChamferDistance.md::0000","path":"engine/reference/kaolin/metrics/ChamferDistance.md","title":"kaolin/metrics/ChamferDistance.js","description":"","kind":"reference","source":"engine/kaolin/metrics/ChamferDistance.js","updated":"","headings":["kaolin/metrics/ChamferDistance.js","Functions","chamferDistance(pointsA, pointsB, options = {})","chamferDistancePerPoint(pointsA, pointsB)","earthMoversDistance(pointsA, pointsB)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Compute Chamfer Distance between two point sets. CD(A, B) = (1/ A ) Σ min {b∈B} a b ² + (1/ B ) Σ min {a∈A} b a ² Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 (Object) — No description in source JSDoc. (boolean) — — return squared distances (default true) (boolean) — — compute both directions (default true) (string) — — 'mean' 'sum' (default 'mean') Returns: } Compute per point nearest distances from A to B. Useful for visualization (color coded error maps). Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 Returns: — per point squared distances, length = nA 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). Parameters: (Float32Array) — — stride 3, n points (Float32Array) — — stride 3, n points (same count) Returns: — approximate EMD <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4457eac4a863b8a204f3e88d37874e6915c0010b5c732b854844e54a28d5c2cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/metrics/GPUMetrics.md::0000","path":"engine/reference/kaolin/metrics/GPUMetrics.md","title":"kaolin/metrics/GPUMetrics.js","description":"","kind":"reference","source":"engine/kaolin/metrics/GPUMetrics.js","updated":"","headings":["kaolin/metrics/GPUMetrics.js","Classes","class GPUMetrics","Functions","getGPUMetrics(device)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Classes Method Signature Summary Lazy init pipelines on first use. GPU accelerated Chamfer Distance. GPU accelerated Hausdorff Distance. GPU accelerated RMSE (Root Mean Squared Error of nearest neighbor distances). Run nearest neighbor compute + reduction in one direction. Destroy cached pipelines. Functions Get or create a singleton GPUMetrics instance. Parameters: (GPUDevice) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"85994611b2048daf25c7abd1c9bb1476ea1844b345da559890fc9dba70aea47b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/metrics/HausdorffDistance.md::0000","path":"engine/reference/kaolin/metrics/HausdorffDistance.md","title":"kaolin/metrics/HausdorffDistance.js","description":"","kind":"reference","source":"engine/kaolin/metrics/HausdorffDistance.js","updated":"","headings":["kaolin/metrics/HausdorffDistance.js","Functions","hausdorffDistance(pointsA, pointsB, options = {})","directedDistances(pointsA, pointsB)","rmse(pointsA, pointsB)","meanDistance(pointsA, pointsB)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Compute Hausdorff distance between two point sets. Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 (Object) — No description in source JSDoc. (boolean) — — compute both directions (default true) (number) — — use percentile instead of max (0 100, default 100 = exact) Returns: } Compute per point minimum distances from A to B. Returns the distance of each point in A to its nearest neighbor in B. Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 Returns: — per point distances (not squared), length = nA Compute RMSE (Root Mean Square Error) between two point sets. Symmetric: averages both directions. Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 Compute mean absolute distance between two point sets (one direction). Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a72f7c6c5a2d045ef7bbaacd3a6661856d9882c7001c24539faefe37d5768710"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/metrics/VolumetricIoU.md::0000","path":"engine/reference/kaolin/metrics/VolumetricIoU.md","title":"kaolin/metrics/VolumetricIoU.js","description":"","kind":"reference","source":"engine/kaolin/metrics/VolumetricIoU.js","updated":"","headings":["kaolin/metrics/VolumetricIoU.js","Functions","volumetricIoU(positionsA, indicesA, positionsB, indicesB, options = {})","voxelGridIoU(gridA, gridB)","fScore(pointsPred, pointsGT, threshold)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Compute Volumetric IoU between two triangle meshes. Voxelizes both at the same resolution/origin, then counts overlap. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (Object) — No description in source JSDoc. (number) — — voxels per longest axis (default 32) (boolean) — — fill interiors before comparing (default true) Returns: } Compute IoU directly from two voxel grids (same dimensions). Parameters: (Uint8Array) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. Returns: } 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. Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 (number) — — distance threshold Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ae9da66faa20db2edac061e232fc773f3cb5f9610c95b00489a02bb68a834a0c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/metrics/index.md::0000","path":"engine/reference/kaolin/metrics/index.md","title":"kaolin/metrics/index.js","description":"","kind":"reference","source":"engine/kaolin/metrics/index.js","updated":"","headings":["kaolin/metrics/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kaolin Metrics — Barrel exports 3D shape comparison metrics for training loops and quality assessment. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bf22cca8584e80f3eba738477bbfcd367bf85f22dce99d5267cfea8c3eb439d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/DualContouring.md::0000","path":"engine/reference/kaolin/ops/conversions/DualContouring.md","title":"kaolin/ops/conversions/DualContouring.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/DualContouring.js","updated":"","headings":["kaolin/ops/conversions/DualContouring.js","Functions","dualContouringSDF(sdf, resX, resY, resZ, options = {})","dualContouringFunction(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Extract an isosurface from a 3D SDF grid using Dual Contouring. Parameters: (Float32Array) — — signed distance values [x + y resX + z resX resY] (number) — — grid resolution X (number) — — grid resolution Y (number) — — grid resolution Z (Object) — No description in source JSDoc. (number[]) — — world position of grid corner (default [0,0,0]) (number) — — size of each voxel (default 1) (number) — — isosurface threshold (default 0) (number) — — sharpness threshold 0 1 (default 0.3, higher = sharper) Returns: } Dual Contour an analytical SDF function. Parameters: (Function) — — (x, y, z) = signed distance (number[]) — — [x, y, z] minimum corner (number[]) — — [x, y, z] maximum corner (number) — — voxels per longest axis (default 64) (Object) — No description in source JSDoc. (number) — — 0 1, higher = sharper features (default 0.3) Returns: } <! HUMAN NOTES Notes & Examples No hand","contentHash":"0ff9332af297b9c4ab483f9b70bd437767a7cff37237c7bda467977aa7978606"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/DualContouring.md::0001","path":"engine/reference/kaolin/ops/conversions/DualContouring.md","title":"kaolin/ops/conversions/DualContouring.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/DualContouring.js","updated":"","headings":["kaolin/ops/conversions/DualContouring.js","Functions","dualContouringSDF(sdf, resX, resY, resZ, options = {})","dualContouringFunction(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"64) (Object) — No description in source JSDoc. (number) — — 0 1, higher = sharper features (default 0.3) Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c396d113a73feaf3f6c2fc9fc76102cef3e7f67c1bed028223167c5107e02e0f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/FlexiCubes.md::0000","path":"engine/reference/kaolin/ops/conversions/FlexiCubes.md","title":"kaolin/ops/conversions/FlexiCubes.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/FlexiCubes.js","updated":"","headings":["kaolin/ops/conversions/FlexiCubes.js","Functions","flexiCubesSDF(sdf, resX, resY, resZ, options = {})","flexiCubesFunction(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Extract an isosurface from a 3D SDF grid using FlexiCubes. Parameters: (Float32Array) — — signed distance values [x + y resX + z resX resY] (number) — — grid resolution X (number) — — grid resolution Y (number) — — grid resolution Z (Object) — No description in source JSDoc. (number[]) — — world position of grid corner [0,0,0] (number) — — size of each voxel (default 1) (number) — — isosurface threshold (default 0) (number) — — vertex flex strength 0 1 (default 0.5) Returns: } FlexiCubes extraction from an analytical SDF function. Parameters: (Function) — — (x, y, z) = signed distance (number[]) — — [x, y, z] minimum corner (number[]) — — [x, y, z] maximum corner (number) — — voxels per longest axis","contentHash":"81f2dbc9e25efa0c0cdad15c632bde97b1d86a4eba5251b348223cd12002ca69"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/FlexiCubes.md::0001","path":"engine/reference/kaolin/ops/conversions/FlexiCubes.md","title":"kaolin/ops/conversions/FlexiCubes.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/FlexiCubes.js","updated":"","headings":["kaolin/ops/conversions/FlexiCubes.js","Functions","flexiCubesSDF(sdf, resX, resY, resZ, options = {})","flexiCubesFunction(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"(Function) — — (x, y, z) = signed distance (number[]) — — [x, y, z] minimum corner (number[]) — — [x, y, z] maximum corner (number) — — voxels per longest axis (default 64) (Object) — No description in source JSDoc. (number) — — 0 1 vertex flexibility (default 0.5) Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c7c199f15a4930cc9f86ebbf5c481bf780d55a259c85c68a14299f2544e691c2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/MeshToPoints.md::0000","path":"engine/reference/kaolin/ops/conversions/MeshToPoints.md","title":"kaolin/ops/conversions/MeshToPoints.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/MeshToPoints.js","updated":"","headings":["kaolin/ops/conversions/MeshToPoints.js","Functions","sampleUniform(positions, indices, numSamples, options = {})","samplePoissonDisk(positions, indices, minDist, options = {})","farthestPointSample(points, numSamples)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Sample points uniformly on a triangle mesh surface. Uses area weighted triangle selection + barycentric random point. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (number) — — number of points to generate (Object) — No description in source JSDoc. (boolean) — — also output per point normals (default false) (number) — — random seed (default Date.now()) Returns: } Poisson disk sampling on a triangle mesh surface. Produces well distributed (blue noise) point sets. Uses dart throwing with spatial hash acceleration. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (number) — — minimum distance between samples (Object) — No description in source JSDoc. (number) — — attempts per sample (default 30) (number) — — hard cap on samples (default 100000) (boolean) — — output normals (default false) Returns: } 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. Parameters: (Float32Array) — — stride 3 (input candidates) (number) — — how many to select Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in","contentHash":"bc1277919c501918c63dd21a9255a813401217a1f57df03207d66d25a2355951"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/MeshToPoints.md::0001","path":"engine/reference/kaolin/ops/conversions/MeshToPoints.md","title":"kaolin/ops/conversions/MeshToPoints.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/MeshToPoints.js","updated":"","headings":["kaolin/ops/conversions/MeshToPoints.js","Functions","sampleUniform(positions, indices, numSamples, options = {})","samplePoissonDisk(positions, indices, minDist, options = {})","farthestPointSample(points, numSamples)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"— — stride 3 (input candidates) (number) — — how many to select Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0eae411e58b05a50219b8f1ef7a8c87e5e1ce8e946ad81f575320ed23e14b33a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/MeshToVoxel.md::0000","path":"engine/reference/kaolin/ops/conversions/MeshToVoxel.md","title":"kaolin/ops/conversions/MeshToVoxel.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/MeshToVoxel.js","updated":"","headings":["kaolin/ops/conversions/MeshToVoxel.js","Functions","meshToVoxel(positions, indices, options = {})","voxelGridToDensity(grid, resX, resY, resZ)","voxelGridToSDF(grid, resX, resY, resZ, voxelSize)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Voxelize a triangle mesh on the CPU. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (Object) — No description in source JSDoc. (number) — — voxels per longest axis (default 32) (number) — — padding voxels around mesh (default 1) (boolean) — — flood fill interior after surface (default false) Returns: } Convert voxel grid to a density field (Float32Array) for Marching Cubes. Surface voxels get density 0, interior 0, exterior < 0. Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: — density field, same dimensions Compute a signed distance field from a voxel grid. Uses distance transform (chamfer approximation). Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: — signed distance at each voxel center <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a","contentHash":"2d04bb54042a859a8fa84a121f34587ed4797c5415eee1e7a49cc01e4b4da139"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/MeshToVoxel.md::0001","path":"engine/reference/kaolin/ops/conversions/MeshToVoxel.md","title":"kaolin/ops/conversions/MeshToVoxel.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/MeshToVoxel.js","updated":"","headings":["kaolin/ops/conversions/MeshToVoxel.js","Functions","meshToVoxel(positions, indices, options = {})","voxelGridToDensity(grid, resX, resY, resZ)","voxelGridToSDF(grid, resX, resY, resZ, voxelSize)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"description in source JSDoc. Returns: — signed distance at each voxel center <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1b4e303243c7376501174dfd994144736731f20e075ffc0bfa417791627cb80b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/ParticlesToMesh.md::0000","path":"engine/reference/kaolin/ops/conversions/ParticlesToMesh.md","title":"kaolin/ops/conversions/ParticlesToMesh.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/ParticlesToMesh.js","updated":"","headings":["kaolin/ops/conversions/ParticlesToMesh.js","Functions","particlesToMesh(particlePositions, options = {})","particlesToMeshAnisotropic(positions, velocities, options = {})","particlesToMeshFast(positions, radius, resolution = 24)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions 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. Parameters: (Float32Array) — — stride 3 (Object) — No description in source JSDoc. (number) — — influence radius per particle (default auto) (number) — — density isosurface value (default 1.0) (number) — — grid voxels per longest axis (default 32) (number) — — padding voxels (default 2) (Float32Array) — — per particle radii (overrides uniform radius) (string) — — 'poly6' 'metaball' 'wyvill' (default 'poly6') Returns: } Build mesh from particles with anisotropic kernels. Each particle's influence is stretched along its velocity direction. Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 (same count as positions) (Object) — No description in source JSDoc. (number) — — base radius (default auto) (number) — — stretch factor along velocity (default 2.0) (number) — — grid res (default 32) (number) — — density threshold (default 1.0) Returns: } Quick mesh from particles using a simple point to voxel splat. Faster than full metaball but lower quality. Good for preview/LOD. Parameters: (Float32Array) — —","contentHash":"d25513f693545e340b3b15697cc6c95a518b50d681d119e21ad09ae416763128"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/ParticlesToMesh.md::0001","path":"engine/reference/kaolin/ops/conversions/ParticlesToMesh.md","title":"kaolin/ops/conversions/ParticlesToMesh.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/ParticlesToMesh.js","updated":"","headings":["kaolin/ops/conversions/ParticlesToMesh.js","Functions","particlesToMesh(particlePositions, options = {})","particlesToMeshAnisotropic(positions, velocities, options = {})","particlesToMeshFast(positions, radius, resolution = 24)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"mesh from particles using a simple point to voxel splat. Faster than full metaball but lower quality. Good for preview/LOD. Parameters: (Float32Array) — — stride 3 (number) — — splat radius (number) — — grid res (default 24) Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"89229f099cb8638a6bf311e8435a2dde17810be93f0f40157b73c0753162dc69"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/PointsToMesh.md::0000","path":"engine/reference/kaolin/ops/conversions/PointsToMesh.md","title":"kaolin/ops/conversions/PointsToMesh.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/PointsToMesh.js","updated":"","headings":["kaolin/ops/conversions/PointsToMesh.js","Functions","ballPivoting(points, normals, radius, options = {})","alphaShape(points, alpha)","convexHull(points)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions 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. Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 (oriented outward) (number) — — ball radius (Object) — No description in source JSDoc. (number) — — hard cap (default 200000) Returns: } Alpha shape surface reconstruction. Computes 3D Delaunay tetrahedralization, then removes tetrahedra whose circumradius exceeds 1/alpha. Extracts boundary triangles. Parameters: (Float32Array) — — stride 3 (number) — — controls concavity (larger = more convex) Returns: } Convex hull of a 3D point set. Uses incremental algorithm. For large sets, prefer GPUConvexHull.js. Parameters: (Float32Array) — — stride 3 Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fb57f2b1d23cb46159cf8b9f2b0550fee164f150d823de2e082ef6485a14b181"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/SDFToMesh.md::0000","path":"engine/reference/kaolin/ops/conversions/SDFToMesh.md","title":"kaolin/ops/conversions/SDFToMesh.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/SDFToMesh.js","updated":"","headings":["kaolin/ops/conversions/SDFToMesh.js","Functions","sdfToMesh(sdf, resX, resY, resZ, options = {})","sdfFunctionToMesh(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})","sdfCSGToMesh(ops, boundsMin, boundsMax, resolution = 64)","sdfSphere(radius)","sdfBox(halfX, halfY, halfZ)","sdfTorus(majorR, minorR)","sdfCylinder(radius, halfHeight)","sdfTranslate(sdfFn, tx, ty, tz)","sdfSmoothUnion(sdfA, sdfB, k)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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+) Functions Extract an isosurface from a 3D SDF grid using Marching Cubes. Parameters: (Float32Array) — — signed distance values, indexed [x + y resX + z resX resY] (number) — — grid resolution X (number) — — grid resolution Y (number) — — grid resolution Z (Object) — No description in source JSDoc. (Float32Array) — — world position of grid corner (default [0,0,0]) (number) — — size of each voxel (default 1) (number) — — isosurface threshold (default 0) Returns: } Mesh an analytical SDF function by evaluating it on a grid. Parameters: (Function) — — (x, y, z) = signed distance (Float32Array) — — [x, y, z] minimum corner (Float32Array) — — [x, y, z] maximum corner (number) — — voxels per longest axis (default 64) (Object) — No description in source JSDoc. (number) — — threshold (default 0) Returns: } Mesh a CSG combination of SDF primitives. Accepts an array of { sdf: fn(x,y,z), op: 'union' 'subtract' 'intersect' }. Parameters: (Array) — — [{ sdf: Function, op: string }] (Float32Array) — No description in source JSDoc. (Float32Array) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: } Sphere SDF centered at origin Box SDF centered at origin Torus SDF centered at origin, in XZ plane","contentHash":"7a8d153a9fa4c819af05d722d01c7656b104b7c68b0d862193b7e10efa698a17"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/SDFToMesh.md::0001","path":"engine/reference/kaolin/ops/conversions/SDFToMesh.md","title":"kaolin/ops/conversions/SDFToMesh.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/SDFToMesh.js","updated":"","headings":["kaolin/ops/conversions/SDFToMesh.js","Functions","sdfToMesh(sdf, resX, resY, resZ, options = {})","sdfFunctionToMesh(sdfFn, boundsMin, boundsMax, resolution = 64, options = {})","sdfCSGToMesh(ops, boundsMin, boundsMax, resolution = 64)","sdfSphere(radius)","sdfBox(halfX, halfY, halfZ)","sdfTorus(majorR, minorR)","sdfCylinder(radius, halfHeight)","sdfTranslate(sdfFn, tx, ty, tz)","sdfSmoothUnion(sdfA, sdfB, k)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"JSDoc. (number) — No description in source JSDoc. Returns: } Sphere SDF centered at origin Box SDF centered at origin Torus SDF centered at origin, in XZ plane Cylinder SDF centered at origin, along Y axis Translate an SDF function Smooth union of two SDF functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ef6cbeac02f74fd6df374c94f19ce5858f8c116d69f58a6f8e45072dbed78546"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/conversions/index.md::0000","path":"engine/reference/kaolin/ops/conversions/index.md","title":"kaolin/ops/conversions/index.js","description":"","kind":"reference","source":"engine/kaolin/ops/conversions/index.js","updated":"","headings":["kaolin/ops/conversions/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kaolin Conversions — Barrel exports Representation conversion modules: Mesh ↔ Voxel Mesh ↔ Points Mesh ↔ SDF Particles → Mesh Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"57b4f536937e525ee9c3da5d29de946228bbf79f496731044d96e98517fb08f5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/index.md::0000","path":"engine/reference/kaolin/ops/index.md","title":"kaolin/ops/index.js","description":"","kind":"reference","source":"engine/kaolin/ops/index.js","updated":"","headings":["kaolin/ops/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/kaolin/ops — Geometry operations Primitive processing functions for batched 3D models: meshes, voxelgrids, point clouds, and conversions between them. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6164ae4a7a92eda01741ce4c2e7c2dd12c8c3cb61e5ea96ad4028b5e6ddb82e8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/mesh/MeshOps.md::0000","path":"engine/reference/kaolin/ops/mesh/MeshOps.md","title":"kaolin/ops/mesh/MeshOps.js","description":"","kind":"reference","source":"engine/kaolin/ops/mesh/MeshOps.js","updated":"","headings":["kaolin/ops/mesh/MeshOps.js","Classes","class HalfEdgeMesh","Functions","computeFaceNormals(positions, indices, normalize = true)","computeVertexNormals(positions, indices)","computeVertexNormalsAngleWeighted(positions, indices)","computeFaceAreas(positions, indices)","computeSurfaceArea(positions, indices)","computeSignedVolume(positions, indices)","computeEdgeLengths(positions, indices)","computeBoundingBox(positions)","buildVertexAdjacency(indices, numVertices)","buildVertexFaceAdjacency(indices, numVertices)","buildFaceAdjacency(indices, numFaces)","laplacianSmooth(positions, indices, iterations = 1, lambda = 0.5, pinned = null)","taubinSmooth(positions, indices, iterations = 5, lambda = 0.5, mu = -0.53, pinned = null)","cotangentLaplacianSmooth(positions, indices, lambda = 0.5, pinned = null)","validateMesh(positions, indices)","computeCentroid(positions)","fromVertexTriangleClasses(vertices, triangles)","fromArrays(verts, faces)","toArrays(positions, indices)","fromInterleavedBuffer(interleavedBuffer, stride, posOffset, indexBuffer)","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes 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. Method Signature Summary Build the half edge connectivity from triangle soup. Get the source vertex of a half edge. Get the target vertex of a half edge. Is this half edge on the boundary (no twin)? Is this mesh closed (no boundary edges)? Iterate all half edges leaving a vertex (one ring traversal). Get all vertex indices adjacent to vertex v (one ring neighbors). Get all face indices adjacent to vertex v. Get face indices sharing an edge with face f. Get all boundary half edge indices (those with no twin). Get ordered boundary loops (arrays of vertex indices). Euler characteristic: V E + F For a closed genus 0 mesh, this should be 2. Get the valence (degree) of each vertex.","contentHash":"996ca8a204d35e20e1057c1bf4095eaa2caa067e96b73e0cb0597a0f3c2e89cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/mesh/MeshOps.md::0001","path":"engine/reference/kaolin/ops/mesh/MeshOps.md","title":"kaolin/ops/mesh/MeshOps.js","description":"","kind":"reference","source":"engine/kaolin/ops/mesh/MeshOps.js","updated":"","headings":["kaolin/ops/mesh/MeshOps.js","Classes","class HalfEdgeMesh","Functions","computeFaceNormals(positions, indices, normalize = true)","computeVertexNormals(positions, indices)","computeVertexNormalsAngleWeighted(positions, indices)","computeFaceAreas(positions, indices)","computeSurfaceArea(positions, indices)","computeSignedVolume(positions, indices)","computeEdgeLengths(positions, indices)","computeBoundingBox(positions)","buildVertexAdjacency(indices, numVertices)","buildVertexFaceAdjacency(indices, numVertices)","buildFaceAdjacency(indices, numFaces)","laplacianSmooth(positions, indices, iterations = 1, lambda = 0.5, pinned = null)","taubinSmooth(positions, indices, iterations = 5, lambda = 0.5, mu = -0.53, pinned = null)","cotangentLaplacianSmooth(positions, indices, lambda = 0.5, pinned = null)","validateMesh(positions, indices)","computeCentroid(positions)","fromVertexTriangleClasses(vertices, triangles)","fromArrays(verts, faces)","toArrays(positions, indices)","fromInterleavedBuffer(interleavedBuffer, stride, posOffset, indexBuffer)","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"boundary loops (arrays of vertex indices). Euler characteristic: V E + F For a closed genus 0 mesh, this should be 2. Get the valence (degree) of each vertex. Functions Compute per face normals (unnormalized = area weighted, or normalized). Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (boolean) — — if true, unit length normals Returns: — stride 3, length = numFaces 3 Compute per vertex normals via area weighted average of adjacent face normals. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 Returns: — stride 3, length = numVerts 3 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. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 Returns: — stride 3, length = numVerts 3 Compute area of each triangle face. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 Returns: — length = numFaces Total surface area of the mesh. Parameters: (Float32Array) — No description in source JSDoc. (Uint32Array) — No description in source JSDoc. Signed volume of a closed triangle mesh (divergence theorem). Positive if normals point outward with consistent winding. Parameters: (Float32Array) — No description in source JSDoc. (Uint32Array) — No description in source JSDoc. Compute lengths of all unique edges. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 Returns: } Compute axis aligned bounding box. Parameters: (Float32Array) — — stride 3 Returns: } Build vertex to vertex adjacency (sparse neighbor lists). Parameters: (Uint32Array) — — stride 3 (number) — No description in source JSDoc. Returns: — adjacency[v] = [neighbor indices] Build vertex to face adjacency. Parameters: (Uint32Array) — —","contentHash":"33abfbcba7b2407a3dbcf57bebabafa91b7123510af01445508b0762d46c5d83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/mesh/MeshOps.md::0002","path":"engine/reference/kaolin/ops/mesh/MeshOps.md","title":"kaolin/ops/mesh/MeshOps.js","description":"","kind":"reference","source":"engine/kaolin/ops/mesh/MeshOps.js","updated":"","headings":["kaolin/ops/mesh/MeshOps.js","Classes","class HalfEdgeMesh","Functions","computeFaceNormals(positions, indices, normalize = true)","computeVertexNormals(positions, indices)","computeVertexNormalsAngleWeighted(positions, indices)","computeFaceAreas(positions, indices)","computeSurfaceArea(positions, indices)","computeSignedVolume(positions, indices)","computeEdgeLengths(positions, indices)","computeBoundingBox(positions)","buildVertexAdjacency(indices, numVertices)","buildVertexFaceAdjacency(indices, numVertices)","buildFaceAdjacency(indices, numFaces)","laplacianSmooth(positions, indices, iterations = 1, lambda = 0.5, pinned = null)","taubinSmooth(positions, indices, iterations = 5, lambda = 0.5, mu = -0.53, pinned = null)","cotangentLaplacianSmooth(positions, indices, lambda = 0.5, pinned = null)","validateMesh(positions, indices)","computeCentroid(positions)","fromVertexTriangleClasses(vertices, triangles)","fromArrays(verts, faces)","toArrays(positions, indices)","fromInterleavedBuffer(interleavedBuffer, stride, posOffset, indexBuffer)","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"stride 3 (number) — No description in source JSDoc. Returns: — adjacency[v] = [neighbor indices] Build vertex to face adjacency. Parameters: (Uint32Array) — — stride 3 (number) — No description in source JSDoc. Returns: — vertexFaces[v] = [face indices] Build face to face adjacency (faces sharing an edge). Parameters: (Uint32Array) — — stride 3 (number) — No description in source JSDoc. Returns: — faceAdj[f] = [adjacent face indices] Uniform Laplacian smoothing (iterative). Moves each vertex toward the centroid of its neighbors. Parameters: (Float32Array) — — stride 3 (modified in place) (Uint32Array) — — stride 3 (number) — — number of smoothing passes (default 1) (number) — — step size 0..1 (default 0.5) (Set null","contentHash":"ef8b32c01fc8f932547dbe0c083af1c74896a2c53ebc51fcab83fa32c21a79ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/mesh/MeshSubdivision.md::0000","path":"engine/reference/kaolin/ops/mesh/MeshSubdivision.md","title":"kaolin/ops/mesh/MeshSubdivision.js","description":"","kind":"reference","source":"engine/kaolin/ops/mesh/MeshSubdivision.js","updated":"","headings":["kaolin/ops/mesh/MeshSubdivision.js","Functions","loopSubdivide(positions, indices, options = {})","loopSubdivideMulti(positions, indices, levels = 1, options = {})","catmullClarkSubdivide(positions, faceIndices, faceVertCounts, options = {})","catmullClarkSubdivideMulti(positions, faceIndices, faceVertCounts, levels = 1, options = {})","trianglesToFaceList(triIndices)","quadFacesToTriangles(positions, faceIndices, faceVertCounts)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Perform one level of Loop subdivision on a triangle mesh. Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 3 (triangles only) (Object) — No description in source JSDoc. (Set null) — — vertex indices to keep fixed (Set null) — — edge keys (lo 0x100000+hi) to treat as creases Returns: } Perform multiple levels of Loop subdivision. Parameters: (Float32Array) — No description in source JSDoc. (Uint32Array) — No description in source JSDoc. (number) — — subdivision levels (default 1) (Object) — — passed to each level Returns: } 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","contentHash":"b6bd1bc5a75dfb9ecc274ea6c01c8bd7ae92f5ac35e522c14876c3cb835102dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/mesh/MeshSubdivision.md::0001","path":"engine/reference/kaolin/ops/mesh/MeshSubdivision.md","title":"kaolin/ops/mesh/MeshSubdivision.js","description":"","kind":"reference","source":"engine/kaolin/ops/mesh/MeshSubdivision.js","updated":"","headings":["kaolin/ops/mesh/MeshSubdivision.js","Functions","loopSubdivide(positions, indices, options = {})","loopSubdivideMulti(positions, indices, levels = 1, options = {})","catmullClarkSubdivide(positions, faceIndices, faceVertCounts, options = {})","catmullClarkSubdivideMulti(positions, faceIndices, faceVertCounts, levels = 1, options = {})","trianglesToFaceList(triIndices)","quadFacesToTriangles(positions, faceIndices, faceVertCounts)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"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 Parameters: (Float32Array) — — stride 3 (Uint32Array) — — flat face indices (number[]) — — verts per face (3 or 4 each) (Object) — No description in source JSDoc. (Set null) — — vertices to keep fixed Returns: } Perform multiple levels of Catmull Clark subdivision. Parameters: (Float32Array) — No description in source JSDoc. (Uint32Array) — No description in source JSDoc. (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: } Convert a triangle mesh to the faceIndices + faceVertCounts format expected by catmullClarkSubdivide. Parameters: (Uint32Array) — — stride 3 Returns: } Convert Catmull Clark output (all quads) to triangles for rendering. Each quad is split into 2 triangles along the shorter diagonal. Parameters: (Float32Array) — No description in source JSDoc. (Uint32Array) — No description in source JSDoc. (number[]) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"828b460bb56a8f1e536f63bf78f2bef779dd5d38d50ce4a79da770ac7f0b20fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/mesh/MeshTetrahedralize.md::0000","path":"engine/reference/kaolin/ops/mesh/MeshTetrahedralize.md","title":"kaolin/ops/mesh/MeshTetrahedralize.js","description":"","kind":"reference","source":"engine/kaolin/ops/mesh/MeshTetrahedralize.js","updated":"","headings":["kaolin/ops/mesh/MeshTetrahedralize.js","Functions","tetrahedralize(positions, indices, options = {})","tetrahedralizeGrid(positions, indices, gridRes = 6)","computeTetQuality(positions, tetIndices)","extractTetSurface(tetIndices)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Tetrahedralize a closed triangle surface mesh. Parameters: (Float32Array) — — surface vertex positions, stride 3 (Uint32Array) — — surface triangle indices, stride 3 (Object) — No description in source JSDoc. (number) — — interior sample density (default 8, range 4 32) (number) — — min tet quality ratio (default 2.0, lower = more tets) (boolean) — — keep surface verts as is (default true) Returns: } Quick tetrahedralize using simple grid based approach. Faster but lower quality than full Delaunay. Good for real time use. Parameters: (Float32Array) — — surface vertex positions, stride 3 (Uint32Array) — — surface triangle indices, stride 3 (number) — — grid resolution per axis (default 6) Returns: }","contentHash":"8e6c89364ddfb343df7c9e78ae7a2524f508a99dea41c302f73a89fdcc43f0db"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/mesh/MeshTetrahedralize.md::0001","path":"engine/reference/kaolin/ops/mesh/MeshTetrahedralize.md","title":"kaolin/ops/mesh/MeshTetrahedralize.js","description":"","kind":"reference","source":"engine/kaolin/ops/mesh/MeshTetrahedralize.js","updated":"","headings":["kaolin/ops/mesh/MeshTetrahedralize.js","Functions","tetrahedralize(positions, indices, options = {})","tetrahedralizeGrid(positions, indices, gridRes = 6)","computeTetQuality(positions, tetIndices)","extractTetSurface(tetIndices)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"— — surface vertex positions, stride 3 (Uint32Array) — — surface triangle indices, stride 3 (number) — — grid resolution per axis (default 6) Returns: } Compute quality ratio for each tet (radius ratio = circumradius / inradius). Ideal = 3 (regular tet). Higher = worse (slivers). Parameters: (Float32Array) — — stride 3 (Uint32Array) — — stride 4 Returns: — quality per tet Extract the surface triangles of a tetrahedral mesh. Surface faces are those that belong to exactly one tetrahedron. Parameters: (Uint32Array) — — stride 4 Returns: — surface triangle indices, stride 3 <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bb6ea14c42d793baf513c773c6b5ee1d5316f35c0d58d935069adfe0d9ce3ba7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/mesh/index.md::0000","path":"engine/reference/kaolin/ops/mesh/index.md","title":"kaolin/ops/mesh/index.js","description":"","kind":"reference","source":"engine/kaolin/ops/mesh/index.js","updated":"","headings":["kaolin/ops/mesh/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/kaolin/ops/mesh — Core mesh operations Half edge data structure, adjacency, normals, area, Laplacian smoothing, validation, and subdivision surfaces (Loop + Catmull Clark). Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"20bb4ac1fab1c9f7ee080b8a606cb462e9851a837de2da032f927adbd61cd403"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/pointcloud/PointCloudOps.md::0000","path":"engine/reference/kaolin/ops/pointcloud/PointCloudOps.md","title":"kaolin/ops/pointcloud/PointCloudOps.js","description":"","kind":"reference","source":"engine/kaolin/ops/pointcloud/PointCloudOps.js","updated":"","headings":["kaolin/ops/pointcloud/PointCloudOps.js","Functions","buildSpatialHash(points, cellSize)","knnQuery(points, grid, cellSize, qi, k, maxRadius = Infinity)","batchKNN(points, k, searchRadius)","estimateNormals(points, k = 12, options = {})","estimateCurvature(points, normals, k = 12)","removeStatisticalOutliers(points, k = 20, stdRatio = 2.0)","removeRadiusOutliers(points, radius, minNeighbors = 3)","voxelDownsample(points, voxelSize, normals = null)","computeAABB(points)","computeCentroid(points)","computeOBB(points)","cropToAABB(points, min, max)","cropToSphere(points, cx, cy, cz, radius)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Build a spatial hash for fast neighbor queries. Parameters: (Float32Array) — — stride 3 (number) — No description in source JSDoc. Find k nearest neighbors for a single query point. Parameters: (Float32Array) — — stride 3 (Map<string, number[] ) — — from buildSpatialHash (number) — — hash cell size (number) — — query point index (number) — — number of neighbors (number) — — search radius (default Infinity) Returns: — indices of k nearest neighbors (sorted by distance) Batch k NN for all points. Parameters: (Float32Array) — — stride 3 (number) — — neighbors per point (number) — — optional max radius Returns: } 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. Parameters: (Float32Array) — — stride 3 (number) — — neighborhood size (default 12) (Object) — No description in source JSDoc. (Float32Array) — — [x,y,z] for consistent orientation (default [0,0,0]) (boolean) — — use MST propagation for global consistency (default false) Returns: — normals, stride 3 Estimate per point curvature from normals and neighborhood.","contentHash":"c2bcbaa149d629aa3346869790dace0f929a26fc12cc3fd6ac43f0357e972ff9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/pointcloud/PointCloudOps.md::0001","path":"engine/reference/kaolin/ops/pointcloud/PointCloudOps.md","title":"kaolin/ops/pointcloud/PointCloudOps.js","description":"","kind":"reference","source":"engine/kaolin/ops/pointcloud/PointCloudOps.js","updated":"","headings":["kaolin/ops/pointcloud/PointCloudOps.js","Functions","buildSpatialHash(points, cellSize)","knnQuery(points, grid, cellSize, qi, k, maxRadius = Infinity)","batchKNN(points, k, searchRadius)","estimateNormals(points, k = 12, options = {})","estimateCurvature(points, normals, k = 12)","removeStatisticalOutliers(points, k = 20, stdRatio = 2.0)","removeRadiusOutliers(points, radius, minNeighbors = 3)","voxelDownsample(points, voxelSize, normals = null)","computeAABB(points)","computeCentroid(points)","computeOBB(points)","cropToAABB(points, min, max)","cropToSphere(points, cx, cy, cz, radius)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"— — use MST propagation for global consistency (default false) Returns: — normals, stride 3 Estimate per point curvature from normals and neighborhood. Uses the ratio of the smallest eigenvalue to the sum of eigenvalues. Parameters: (Float32Array) — — stride 3 (Float32Array) — — stride 3 (from estimateNormals) (number) — — neighborhood size (default 12) Returns: — per point curvature [0..1], 0=flat, 1=high curvature Remove statistical outliers based on mean distance to k neighbors. Points with mean distance (global mean + stdRatio global std) are removed. Parameters: (Float32Array) — — stride 3 (number) — — neighbors to check (default 20) (number) — — standard deviation multiplier (default 2.0) Returns: } Remove points with fewer than minNeighbors within given radius. Parameters: (Float32Array) — — stride 3 (number) — — search radius (number) — — minimum count (default 3) Returns: } Downsample a point cloud by averaging points within each voxel cell. Parameters: (Float32Array) — — stride 3 (number) — — grid cell size (Float32Array) — — optional stride 3 (averaged per voxel) Returns: } Compute axis aligned bounding box. Compute centroid of a point cloud. Compute oriented bounding box via PCA. Returns axes (3 Float32Array[3]), half extents, and center. Crop points to an axis aligned bounding box. Crop points to a sphere. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5775f347442097099a4252bc32741ab869ad27b1aea25820cbee0c9fd44ebabe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/pointcloud/index.md::0000","path":"engine/reference/kaolin/ops/pointcloud/index.md","title":"kaolin/ops/pointcloud/index.js","description":"","kind":"reference","source":"engine/kaolin/ops/pointcloud/index.js","updated":"","headings":["kaolin/ops/pointcloud/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kaolin Point Cloud — Barrel exports Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"19f9d8956ff52f7b6387135e0fa95929aa7e320b9b3a28707f7fa31ddc01ee89"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/voxelgrid/VoxelOps.md::0000","path":"engine/reference/kaolin/ops/voxelgrid/VoxelOps.md","title":"kaolin/ops/voxelgrid/VoxelOps.js","description":"","kind":"reference","source":"engine/kaolin/ops/voxelgrid/VoxelOps.js","updated":"","headings":["kaolin/ops/voxelgrid/VoxelOps.js","Functions","voxelUnion(gridA, gridB)","voxelIntersect(gridA, gridB)","voxelSubtract(gridA, gridB)","voxelXOR(gridA, gridB)","voxelInvert(grid)","voxelFill(grid, resX, resY, resZ)","voxelHollow(grid, resX, resY, resZ, thickness = 1)","voxelDilate(grid, resX, resY, resZ, radius = 1)","voxelErode(grid, resX, resY, resZ, radius = 1)","voxelOpen(grid, resX, resY, resZ, radius = 1)","voxelClose(grid, resX, resY, resZ, radius = 1)","voxelDownsample(grid, resX, resY, resZ, factor = 2)","voxelUpsample(grid, resX, resY, resZ, factor = 2)","connectedComponents(grid, resX, resY, resZ)","removeSmallComponents(grid, resX, resY, resZ, minSize)","extractSurfaceVoxels(grid, resX, resY, resZ)","countSolid(grid)","computeVolume(grid, voxelSize)","computeSurfaceArea(grid, resX, resY, resZ, voxelSize)","createGrid(resX, resY, resZ)","createSphere(resX, resY, resZ, cx, cy, cz, radius)","createBox(resX, resY, resZ, minX, minY, minZ, maxX, maxY, maxZ)","Notes & Examples"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Union of two voxel grids (same dimensions required). Result = A OR B. Parameters: (Uint8Array) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. Intersection of two voxel grids. Result = A AND B. Subtraction: A minus B. Result = A AND NOT B. Symmetric difference (XOR). Result = A XOR B. Invert a voxel grid. Fill the interior of a closed voxel shell. Uses flood fill from boundary to mark exterior, then inverts. Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: — new grid with interior filled 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. Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — — shell thickness in voxels (default 1) Dilate: expand solid voxels by voxels (6","contentHash":"b56ebc21a51e5788b36547ae81161bec186da00650d06b5d0ae0adf7131af9d2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/voxelgrid/VoxelOps.md::0001","path":"engine/reference/kaolin/ops/voxelgrid/VoxelOps.md","title":"kaolin/ops/voxelgrid/VoxelOps.js","description":"","kind":"reference","source":"engine/kaolin/ops/voxelgrid/VoxelOps.js","updated":"","headings":["kaolin/ops/voxelgrid/VoxelOps.js","Functions","voxelUnion(gridA, gridB)","voxelIntersect(gridA, gridB)","voxelSubtract(gridA, gridB)","voxelXOR(gridA, gridB)","voxelInvert(grid)","voxelFill(grid, resX, resY, resZ)","voxelHollow(grid, resX, resY, resZ, thickness = 1)","voxelDilate(grid, resX, resY, resZ, radius = 1)","voxelErode(grid, resX, resY, resZ, radius = 1)","voxelOpen(grid, resX, resY, resZ, radius = 1)","voxelClose(grid, resX, resY, resZ, radius = 1)","voxelDownsample(grid, resX, resY, resZ, factor = 2)","voxelUpsample(grid, resX, resY, resZ, factor = 2)","connectedComponents(grid, resX, resY, resZ)","removeSmallComponents(grid, resX, resY, resZ, minSize)","extractSurfaceVoxels(grid, resX, resY, resZ)","countSolid(grid)","computeVolume(grid, voxelSize)","computeSurfaceArea(grid, resX, resY, resZ, voxelSize)","createGrid(resX, resY, resZ)","createSphere(resX, resY, resZ, cx, cy, cz, radius)","createBox(resX, resY, resZ, minX, minY, minZ, maxX, maxY, maxZ)","Notes & Examples"],"chunkIndex":1,"chunkCount":3,"text":"in source JSDoc. (number) — No description in source JSDoc. (number) — — shell thickness in voxels (default 1) Dilate: expand solid voxels by voxels (6 connected). Erode: shrink solid voxels by voxels (6 connected). Morphological open: erode then dilate (removes small protrusions). Morphological close: dilate then erode (fills small holes). Downsample a voxel grid by factor (majority vote per super voxel). Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — — downsample factor (default 2) Returns: } Upsample a voxel grid by factor (nearest neighbor replication). Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — — upsample factor (default 2) Returns: } Label connected components in a voxel grid (6 connected). Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: } Remove small connected components below a size threshold. Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — — minimum voxel count to keep Extract surface voxels (solid voxels with at least one empty 6 neighbor). Count solid voxels. Compute volume in world units. Compute approximate surface area (count exposed faces × voxelSize²). Create an empty voxel grid. Create a solid sphere in a voxel grid. Create a solid box in a voxel grid. <!","contentHash":"0122015ee45afaf821cbbb75e0cadf2e5d258ddbf9fc37de62148614012f56bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/voxelgrid/VoxelOps.md::0002","path":"engine/reference/kaolin/ops/voxelgrid/VoxelOps.md","title":"kaolin/ops/voxelgrid/VoxelOps.js","description":"","kind":"reference","source":"engine/kaolin/ops/voxelgrid/VoxelOps.js","updated":"","headings":["kaolin/ops/voxelgrid/VoxelOps.js","Functions","voxelUnion(gridA, gridB)","voxelIntersect(gridA, gridB)","voxelSubtract(gridA, gridB)","voxelXOR(gridA, gridB)","voxelInvert(grid)","voxelFill(grid, resX, resY, resZ)","voxelHollow(grid, resX, resY, resZ, thickness = 1)","voxelDilate(grid, resX, resY, resZ, radius = 1)","voxelErode(grid, resX, resY, resZ, radius = 1)","voxelOpen(grid, resX, resY, resZ, radius = 1)","voxelClose(grid, resX, resY, resZ, radius = 1)","voxelDownsample(grid, resX, resY, resZ, factor = 2)","voxelUpsample(grid, resX, resY, resZ, factor = 2)","connectedComponents(grid, resX, resY, resZ)","removeSmallComponents(grid, resX, resY, resZ, minSize)","extractSurfaceVoxels(grid, resX, resY, resZ)","countSolid(grid)","computeVolume(grid, voxelSize)","computeSurfaceArea(grid, resX, resY, resZ, voxelSize)","createGrid(resX, resY, resZ)","createSphere(resX, resY, resZ, cx, cy, cz, radius)","createBox(resX, resY, resZ, minX, minY, minZ, maxX, maxY, maxZ)","Notes & Examples"],"chunkIndex":2,"chunkCount":3,"text":"surface area (count exposed faces × voxelSize²). Create an empty voxel grid. Create a solid sphere in a voxel grid. Create a solid box in a voxel grid. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8b3f4629c85328ea220bae859d023440c5a8c8916aff0eaecfa57066f1a17f9d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/ops/voxelgrid/index.md::0000","path":"engine/reference/kaolin/ops/voxelgrid/index.md","title":"kaolin/ops/voxelgrid/index.js","description":"","kind":"reference","source":"engine/kaolin/ops/voxelgrid/index.js","updated":"","headings":["kaolin/ops/voxelgrid/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kaolin Voxel Grid — Barrel exports Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1740a0c2e6c4842593df1e4c15f9fa7e4ff0a8f1dbc0e7ab7c4916c4671dcece"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/physics/AutoTetMesh.md::0000","path":"engine/reference/kaolin/physics/AutoTetMesh.md","title":"kaolin/physics/AutoTetMesh.js","description":"","kind":"reference","source":"engine/kaolin/physics/AutoTetMesh.js","updated":"","headings":["kaolin/physics/AutoTetMesh.js","Functions","autoTetMesh(positions, indices, options = {})","createSoftBodyFromMesh(softBodySystem, positions, indices, material = 'rubber', options = {})","createSoftBodiesBatch(softBodySystem, meshes)","generateTetLODs(positions, indices, gridResolutions = [8, 5, 3])","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Full pipeline: surface mesh → tet mesh ready for GPUSoftBody. Parameters: (Float32Array) — — surface mesh vertices (stride 3) (Uint32Array) — — surface mesh triangles (stride 3) (Object) — No description in source JSDoc. (string) — — 'delaunay' 'grid' (default 'grid' for speed) (number) — — grid resolution for grid method (default 6) (number) — — interior points per unit volume for delaunay (default 8) (number) — — hard cap on node count (default 8000) (number) — — hard cap on tet count (default 20000) (boolean) — — run validation first (default true) (boolean) — — smooth surface before tet gen (default false) (number) — — Laplacian smooth iterations (default 2) (boolean) — — optimize tet quality (default true) (Set) — — indices to pin (default null) (string) — — 'none' 'bottom' 'top' 'custom' (default 'none') (number) — — fraction of bbox height for auto pin (default 0.05) Returns: {{ nodePositions: Float32Array, tetIndices: Uint32Array, surfaceIndices: Uint32Array, Create a GPUSoftBody from a surface mesh in one call. Parameters: (GPUSoftBody) — — initialized GPUSoftBody instance (Float32Array) — — surface mesh","contentHash":"523176c1a2d8eea31dc6645953756ae8ba1ae6dd522b7a0945078a67026e28da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/physics/AutoTetMesh.md::0001","path":"engine/reference/kaolin/physics/AutoTetMesh.md","title":"kaolin/physics/AutoTetMesh.js","description":"","kind":"reference","source":"engine/kaolin/physics/AutoTetMesh.js","updated":"","headings":["kaolin/physics/AutoTetMesh.js","Functions","autoTetMesh(positions, indices, options = {})","createSoftBodyFromMesh(softBodySystem, positions, indices, material = 'rubber', options = {})","createSoftBodiesBatch(softBodySystem, meshes)","generateTetLODs(positions, indices, gridResolutions = [8, 5, 3])","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Create a GPUSoftBody from a surface mesh in one call. Parameters: (GPUSoftBody) — — initialized GPUSoftBody instance (Float32Array) — — surface mesh vertices (Uint32Array) — — surface mesh triangles (number string) — — material index or preset name (Object) — — passed to autoTetMesh + createSoftBody Returns: null} Batch create multiple soft bodies from meshes. Parameters: (GPUSoftBody) — No description in source JSDoc. (Array) — — [{ positions, indices, material, options }] Returns: — [{ handle, tetResult } null] Generate multiple LOD levels of tet meshes from a single surface mesh. Parameters: (Float32Array) — No description in source JSDoc. (Uint32Array) — No description in source JSDoc. (number[]) — — e.g. [8, 5, 3] Returns: — array of autoTetMesh results, one per LOD Constants — Preset configurations for different use cases. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"59b53d2ee70f566156631dcbc4d332348a1444e1130bb54ea66a561cfb0c3971"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/physics/ParticleSkinning.md::0000","path":"engine/reference/kaolin/physics/ParticleSkinning.md","title":"kaolin/physics/ParticleSkinning.js","description":"","kind":"reference","source":"engine/kaolin/physics/ParticleSkinning.js","updated":"","headings":["kaolin/physics/ParticleSkinning.js","Functions","createDeformationCapture(restPositions)","captureFrame(capture, currentPositions)","extractDeformationModes(capture, numModes = 8)","computeSkinningWeights(decomposition, capture)","createSkinningEvaluator(restPositions, modes, meanDisplacement)","evaluateSkinning(evaluator, coefficients)","fitCoefficients(evaluator, targetPositions)","bakeToAnimation(capture, decomposition, fps = 60)","sampleAnimation(animation, time)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Capture deformation snapshots from a running soft body. Call this each frame during a training run. Returns: — accumulates snapshots Record a frame's deformed positions. Parameters: (DeformationCapture) — No description in source JSDoc. (Float32Array) — — deformed node positions (stride 3) Extract dominant deformation modes via PCA on displacement snapshots. Parameters: (DeformationCapture) — — with accumulated snapshots (number) — — number of modes to extract (default 8) Returns: } Compute skinning weights for each node per deformation mode. Uses least squares: for each snapshot, find mode weights that best reconstruct the displacement. Parameters: (Object) — — from extractDeformationModes (DeformationCapture) — No description in source JSDoc. Returns: } Create a runtime skinning evaluator. Parameters: (Float32Array) — — stride 3 (Float32Array[]) — — from","contentHash":"1645c9609e9e5ac7bce961e5073dde0fe94094134d7aa3ed7d6d9600c1f49341"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/physics/ParticleSkinning.md::0001","path":"engine/reference/kaolin/physics/ParticleSkinning.md","title":"kaolin/physics/ParticleSkinning.js","description":"","kind":"reference","source":"engine/kaolin/physics/ParticleSkinning.js","updated":"","headings":["kaolin/physics/ParticleSkinning.js","Functions","createDeformationCapture(restPositions)","captureFrame(capture, currentPositions)","extractDeformationModes(capture, numModes = 8)","computeSkinningWeights(decomposition, capture)","createSkinningEvaluator(restPositions, modes, meanDisplacement)","evaluateSkinning(evaluator, coefficients)","fitCoefficients(evaluator, targetPositions)","bakeToAnimation(capture, decomposition, fps = 60)","sampleAnimation(animation, time)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"— No description in source JSDoc. Returns: } Create a runtime skinning evaluator. Parameters: (Float32Array) — — stride 3 (Float32Array[]) — — from extractDeformationModes (Float32Array) — — from extractDeformationModes Evaluate skinned deformation with given mode coefficients. Parameters: (SkinningEvaluator) — No description in source JSDoc. (Float32Array) — — length = numModes Returns: — deformed positions (stride 3) Fit mode coefficients to match a target deformation (least squares). Useful for transitioning from full FEM to skinned approximation. Parameters: (SkinningEvaluator) — No description in source JSDoc. (Float32Array) — — deformed positions to match Returns: — optimal coefficients Bake deformation snapshots into mode coefficient keyframes. Output can drive the skinning evaluator for replay without physics. Parameters: (DeformationCapture) — No description in source JSDoc. (Object) — — from extractDeformationModes (number) — — frames per second of capture (default 60) Returns: } Interpolate baked animation at a given time. Parameters: (Object) — — from bakeToAnimation (number) — — seconds Returns: — interpolated coefficients <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"21dc1ae5d47e29bcbad47b804aa6a1c97b54669f919bc97ed6179dae204212da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/kaolin/physics/index.md::0000","path":"engine/reference/kaolin/physics/index.md","title":"kaolin/physics/index.js","description":"","kind":"reference","source":"engine/kaolin/physics/index.js","updated":"","headings":["kaolin/physics/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kaolin Physics — Barrel exports Physics bridges: auto tet mesh generation + learned skinning. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d38964800d831f52d25db6579e4651e36f624808d79b7e14b629c1eb60cdb758"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/capability/RouteCapability.md::0000","path":"engine/reference/network/capability/RouteCapability.md","title":"network/capability/RouteCapability.js","description":"","kind":"reference","source":"engine/network/capability/RouteCapability.js","updated":"","headings":["network/capability/RouteCapability.js","Functions","makeRouteCapability({ principal, routeId, allow = DEFAULTROUTEALLOW, constraints = {}, expiresAt = null, singleUse = false, delegable = true, } = {})","attenuateRouteCapability(cap, { allow, predicate, key, label } = {})","authorizesRoute(cap, { principal, routeId, action, epoch, context = {} } = {})","createRouteCapabilityRegistry()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 . (also reused as is) tracks issuance, revocation, and single use consumption. Functions Mint a route capability. The capability's own is always ; the actual allow list is enforced by a caveat so it composes correctly with further narrowing. Parameters: (object) — No description in source JSDoc. (string) — holder's signer fingerprint (device/profile/membership) (string) — opaque route id (the capability's object) (string[]) — allowed route/ verbs (default: attach+subscribe) (object) — extra descriptive constraints (message kinds, byte caps, ...) (number) — operational time expiry epoch (boolean) — consumed on first use (e.g. invite capabilities) (boolean) — may be further attenuated/re delegated Returns: frozen capability 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. Parameters: (object) — parent capability (from makeRouteCapability) (object) — No description in source JSDoc. (string[]) — a subset of the parent's allow list ((ctx:object)= boolean) — extra caveat predicate (string) — No description in source JSDoc. (string) — No","contentHash":"6e0a6092bb42c7604645ab6d3367631922ae6b347414763bac68c96624defb50"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/capability/RouteCapability.md::0001","path":"engine/reference/network/capability/RouteCapability.md","title":"network/capability/RouteCapability.js","description":"","kind":"reference","source":"engine/network/capability/RouteCapability.js","updated":"","headings":["network/capability/RouteCapability.js","Functions","makeRouteCapability({ principal, routeId, allow = DEFAULTROUTEALLOW, constraints = {}, expiresAt = null, singleUse = false, delegable = true, } = {})","attenuateRouteCapability(cap, { allow, predicate, key, label } = {})","authorizesRoute(cap, { principal, routeId, action, epoch, context = {} } = {})","createRouteCapabilityRegistry()","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"(string[]) — a subset of the parent's allow list ((ctx:object)= boolean) — extra caveat predicate (string) — No description in source JSDoc. (string) — No description in source JSDoc. Returns: new, strictly narrower capability Check whether a capability authorizes a specific route action right now. Parameters: (object) — No description in source JSDoc. (object) — No description in source JSDoc. (string) — requester's signer fingerprint (string) — No description in source JSDoc. (string) — one of ROUTE ACTIONS (number) — No description in source JSDoc. (object) — extra caveat context Returns: } Create a fresh registry to issue/revoke/consume route capabilities in. Constants — Default allow list for a freshly minted route capability (network plan §10). — All route verbs the network layer currently understands. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2a5fdd8ecb04cc934aeed7773c137b6c4aa6567a2677c3469ba2a0d2753b8c66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/AnonymityMode.md::0000","path":"engine/reference/network/carrier/AnonymityMode.md","title":"network/carrier/AnonymityMode.js","description":"","kind":"reference","source":"engine/network/carrier/AnonymityMode.js","updated":"","headings":["network/carrier/AnonymityMode.js","Functions","selectAnonymityMode({ isSelfDevice = false, groupApproved = false, trustPending = false, highRiskOverride = false } = {})","transportTruthLabel(mode)","allowsDirectTransport(mode)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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). Parameters: (object) — No description in source JSDoc. (boolean) — No description in source JSDoc. (boolean) — No description in source JSDoc. (boolean) — No description in source JSDoc. (boolean) — force anonymous regardless of trust Returns: one of ANONYMITY MODE Human readable, honest transport label for the UI (§42). Whether a mode permits direct (non relayed) transport — direct may reveal network metadata to the peer (§42). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9939087ccbc2874fa109422938735658bec931a857bd3cff7a7f5f7b7b1edbe5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/CarrierForwarder.md::0000","path":"engine/reference/network/carrier/CarrierForwarder.md","title":"network/carrier/CarrierForwarder.js","description":"","kind":"reference","source":"engine/network/carrier/CarrierForwarder.js","updated":"","headings":["network/carrier/CarrierForwarder.js","Functions","evaluateForward({ packet, dedupeCache, rateLimiter, dedupeTtlMs = 60000, now = Date.now()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 as is (network plan §29 dedupe applies uniformly to control/route/carrier traffic). Functions Decide whether to forward a carrier packet. Parameters: (object) — No description in source JSDoc. (object) — from makeCarrierPacket() (object) — from createDedupeCache() (object) — from createRateLimiter() (number) — =60000] (number) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6afcf510cd555b200f401d09a9c43a94de3cdf1b0608c35013d6283d91ac5851"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/CarrierIdentity.md::0000","path":"engine/reference/network/carrier/CarrierIdentity.md","title":"network/carrier/CarrierIdentity.js","description":"","kind":"reference","source":"engine/network/carrier/CarrierIdentity.js","updated":"","headings":["network/carrier/CarrierIdentity.js","Functions","createCarrierIdentityRegistry()","buildCarrierIdentityAnnounce(selfPeerId, ecdhPublicKeyRaw)","handleCarrierIdentityMessage(registry, fromPeerId, op)","lookupCarrierRecipientKey(registry, peerId)","listKnownCarrierRecipients(registry)","forgetCarrierRecipient(registry, peerId)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: network/carrier/CarrierIdentity.js — announces a node's carrier layer (§26) ECDH onion recipient public key to its current mesh peers. Closes the gap '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 , typically from ), cached locally so a future 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. 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). Functions Create an empty registry of peerId carrier recipient ECDH public key. Build the announce message to hand to a mesh session's . Returns null if this node has no key to announce. Feed every relevant message through this, alongside / / 's own handlers (same chaining pattern). Returns: true if this message was a carrier identity announce (handled) Look up a previously announced peer's carrier recipient ECDH public key (raw bytes), or null. List peerIds this node has learned a carrier recipient key for. Forget a peer's announced key (e.g. on disconnect/leave). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8be55424ca4c3961c29166e93cae283a96fbdf9c8fe341863d28bba8b395ec60"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/CarrierPacket.md::0000","path":"engine/reference/network/carrier/CarrierPacket.md","title":"network/carrier/CarrierPacket.js","description":"","kind":"reference","source":"engine/network/carrier/CarrierPacket.js","updated":"","headings":["network/carrier/CarrierPacket.js","Functions","makeCarrierPacket({ routeId, ttl = 4, expiresAt = null, sealed } = {})","decrementCarrierTtl(packet)","isCarrierPacketExpired(packet, now = Date.now()","isCarrierTtlExhausted(packet)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Wrap a sealed onion packet for carrier forwarding. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (number) — =4] max remaining hops (network plan §35) (number) — No description in source JSDoc. (object) — from buildSealedPacket()/peelSealedPacket().forward Return a new carrier packet with ttl decremented by 1 (does not mutate the input). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1a1ab47a467b900f545553b24e74b8d7e68b0b4097901c459f0defefe97b1159"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/CarrierRelay.md::0000","path":"engine/reference/network/carrier/CarrierRelay.md","title":"network/carrier/CarrierRelay.js","description":"","kind":"reference","source":"engine/network/carrier/CarrierRelay.js","updated":"","headings":["network/carrier/CarrierRelay.js","Functions","createCarrierRelay({ sendToPeer, topology, dedupeCache, rateLimiter, recipientEcdhPrivateKey = null, onPayloadReceived = ()","relayCarrierPacket(relay, nextHopPeerId, packet)","async handleCarrierRelayMessage(relay, fromPeerId, op)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ( / ) 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 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 , 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. Functions Parameters: (object) — No description in source JSDoc. ((peerId:string, data:object) = void) — e.g. (object) — from (object) —","contentHash":"d240de588922cc48f704a10f6fd962204d9961afe592d949c6737c69da044008"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/CarrierRelay.md::0001","path":"engine/reference/network/carrier/CarrierRelay.md","title":"network/carrier/CarrierRelay.js","description":"","kind":"reference","source":"engine/network/carrier/CarrierRelay.js","updated":"","headings":["network/carrier/CarrierRelay.js","Functions","createCarrierRelay({ sendToPeer, topology, dedupeCache, rateLimiter, recipientEcdhPrivateKey = null, onPayloadReceived = ()","relayCarrierPacket(relay, nextHopPeerId, packet)","async handleCarrierRelayMessage(relay, fromPeerId, op)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"the next hop id. Functions Parameters: (object) — No description in source JSDoc. ((peerId:string, data:object) = void) — e.g. (object) — from (object) — from — carrier layer dedupe (see CarrierForwarder.js), separate from the mesh's own gossip dedupe (object) — from (CryptoKey) — this node's ECDH private key, if it can be an onion recipient/intermediate hop ((payload: ) = void) — called with the final plaintext payload when THIS node is the packet's ultimate recipient Returns: relay state 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). Returns: } Feed every relevant message through this (e.g. from , alongside 's own — 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. Returns: true if this message was a carrier relay message (handled) Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2d8a67f01524ff0bc3a8eb57759da0b67b2e011cb9b1dce734e3b4fa735604cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/RateLimiter.md::0000","path":"engine/reference/network/carrier/RateLimiter.md","title":"network/carrier/RateLimiter.js","description":"","kind":"reference","source":"engine/network/carrier/RateLimiter.js","updated":"","headings":["network/carrier/RateLimiter.js","Functions","createRateLimiter({ capacity = 30, refillPerSecond = 10 } = {})","tryConsume(limiter, cost = 1, now = Date.now()","availableTokens(limiter, now = Date.now()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create a token bucket. Parameters: (object) — No description in source JSDoc. (number) — =30] max burst size (number) — =10] steady state rate Try to consume tokens. Returns false (caller should drop/reject) if insufficient. Tokens currently available (after applying refill for elapsed time). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a2b0fab590617d69283eb1c2ad5ea3e007002995b0add6d8bf2b7f57671c3afb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/SealedPacket.md::0000","path":"engine/reference/network/carrier/SealedPacket.md","title":"network/carrier/SealedPacket.js","description":"","kind":"reference","source":"engine/network/carrier/SealedPacket.js","updated":"","headings":["network/carrier/SealedPacket.js","Functions","async buildSealedPacket({ hops, payload } = {})","async peelSealedPacket(sealedLayer, recipientPrivateKey)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: network/carrier/SealedPacket.js — multi hop onion sealed packets (network plan §24/§26 public carrier layer). Phase 0 audit finding: 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 ( ) 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. Functions Build a multi hop sealed packet. Parameters: (object) — No description in source JSDoc. ( ) — JSON serializable final payload Returns: the outer sealed layer, addressed to hops[0] Peel one layer with this hop's ECDH private key. Returns: {done:true, payload: } null } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"de3ca1fdf8afa49b5efed44a16094ce84bbed22a5f218a15a8739a65f0c67608"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/carrier/index.md::0000","path":"engine/reference/network/carrier/index.md","title":"network/carrier/index.js","description":"","kind":"reference","source":"engine/network/carrier/index.js","updated":"","headings":["network/carrier/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/ChunkCache.md::0000","path":"engine/reference/network/chunks/ChunkCache.md","title":"network/chunks/ChunkCache.js","description":"","kind":"reference","source":"engine/network/chunks/ChunkCache.js","updated":"","headings":["network/chunks/ChunkCache.js","Functions","createChunkCache({ maxEntries = 128, maxBytes = 64  1024  1024 } = {})","cacheVerifiedChunk(cache, { chunkId, fragmentRoot, bytes } = {})","readCachedChunk(cache, chunkId)","chunkCacheStatus(cache)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Bounded in memory LRU used only while the browser endpoint is alive. Store bytes that the caller has already content/Merkle verified. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0f6b5ec4426ef67952950117e41dc3196500b67e8074e2f149a2520b20654495"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/ChunkFragmenter.md::0000","path":"engine/reference/network/chunks/ChunkFragmenter.md","title":"network/chunks/ChunkFragmenter.js","description":"","kind":"reference","source":"engine/network/chunks/ChunkFragmenter.js","updated":"","headings":["network/chunks/ChunkFragmenter.js","Functions","splitIntoChunks(bytes, chunkSize = DEFAULTCHUNKBYTES)","splitChunkIntoFragments(chunkBytes, fragmentSize = DEFAULTFRAGMENTBYTES)","reassembleFragments(fragments)","reassembleChunks(chunks)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: network/chunks/ChunkFragmenter.js — split large objects into chunks, and chunks into transport sized fragments (network plan §27/§31/§32). Functions Split an object's bytes into chunks no larger than (which must not exceed the network wide 4MB ceiling). Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. Split one chunk's bytes into transport sized fragments. Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. Concatenate fragments back into one chunk's bytes. Concatenate chunks back into the full object's bytes. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f89c1743d48bec2ef9f785c3124e2a6ea7e7ca0b19e4e82f7f81dccde7b5ac67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/ChunkLimits.md::0000","path":"engine/reference/network/chunks/ChunkLimits.md","title":"network/chunks/ChunkLimits.js","description":"","kind":"reference","source":"engine/network/chunks/ChunkLimits.js","updated":"","headings":["network/chunks/ChunkLimits.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: network/chunks/ChunkLimits.js — size ceilings/defaults (network plan §27). Constants — Network wide hard ceiling for one logical chunk. Not the default — a ceiling. — Sensible default chunk size (§27: \"512 KB 1 MB\"). — Default transport fragment size (§27/§28; matches WebRTC DataChannel's assumed default ). — Experimental larger fragment size for trusted high bandwidth links. — Soft caps for non bulk message classes (§27). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ba2b96a496312c54532297f512ad85d2b89260ea56b4f8677a86089fd654bfcc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/ChunkTransport.md::0000","path":"engine/reference/network/chunks/ChunkTransport.md","title":"network/chunks/ChunkTransport.js","description":"","kind":"reference","source":"engine/network/chunks/ChunkTransport.js","updated":"","headings":["network/chunks/ChunkTransport.js","Functions","createChunkTransport({ sendToPeer, maxInFlightBytes, getChunk = async ()","requestChunkFromPeer(transport, { peerId, chunkId, fragmentRoot, timeoutMs = REQUESTTIMEOUTMS, lane = PRIORITYLANE.NORMAL, } = {})","enqueueChunkSend(transport, { peerId, chunkId, chunkBytes, fragmentRoot, lane = PRIORITYLANE.NORMAL, fragmentSize = DEFAULTFRAGMENTBYTES })","handleChunkTransportMessage(transport, peerId, op)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 function matching engine/collab/CollabCore.js's signature (which already auto chunks anything over 60KB to dodge SCTP frame limits and reassembles transparently on the receive side, and round trips natively via CollabCodec.js's msgpack format) rather than importing CollabCore itself. Callers feed every relevant message through 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 — only a handful of non critical types like get dropped under buffer pressure); blasting every fragment of a multi MB object immediately would build unbounded . 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 ( ), not merely once handed to the transport. Functions Parameters: (object) — No description in source JSDoc. ((peerId:string, data:object) = void) — e.g. (number) — No description in source JSDoc. Returns: transport state — pass to enqueueChunkSend/handleChunkTransportMessage Ask one peer for a manifest declared chunk and await its verified bytes. Enqueue one chunk's fragments for sending to a peer.","contentHash":"23ef60a464a0f0d039bd0a85af440e732f822c95234404cac347719ea89fa681"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/ChunkTransport.md::0001","path":"engine/reference/network/chunks/ChunkTransport.md","title":"network/chunks/ChunkTransport.js","description":"","kind":"reference","source":"engine/network/chunks/ChunkTransport.js","updated":"","headings":["network/chunks/ChunkTransport.js","Functions","createChunkTransport({ sendToPeer, maxInFlightBytes, getChunk = async ()","requestChunkFromPeer(transport, { peerId, chunkId, fragmentRoot, timeoutMs = REQUESTTIMEOUTMS, lane = PRIORITYLANE.NORMAL, } = {})","enqueueChunkSend(transport, { peerId, chunkId, chunkBytes, fragmentRoot, lane = PRIORITYLANE.NORMAL, fragmentSize = DEFAULTFRAGMENTBYTES })","handleChunkTransportMessage(transport, peerId, op)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Ask one peer for a manifest declared chunk and await its verified bytes. 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. Parameters: (object) — No description in source JSDoc. (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — expected content hash (Manifest.js chunk entry's chunkId) (Uint8Array) — No description in source JSDoc. (string) — expected merkle root (Manifest.js chunk entry's fragmentRoot) (number) — FlowControl.PRIORITY LANE, default NORMAL (number) — No description in source JSDoc. Feed every message through this (e.g. from ). 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. Returns: true if this message was a chunk transport message (handled) Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"57076e9a796ee3ad8d81f56f9d95adb75d7f174671339251987a311eb912033b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/ChunkVerifier.md::0000","path":"engine/reference/network/chunks/ChunkVerifier.md","title":"network/chunks/ChunkVerifier.js","description":"","kind":"reference","source":"engine/network/chunks/ChunkVerifier.js","updated":"","headings":["network/chunks/ChunkVerifier.js","Functions","async verifyChunkFragments(fragments, expectedFragmentRoot)","async reassembleAndVerifyChunk(fragments, expectedChunkId)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: network/chunks/ChunkVerifier.js — verify received fragments/chunks against a manifest's declared hashes (network plan §31/§32). Functions 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. 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ae752c1b32f4c67e7b7aa4399a03875653289793722d4398f8829e23feea0f5d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/DedupeCache.md::0000","path":"engine/reference/network/chunks/DedupeCache.md","title":"network/chunks/DedupeCache.js","description":"","kind":"reference","source":"engine/network/chunks/DedupeCache.js","updated":"","headings":["network/chunks/DedupeCache.js","Functions","createDedupeCache()","hasSeen(cache, key, now = Date.now()","markSeen(cache, key, ttlMs, now = Date.now()","checkAndMark(cache, key, ttlMs, now = Date.now()","pruneDedupeCache(cache, now = Date.now()","dedupeCacheSize(cache)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create an empty dedupe cache. True if was marked seen and its TTL hasn't expired yet. Expired entries are lazily evicted. Mark as seen for milliseconds. Convenience: check and mark in one call — the usual receive path pattern (\"if already seen, drop; otherwise mark seen and process\"). Returns: true if this is a NEW key (caller should process it) Remove all expired entries. Returns the number removed. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7415a0121289490e9f4b32e178b0758023f88886183e6f58c7e60c0afc238786"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/FlowControl.md::0000","path":"engine/reference/network/chunks/FlowControl.md","title":"network/chunks/FlowControl.js","description":"","kind":"reference","source":"engine/network/chunks/FlowControl.js","updated":"","headings":["network/chunks/FlowControl.js","Functions","createFlowControl({ maxInFlightBytes = 16  1024  1024 } = {})","tryReserveCredit(fc, bytes)","releaseCredit(fc, bytes)","availableCredit(fc)","createPriorityQueue()","enqueue(pq, lane, item)","dequeue(pq)","isQueueEmpty(pq)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a flow control window. Try to reserve of send credit. Returns false (caller must pause) if it would exceed the window. Restore credit after a fragment is verified/written (or dropped/timed out). Bytes of credit still available right now. Create an empty multi lane priority queue. Enqueue an item on a priority lane (lower lane number = served first). Dequeue the next item, always draining the lowest non empty lane first. True if every lane is empty. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e736489d1a57f783768175a90fb6262fa1e2968d12365c61cdd42f6e905420b2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/Manifest.md::0000","path":"engine/reference/network/chunks/Manifest.md","title":"network/chunks/Manifest.js","description":"","kind":"reference","source":"engine/network/chunks/Manifest.js","updated":"","headings":["network/chunks/Manifest.js","Functions","async buildManifest({ objectId, scope = 'private', version = 1, chunks = [], permissions = [], encryptionEpoch = null, signer, } = {})","async verifyManifest(signedManifest)","manifestTotalSize(signedManifest)","manifestChunkIds(signedManifest)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Build + sign a manifest. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — e.g. 'group dev lab', 'public' (number) — No description in source JSDoc. (string[]) — No description in source JSDoc. (number) — No description in source JSDoc. (object) — No description in source JSDoc. Returns: signed manifest envelope Verify a manifest's protocol/type and signature. Total object size implied by a manifest's chunk list. List of chunk ids a manifest references, in order. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"257c6492202817e19f8893111104ae23ba7cd0231d28b5af9a2e18a012824f47"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/MerkleFragments.md::0000","path":"engine/reference/network/chunks/MerkleFragments.md","title":"network/chunks/MerkleFragments.js","description":"","kind":"reference","source":"engine/network/chunks/MerkleFragments.js","updated":"","headings":["network/chunks/MerkleFragments.js","Functions","async hashFragment(fragmentBytes)","async computeChunkHash(chunkBytes)","async computeFragmentHashes(fragments)","async computeMerkleRoot(fragmentHashes)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions SHA 256 hex hash of one fragment's raw bytes. SHA 256 hex hash of a full chunk's raw bytes (used as the chunk's content id). Hash every fragment of a chunk, in order. 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). Parameters: (string[]) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9c54f4e57640ba33fdfb5c13448788192f01bea33d1d848beaf6f2904658ebd3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/SwarmFetchCoordinator.md::0000","path":"engine/reference/network/chunks/SwarmFetchCoordinator.md","title":"network/chunks/SwarmFetchCoordinator.js","description":"","kind":"reference","source":"engine/network/chunks/SwarmFetchCoordinator.js","updated":"","headings":["network/chunks/SwarmFetchCoordinator.js","Classes","class SwarmFetchError extends Error","Functions","async fetchManifestFromSwarm({ signedManifest, transport, findProviders, fallbackPeers = ()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Resolve a signed manifest from many DHT providers, retrying failed peers, verifying every content hash, and preserving manifest chunk order. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0c9042400c1f42a563571a89518e331600628cf562653efa80d2f4bbddff671c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/SwarmScheduler.md::0000","path":"engine/reference/network/chunks/SwarmScheduler.md","title":"network/chunks/SwarmScheduler.js","description":"","kind":"reference","source":"engine/network/chunks/SwarmScheduler.js","updated":"","headings":["network/chunks/SwarmScheduler.js","Functions","planSwarmFetch({ chunkIds, providers, maxLanes = 4 } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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 concurrent requests. Parameters: (object) — No description in source JSDoc. (string[]) — No description in source JSDoc. (Map<string,string[] ) — chunkId candidate peerIds (network plan §31 provider records) (number) — No description in source JSDoc. Returns: , lanes:Array<Array<{chunkId:string, peerId:string} , unresolved:string[], peerLoad:object }} <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e77ebae627575b29a53a7a482e6315bb3d68b039b8fcd4faca7859cebfa5140c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/chunks/index.md::0000","path":"engine/reference/network/chunks/index.md","title":"network/chunks/index.js","description":"","kind":"reference","source":"engine/network/chunks/index.js","updated":"","headings":["network/chunks/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/crypto/Hpke.md::0000","path":"engine/reference/network/crypto/Hpke.md","title":"network/crypto/Hpke.js","description":"","kind":"reference","source":"engine/network/crypto/Hpke.js","updated":"","headings":["network/crypto/Hpke.js","Functions","async generateHpkeKeyPair()","async hpkeSeal(recipientPublicKeyHex, plaintext, options = {})","async hpkeOpen(recipientPrivateKey, encHex, ciphertextHex, options = {})","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0a8b51c3cf5bc373977392ae3e8458fcb20da6cf25c54a60f6e73aa0684b6ec5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/crypto/OpaqueRoute.md::0000","path":"engine/reference/network/crypto/OpaqueRoute.md","title":"network/crypto/OpaqueRoute.js","description":"","kind":"reference","source":"engine/network/crypto/OpaqueRoute.js","updated":"","headings":["network/crypto/OpaqueRoute.js","Functions","async deriveOpaqueRoute({ routeSecret = null, projectId = 'default' } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/crypto/Trust.md::0000","path":"engine/reference/network/crypto/Trust.md","title":"network/crypto/Trust.js","description":"","kind":"reference","source":"engine/network/crypto/Trust.js","updated":"","headings":["network/crypto/Trust.js","Functions","canonicalJson(value)","async sha256Hex(value)","async verifyRawSignature(publicKeyHex, bytes, signatureHex)","async verifySignedManifest(signed, expectedPins, nowSeconds = Math.floor(Date.now()","async verifySignedV3Manifest(signed, expectedPins, nowSeconds = Math.floor(Date.now()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/crypto/index.md::0000","path":"engine/reference/network/crypto/index.md","title":"network/crypto/index.js","description":"","kind":"reference","source":"engine/network/crypto/index.js","updated":"","headings":["network/crypto/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/daemon/ParticleNetworkDaemon.md::0000","path":"engine/reference/network/daemon/ParticleNetworkDaemon.md","title":"network/daemon/ParticleNetworkDaemon.js","description":"","kind":"reference","source":"engine/network/daemon/ParticleNetworkDaemon.js","updated":"","headings":["network/daemon/ParticleNetworkDaemon.js","Classes","class ParticleNetworkDaemon","Functions","readParticleTrustFloor(networkRootId, nodeId, storage = globalThis.localStorage)","writeParticleTrustFloor(networkRootId, nodeId, floor, storage = globalThis.localStorage)","particleIceConfigurationReport(value)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Issue a short lived, route bound SSE State Channel lease from verified V3 trust. Functions 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. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"3fce2edbd5c4a2d619b50c36a598332bf7714553bbaa125ce55e2d7963f9e33f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/daemon/ParticleNetworkDaemonRegistry.md::0000","path":"engine/reference/network/daemon/ParticleNetworkDaemonRegistry.md","title":"network/daemon/ParticleNetworkDaemonRegistry.js","description":"","kind":"reference","source":"engine/network/daemon/ParticleNetworkDaemonRegistry.js","updated":"","headings":["network/daemon/ParticleNetworkDaemonRegistry.js","Functions","acquireParticleNetworkDaemon({ server, deviceSigner, onEvent = null, preferV3 = false } = {})","particleNetworkDaemonStats()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/daemon/ParticleNetworkPreferredDaemon.md::0000","path":"engine/reference/network/daemon/ParticleNetworkPreferredDaemon.md","title":"network/daemon/ParticleNetworkPreferredDaemon.js","description":"","kind":"reference","source":"engine/network/daemon/ParticleNetworkPreferredDaemon.js","updated":"","headings":["network/daemon/ParticleNetworkPreferredDaemon.js","Classes","class ParticleNetworkPreferredDaemon","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e63db485c62cc2bb1d79e98eda0cbf19f914893f184ab29c2e5c6275dd8ba333"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/daemon/index.md::0000","path":"engine/reference/network/daemon/index.md","title":"network/daemon/index.js","description":"","kind":"reference","source":"engine/network/daemon/index.js","updated":"","headings":["network/daemon/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/dht/BootstrapSource.md::0000","path":"engine/reference/network/dht/BootstrapSource.md","title":"network/dht/BootstrapSource.js","description":"","kind":"reference","source":"engine/network/dht/BootstrapSource.js","updated":"","headings":["network/dht/BootstrapSource.js","Functions","createBootstrapSource({ id, scan, advertise = null } = {})","createBootstrapRegistry()","registerBootstrapSource(registry, source)","async runBootstrap(registry)","flattenBootstrapResults(results)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ( ) 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 returns a \"last remembered identity\" hint, not a confirmed reachable peer. Functions Wrap a bootstrap source implementation. Parameters: (object) — No description in source JSDoc. (string) — stage name (e.g. 'lan', 'residentExtension', 'radio') (() = Promise<object[] ) — return known peer/route records this source currently has ((record:object) = Promise<void ) — publish our own presence via this source, if supported Create a registry of bootstrap sources, tried in registration order. Try each registered source in order, collecting whatever records each one returns (a source throwing/timing out just contributes nothing — this never fails","contentHash":"381573e0f72de6dab7e1934e9944db5776c97e17f3e7da896ba343fa4362baf3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/dht/BootstrapSource.md::0001","path":"engine/reference/network/dht/BootstrapSource.md","title":"network/dht/BootstrapSource.js","description":"","kind":"reference","source":"engine/network/dht/BootstrapSource.js","updated":"","headings":["network/dht/BootstrapSource.js","Functions","createBootstrapSource({ id, scan, advertise = null } = {})","createBootstrapRegistry()","registerBootstrapSource(registry, source)","async runBootstrap(registry)","flattenBootstrapResults(results)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"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). Returns: } Flatten runBootstrap()'s per source results into one record list, tagged with their source. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"deab14711576b57fcaadd3550eb08f97785d4b958b0051e8fc4b3b16f3d8f428"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/dht/DhtMessages.md::0000","path":"engine/reference/network/dht/DhtMessages.md","title":"network/dht/DhtMessages.js","description":"","kind":"reference","source":"engine/network/dht/DhtMessages.js","updated":"","headings":["network/dht/DhtMessages.js","Functions","makeFindPeerMessage({ targetPeerId, requesterPeerId } = {})","makeFindRouteMessage({ routeId, requesterPeerId } = {})","makeFindProvidersMessage({ key, requesterPeerId } = {})","makeAnnounceProviderMessage({ key, peerId, ttlMs } = {})","makeAnnounceRouteMessage({ routeId, peerId, services = [], ttlMs } = {})","makePeerExchangeMessage({ knownPeers = [] } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ) 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. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e4144fc3892900c18f593989316b69beabfdd7ca27f6d97271ec3367dbcb9534"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/dht/DhtNode.md::0000","path":"engine/reference/network/dht/DhtNode.md","title":"network/dht/DhtNode.js","description":"","kind":"reference","source":"engine/network/dht/DhtNode.js","updated":"","headings":["network/dht/DhtNode.js","Functions","createDhtNode({ selfPeerId } = {})","rememberPeer(node, peerId, { routeHints = [], reportedBy = null, direct = false } = {}, now = Date.now()","handleFindPeer(node, targetPeerId)","handleFindRoute(node, routeId, now = Date.now()","handleFindProviders(node, key, now = Date.now()","handleAnnounceProvider(node, { key, peerId, ttlMs } = {}, now = Date.now()","handlePeerExchange(node, knownPeers = [], now = Date.now()","listKnownPeers(node, { limit = 64 } = {})","providersMapForKeys(node, keys, now = Date.now()","pruneDhtNode(node, { peerStaleMs = 30  60  1000 } = {}, now = Date.now()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create a local DHT node view. Record/refresh knowledge of a peer (from PEER EXCHANGE or any direct contact). Answer a local FIND PEER query: do we know this peer, and if so, its route hints? Answer a local FIND ROUTE query: any peers providing this route? Answer a local FIND PROVIDERS query for an arbitrary key (chunk hash, service name, ...). Ingest an ANNOUNCE PROVIDER (route or generic key peer). Ingest a PEER EXCHANGE payload (array of ). Bounded peer summaries for authenticated PEER EXCHANGE messages. Build the providers map SwarmScheduler.planSwarmFetch expects for a list of keys. Prune expired provider records and stale peer knowledge. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"80954cf0449514234e8fc6406d1d972c4fa1264089b296533467623539cf6e27"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/dht/DhtTransport.md::0000","path":"engine/reference/network/dht/DhtTransport.md","title":"network/dht/DhtTransport.js","description":"","kind":"reference","source":"engine/network/dht/DhtTransport.js","updated":"","headings":["network/dht/DhtTransport.js","Functions","createDhtTransport({ sendToPeer, topology, node, verifyControlIdentity = async ()","findPeerOverNetwork(transport, targetPeerId, { timeoutMs = DEFAULTQUERYTIMEOUTMS } = {})","findRouteOverNetwork(transport, routeId, { timeoutMs = DEFAULTQUERYTIMEOUTMS } = {})","findProvidersOverNetwork(transport, key, { timeoutMs = DEFAULTQUERYTIMEOUTMS } = {})","async announceProviderOverNetwork(transport, { key, ttlMs, signer } = {})","async announceRouteOverNetwork(transport, { routeId, services = [], ttlMs, signer } = {})","async sendPeerExchangeOverNetwork(transport, { peerId, signer, limit = MAXPEEREXCHANGE } = {})","getDhtTransportHealth(transport)","handleDhtMessage(transport, fromPeerId, op)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ( ) 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 ( ) — 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): entries are not proactively pruned by this module; a real deployment would want a TTL sweep alongside . Functions Parameters: (object) — No description in source JSDoc. ((peerId:string, data:object) = void) — e.g. (object) — from (object) — from — local knowledge this node answers queries from Returns: transport state Query the mesh for a peer's route hints. Checks local knowledge first; only floods the network if we don't already know it. Returns: null } null if no answer arrived in time Query the mesh for a route's live providers. Checks local knowledge first. Query the mesh for an","contentHash":"c13fbea73847fb87294c0638939afbad847187c6de7eee02cbd344c74886b90a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/dht/DhtTransport.md::0001","path":"engine/reference/network/dht/DhtTransport.md","title":"network/dht/DhtTransport.js","description":"","kind":"reference","source":"engine/network/dht/DhtTransport.js","updated":"","headings":["network/dht/DhtTransport.js","Functions","createDhtTransport({ sendToPeer, topology, node, verifyControlIdentity = async ()","findPeerOverNetwork(transport, targetPeerId, { timeoutMs = DEFAULTQUERYTIMEOUTMS } = {})","findRouteOverNetwork(transport, routeId, { timeoutMs = DEFAULTQUERYTIMEOUTMS } = {})","findProvidersOverNetwork(transport, key, { timeoutMs = DEFAULTQUERYTIMEOUTMS } = {})","async announceProviderOverNetwork(transport, { key, ttlMs, signer } = {})","async announceRouteOverNetwork(transport, { routeId, services = [], ttlMs, signer } = {})","async sendPeerExchangeOverNetwork(transport, { peerId, signer, limit = MAXPEEREXCHANGE } = {})","getDhtTransportHealth(transport)","handleDhtMessage(transport, fromPeerId, op)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"know it. Returns: null } null if no answer arrived in time Query the mesh for a route's live providers. Checks local knowledge first. Query the mesh for an arbitrary key's providers (chunk hash, service name, ...). Checks local knowledge first. Authenticated, bounded provider announcement to current mesh neighbors. Authenticated route announcement; services are descriptive and bounded, never ambient authority. Send a signed, bounded sample of local peer knowledge to one connected peer. Feed every relevant message through this, alongside 's and 's own handlers (same \"return false if not ours\" chaining pattern). Returns: true if this message was a DHT transport message (handled) <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8400a03a1c93178378dee428a664d461720166526bce22c549009de9ef1d6244"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/dht/ProviderStore.md::0000","path":"engine/reference/network/dht/ProviderStore.md","title":"network/dht/ProviderStore.js","description":"","kind":"reference","source":"engine/network/dht/ProviderStore.js","updated":"","headings":["network/dht/ProviderStore.js","Functions","createProviderStore()","announceProvider(store, key, peerId, ttlMs = DEFAULTPROVIDERTTLMS, now = Date.now()","revokeProvider(store, key, peerId)","findProviders(store, key, now = Date.now()","providersMapFor(store, keys, now = Date.now()","pruneProviderStore(store, now = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 map. Functions Create an empty provider store. Announce that provides (e.g. a manifest chunk hash, route id, service name). Remove one provider's record for a key. Live (non expired) provider peerIds for a key, or []. Build the shape SwarmScheduler.planSwarmFetch expects, for a set of keys. Remove all expired provider records. Returns the number of (key, peerId) pairs removed. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"74a2c0235ba92f9510a499dcbcb7e02952fb678d921e7e2d2984a5047fbc763b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/dht/index.md::0000","path":"engine/reference/network/dht/index.md","title":"network/dht/index.js","description":"","kind":"reference","source":"engine/network/dht/index.js","updated":"","headings":["network/dht/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/endpoint/ParticleEndpointRuntime.md::0000","path":"engine/reference/network/endpoint/ParticleEndpointRuntime.md","title":"network/endpoint/ParticleEndpointRuntime.js","description":"","kind":"reference","source":"engine/network/endpoint/ParticleEndpointRuntime.js","updated":"","headings":["network/endpoint/ParticleEndpointRuntime.js","Classes","class ParticleEndpointRuntime","Functions","createParticleEndpointRuntime(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d4ecb0da4b5fa403be0eb91104cb31642a49b0ddece5acbeed252d41fb5b7757"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/endpoint/index.md::0000","path":"engine/reference/network/endpoint/index.md","title":"network/endpoint/index.js","description":"","kind":"reference","source":"engine/network/endpoint/index.js","updated":"","headings":["network/endpoint/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/groupCrypto/DeviceEncryptionKey.md::0000","path":"engine/reference/network/groupCrypto/DeviceEncryptionKey.md","title":"network/groupCrypto/DeviceEncryptionKey.js","description":"","kind":"reference","source":"engine/network/groupCrypto/DeviceEncryptionKey.js","updated":"","headings":["network/groupCrypto/DeviceEncryptionKey.js","Functions","async createDeviceEncryptionKeyPair()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions 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 /export the private key themselves via their own storage. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"559e645396fba13571e4126349f5a0e92fb3f659c05c02ea97cc2f0b9360b7ef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/groupCrypto/GroupEpoch.md::0000","path":"engine/reference/network/groupCrypto/GroupEpoch.md","title":"network/groupCrypto/GroupEpoch.js","description":"","kind":"reference","source":"engine/network/groupCrypto/GroupEpoch.js","updated":"","headings":["network/groupCrypto/GroupEpoch.js","Functions","createGroupCrypto({ groupId } = {})","async startEpoch(gc)","getCurrentEpoch(gc)","isEpochErased(gc, epoch)","async sealForEpoch(gc, epoch, plaintext)","async openEnvelope(gc, envelope)","async rotateEpoch(gc)","async makeWelcomePacket({ gc, epoch, recipientEcdhPublicKeyRaw } = {})","async openWelcomePacket({ gc, welcomePacket, recipientPrivateKey } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 (raw AES 256 GCM primitives) rather than the higher level class: welcome packets need to export/re wrap the raw epoch key material for a specific recipient's ECDH public key, and does not expose its internal CryptoKey for export. The crypto erase SEMANTICS (drop the key reference; GCM tamper detection) are identical to . Functions Create an empty group crypto state (no epochs started yet). Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. Start the next epoch with a fresh AES 256 GCM key. Returns the new epoch number. True if has no live key (never started here, or crypto erased). Seal a plaintext string under a specific epoch's key. Returns: } Open an envelope from . 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). 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","contentHash":"9039845d7d35925fce39362a8107a926bfa81a3e15089291e118e7f925a5fc1f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/groupCrypto/GroupEpoch.md::0001","path":"engine/reference/network/groupCrypto/GroupEpoch.md","title":"network/groupCrypto/GroupEpoch.js","description":"","kind":"reference","source":"engine/network/groupCrypto/GroupEpoch.js","updated":"","headings":["network/groupCrypto/GroupEpoch.js","Functions","createGroupCrypto({ groupId } = {})","async startEpoch(gc)","getCurrentEpoch(gc)","isEpochErased(gc, epoch)","async sealForEpoch(gc, epoch, plaintext)","async openEnvelope(gc, envelope)","async rotateEpoch(gc)","async makeWelcomePacket({ gc, epoch, recipientEcdhPublicKeyRaw } = {})","async openWelcomePacket({ gc, welcomePacket, recipientPrivateKey } = {})","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"key). 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. Returns: } 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. Parameters: (object) — No description in source JSDoc. (object) — sender's GroupCrypto (holds the epoch key) (number) — No description in source JSDoc. (ArrayBuffer Uint8Array) — from createDeviceEncryptionKeyPair() Returns: welcome packet 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 content sealed under it). Returns: true on success <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"3d58f1bab803f6a9364ffa628da52e6550e1279655b2e58f3cf7ea3e0dede90e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/groupCrypto/index.md::0000","path":"engine/reference/network/groupCrypto/index.md","title":"network/groupCrypto/index.js","description":"","kind":"reference","source":"engine/network/groupCrypto/index.js","updated":"","headings":["network/groupCrypto/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/groupLedger/GovernancePolicy.md::0000","path":"engine/reference/network/groupLedger/GovernancePolicy.md","title":"network/groupLedger/GovernancePolicy.js","description":"","kind":"reference","source":"engine/network/groupLedger/GovernancePolicy.js","updated":"","headings":["network/groupLedger/GovernancePolicy.js","Functions","createGovernancePolicy({ mode = GOVERNANCEMODES.MAJORITY, founders = ()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build a governance policy for a group. Parameters: (object) — No description in source JSDoc. (string) — one of GOVERNANCE MODES (() = Set<string ) — live founder membershipId set (() = number) — live member count (number) — required approvals for THRESHOLD mode Returns: } Constants — Governance actions that always require approval (network plan §17 eviction/bans). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"3047bda6ea2c504bb0bc6989a4f86f4fd7f7d353dfaf86578032c9aaecf8a234"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/groupLedger/GroupLedger.md::0000","path":"engine/reference/network/groupLedger/GroupLedger.md","title":"network/groupLedger/GroupLedger.js","description":"","kind":"reference","source":"engine/network/groupLedger/GroupLedger.js","updated":"","headings":["network/groupLedger/GroupLedger.js","Functions","createGroupLedger({ groupId, founders = [], mode = GOVERNANCEMODES.MAJORITY, threshold = null } = {})","async genesisGroup(ledger, { founderSigner, constitution = {} } = {})","castVote(ledger, proposalId, voterMembershipId)","getVotes(ledger, proposalId)","async proposeGroupEvent(ledger, { type, payload = {}, signer, proposalId = null } = {})","verifyGroupLedger(ledger)","replayGroupLedger({ groupId, founders = [], mode = GOVERNANCEMODES.MAJORITY, threshold = null, entries = [] } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: network/groupLedger/GroupLedger.js — private append only group governance ledger (network plan §15/§16/§17). Reuses the Causal State Engine's (hash chained append only log, spec §13) and as is; governance approval decisions go through (PolicyEngine). Every event is a signed protocol envelope (protocol.js ), 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. is in memory only; callers are responsible for persisting (e.g. via webgpu os/storage/AppSandbox on the OS side) and rehydrating with — this module does not import any OS/storage code, keeping the engine layer storage agnostic. Functions Create a new (empty, ungenesised) group ledger. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string[]) — founder membershipIds (string) — GOVERNANCE MODES (number) — for THRESHOLD mode Returns: ledger state Append the GROUP GENESIS event and register the signing founder as the first member. Cast a vote toward approving a pending proposal (network plan §17 eviction flow). Current vote set for a pending proposal (read only copy). 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 calls under the same first. Parameters: (object) — No description in source JSDoc. (object) — No description in source JSDoc. (string) — e.g. 'MEMBER ADDED', 'MEMBER REVOKED', ... (object) — No description in source JSDoc. (object) — proposer's signer (string) — required for actions","contentHash":"48967743879aff9e757f2a7aae06478346a7d4bbcb1168143868b6d5ab8c0fe4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/groupLedger/GroupLedger.md::0001","path":"engine/reference/network/groupLedger/GroupLedger.md","title":"network/groupLedger/GroupLedger.js","description":"","kind":"reference","source":"engine/network/groupLedger/GroupLedger.js","updated":"","headings":["network/groupLedger/GroupLedger.js","Functions","createGroupLedger({ groupId, founders = [], mode = GOVERNANCEMODES.MAJORITY, threshold = null } = {})","async genesisGroup(ledger, { founderSigner, constitution = {} } = {})","castVote(ledger, proposalId, voterMembershipId)","getVotes(ledger, proposalId)","async proposeGroupEvent(ledger, { type, payload = {}, signer, proposalId = null } = {})","verifyGroupLedger(ledger)","replayGroupLedger({ groupId, founders = [], mode = GOVERNANCEMODES.MAJORITY, threshold = null, entries = [] } = {})","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"(string) — e.g. 'MEMBER ADDED', 'MEMBER REVOKED', ... (object) — No description in source JSDoc. (object) — proposer's signer (string) — required for actions needing approval Returns: } True if the ledger's hash chain is intact end to end (tamper check). Rebuild a live ledger from previously persisted (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 (recomputing the exact same hash chain deterministically) and re derives / via the same side effect rules / apply live, so a rehydrated ledger behaves identically to one built by replaying the same operations in real time — with one honest limitation: entries carry no wall clock timestamp, and a envelope only embeds the ONE signer's public key, so a entry reconstructed from genesis (unlike a later , whose payload carries full details) will have and, for any co founder who isn't the genesis envelope's own signer, . This does NOT weaken governance security — founder protected mode checks (a Set of principals, fully and exactly restored from the genesis payload), not the map. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string[]) — same shape as createGroupLedger (only matters if entries is empty) (string) — No description in source JSDoc. (number) — No description in source JSDoc. (Array<object ) — from a prior Returns: a live ledger <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"98fcf5eb8157d5f79279a0a5f763569d5447454710272c1786812d02a31480d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/groupLedger/index.md::0000","path":"engine/reference/network/groupLedger/index.md","title":"network/groupLedger/index.js","description":"","kind":"reference","source":"engine/network/groupLedger/index.js","updated":"","headings":["network/groupLedger/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/identity/NetworkIdentity.md::0000","path":"engine/reference/network/identity/NetworkIdentity.md","title":"network/identity/NetworkIdentity.js","description":"","kind":"reference","source":"engine/network/identity/NetworkIdentity.js","updated":"","headings":["network/identity/NetworkIdentity.js","Functions","bindProfileIdentityProvider(provider)","async createDeviceIdentity()","async createProfileIdentity(profileId = 'default')","async createMembershipIdentity(profileId, groupId)","peerIdFromSigner(signer)","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 , 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 with a principal string that encodes the identity level. Functions 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. This device's per device signer — used for low level route/session proofs with a Masterserver (HELLO/PROVE). Never used as group identity. Returns: signer { principal, fingerprint, publicKeyHex, secure, sign, verify } This user's stable profile signer. One profile per logical user on this device (multiple profiles are supported by passing distinct s, e.g. for multi account testing) — each gets its own persisted keypair. Parameters: (string) — ='default'] Returns: signer 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","contentHash":"35376841cc1e1f7a4ad69bc8a445eb53149588a6f91894e0be902c098686281d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/identity/NetworkIdentity.md::0001","path":"engine/reference/network/identity/NetworkIdentity.md","title":"network/identity/NetworkIdentity.js","description":"","kind":"reference","source":"engine/network/identity/NetworkIdentity.js","updated":"","headings":["network/identity/NetworkIdentity.js","Functions","bindProfileIdentityProvider(provider)","async createDeviceIdentity()","async createProfileIdentity(profileId = 'default')","async createMembershipIdentity(profileId, groupId)","peerIdFromSigner(signer)","Constants","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"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. Parameters: (string) — No description in source JSDoc. (string) — No description in source JSDoc. Returns: signer Derive a stable \"peer id\" string for use in route tables / mesh topology from any signer's fingerprint (device, profile, or membership signer). Parameters: (object) — No description in source JSDoc. Constants — Full SHA 256 public key fingerprint used by Realm Network identities. Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"aba1a8ae31ddcc58b517e0393d711423b0320db955f63fb0a54c71bd307dbd19"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/index.md::0000","path":"engine/reference/network/index.md","title":"network/index.js","description":"","kind":"reference","source":"engine/network/index.js","updated":"","headings":["network/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"26a14bd1027d809a3f772cc597e7c1deaeb5a27fce1dc2f4031647f147a02865"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/invites/InvitePacket.md::0000","path":"engine/reference/network/invites/InvitePacket.md","title":"network/invites/InvitePacket.js","description":"","kind":"reference","source":"engine/network/invites/InvitePacket.js","updated":"","headings":["network/invites/InvitePacket.js","Functions","async makeInvite({ groupId, routeId, roleOffer = 'member', oneTime = true, expiresAt = null, inviterSigner, } = {})","encodeInvite(signedInvite)","decodeInvite(inviteCode)","async verifyInvite(signedInvite, { now = Date.now()","createInviteRegistry()","isInviteConsumed(registry, inviteId)","consumeInvite(registry, inviteId)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Build + sign an invite packet. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — temporary meeting route where identities are exchanged (string) — ='member'] (boolean) — =true] (number) — epoch ms; null = no expiry (object) — from createMembershipIdentity()/createProfileIdentity() Returns: signed invite envelope URL safe base64 encoding of a signed invite envelope, for sharing as a code/link. Decode an invite code back into its (still UNVERIFIED) signed envelope. Verify a decoded invite: known protocol/type, not expired, and the signature actually matches the embedded inviter public key. Returns: } Create a registry to track which one time invites have already been used. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b017289c0ec11060a1ef2f1b934e171fc4663f6b187ad277fd86b33d61dec1f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/invites/JoinFlow.md::0000","path":"engine/reference/network/invites/JoinFlow.md","title":"network/invites/JoinFlow.js","description":"","kind":"reference","source":"engine/network/invites/JoinFlow.js","updated":"","headings":["network/invites/JoinFlow.js","Functions","async requestJoin({ signedInvite, joinerSigner } = {})","async verifyJoinRequest({ signedInvite, joinRequest, inviteRegistry = null, now = Date.now()","grantJoinCapability({ signedInvite, joinerPrincipal, groupRouteId, inviteRegistry = null, allow = [ROUTEACTIONS.ATTACH, ROUTEACTIONS.SUBSCRIBE, ROUTEACTIONS.PUBLISH], } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Joiner side: build a signed join request referencing a (decoded) invite. Parameters: (object) — No description in source JSDoc. (object) — decoded invite envelope (from decodeInvite()) (object) — the joiner's signer (their real principal) Returns: signed JOIN REQUESTED envelope Inviter/group side: validate an invite together with a join request responding to it. Returns: } 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. Parameters: (object) — No description in source JSDoc. (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — the group's real (post join) route id (object) — No description in source JSDoc. (string[]) — default: attach+subscribe+publish Returns: frozen route capability for the joiner <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9579b9d3233274afc603363ed10901bb15cbff1282df8183ba0c4c7686916fae"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/invites/index.md::0000","path":"engine/reference/network/invites/index.md","title":"network/invites/index.js","description":"","kind":"reference","source":"engine/network/invites/index.js","updated":"","headings":["network/invites/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/peerTickets/PeerTicket.md::0000","path":"engine/reference/network/peerTickets/PeerTicket.md","title":"network/peerTickets/PeerTicket.js","description":"","kind":"reference","source":"engine/network/peerTickets/PeerTicket.js","updated":"","headings":["network/peerTickets/PeerTicket.js","Functions","async makePeerTicket({ peerId, deviceId = null, profileId = null, groupId = null, services = [], routeHints = [], expiresAt = null, routeEpoch = null, encryptionEpoch = null, issuerSigner, } = {})","async verifyPeerTicket(signedTicket, { now = Date.now()","async sealPeerTicketToDevice(signedTicket, recipientEcdhPublicKeyRaw)","async openSealedPeerTicket(sealed, recipientPrivateKey)","async sealPeerTicketToEpoch(groupCrypto, epoch, signedTicket)","async openSealedPeerTicketFromEpoch(groupCrypto, envelope)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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\". Functions Build + sign a peer ticket. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string[]) — e.g. ['sync','chunks','workstation'] (string[]) — last known opaque route ids (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (object) — No description in source JSDoc. Returns: signed ticket envelope Verify a peer ticket: known protocol/type, not expired, signature valid. Returns: } ECDH wrap a signed ticket so only the holder of 's private key can read it. Recipient side: unwrap a device sealed ticket. Returns null (fails closed) on any error. Seal a ticket under a group encryption epoch (readable by any member with that epoch's key). Open an epoch sealed ticket. Returns null if the epoch key is missing/erased or tampered. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see","contentHash":"38c9fb1ecaa0e6386fc9f4d6ec27b75c6bc34572509626c4adc5ef8ca4cfe35d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/peerTickets/PeerTicket.md::0001","path":"engine/reference/network/peerTickets/PeerTicket.md","title":"network/peerTickets/PeerTicket.js","description":"","kind":"reference","source":"engine/network/peerTickets/PeerTicket.js","updated":"","headings":["network/peerTickets/PeerTicket.js","Functions","async makePeerTicket({ peerId, deviceId = null, profileId = null, groupId = null, services = [], routeHints = [], expiresAt = null, routeEpoch = null, encryptionEpoch = null, issuerSigner, } = {})","async verifyPeerTicket(signedTicket, { now = Date.now()","async sealPeerTicketToDevice(signedTicket, recipientEcdhPublicKeyRaw)","async openSealedPeerTicket(sealed, recipientPrivateKey)","async sealPeerTicketToEpoch(groupCrypto, epoch, signedTicket)","async openSealedPeerTicketFromEpoch(groupCrypto, envelope)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"null if the epoch key is missing/erased or tampered. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"57439f5080862d59cffbf40c2b879042a6b6ba1b3a0d0db94b2ed57b66a0ac17"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/peerTickets/PeerTicketStore.md::0000","path":"engine/reference/network/peerTickets/PeerTicketStore.md","title":"network/peerTickets/PeerTicketStore.js","description":"","kind":"reference","source":"engine/network/peerTickets/PeerTicketStore.js","updated":"","headings":["network/peerTickets/PeerTicketStore.js","Functions","createPeerTicketStore()","addPeerTicket(store, signedTicket)","getPeerTicket(store, peerId)","removePeerTicket(store, peerId)","pruneExpiredPeerTickets(store, now = Date.now()","listPeerTicketsByFreshness(store)","snapshotPeerTicketStore(store)","hydratePeerTicketStore(snapshot = [])","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create an empty peer ticket store. Remember a (already verified) peer ticket, keyed by its peerId. Overwrites any older ticket for the same peer. Look up the remembered ticket for a peer, or null. Forget a peer's ticket. Returns true if one existed. Remove tickets whose payload.expiresAt has passed. Returns the removed peerIds. All remembered tickets, most recently received first (network plan §38: try freshest known peers first). 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 already returns — exposed under its own name so the persistence contract (snapshot/hydrate pair) stays explicit even if the internal shape changes later. Rebuild a peer ticket store from a previously persisted snapshotPeerTicketStore() array. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cb3151b242c4d6db0444ba20786f7fda0944d8a49e2156cbb4a81d1df0fc42d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/peerTickets/ReconnectOrder.md::0000","path":"engine/reference/network/peerTickets/ReconnectOrder.md","title":"network/peerTickets/ReconnectOrder.js","description":"","kind":"reference","source":"engine/network/peerTickets/ReconnectOrder.js","updated":"","headings":["network/peerTickets/ReconnectOrder.js","Functions","buildPeerReconnectOrder(store, normalizedMasterServerList)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 (routes/MasterServerList.js) without modifying it. Functions Parameters: (object) — from createPeerTicketStore() (object) — from normalizeMasterServerList() Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7a971a7d37506c504879976f5f5bff2951c85b5bcdca48dba731d25f47594f8f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/peerTickets/index.md::0000","path":"engine/reference/network/peerTickets/index.md","title":"network/peerTickets/index.js","description":"","kind":"reference","source":"engine/network/peerTickets/index.js","updated":"","headings":["network/peerTickets/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/protocol.md::0000","path":"engine/reference/network/protocol.md","title":"network/protocol.js","description":"","kind":"reference","source":"engine/network/protocol.js","updated":"","headings":["network/protocol.js","Functions","isKnownProtocol(protocol)","makeEnvelope({ protocol, type, payload = null, extra = {} } = {})","assertKnownProtocol(msg)","async signEnvelope(envelope, signer)","async verifyEnvelope(signedEnvelope, signer = null)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. ). 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. Functions True when is one of this build's known, versioned namespaces. Build an unsigned protocol envelope. Throws if isn't a known, versioned namespace (spec §34 rule: reject unversioned packets). Parameters: (object) — No description in source JSDoc. (string) — one of PROTOCOL VERSIONS (string) — message type (e.g. 'ATTACH ROUTE', 'HELLO') ( ) — JSON canonicalizable body (object) — additional top level fields (routeId, ttl, expiresAt, ...) Returns: frozen unsigned envelope Assert an inbound (possibly untrusted) message is a well formed envelope with a known protocol namespace. Does NOT verify signatures — see . Throws on failure so callers fail closed. Returns: the same message, for chaining Sign an envelope with a CSE authority signer (engine/state/authority/Identity.js , 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","contentHash":"08b770a13ca37e589f0f39b159f3d11164f4f43a7c48101889bc876722ac7745"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/protocol.md::0001","path":"engine/reference/network/protocol.md","title":"network/protocol.js","description":"","kind":"reference","source":"engine/network/protocol.js","updated":"","headings":["network/protocol.js","Functions","isKnownProtocol(protocol)","makeEnvelope({ protocol, type, payload = null, extra = {} } = {})","assertKnownProtocol(msg)","async signEnvelope(envelope, signer)","async verifyEnvelope(signedEnvelope, signer = null)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"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. Parameters: (object) — from makeEnvelope() (object) — from createSigner()/network identity helpers Returns: frozen signed envelope Verify a signed envelope. Pass either a (verifies against its own key — same principal round trip) or nothing to verify against the envelope's own embedded (cross actor verification, the normal case when receiving from a remote peer). Parameters: (object) — No description in source JSDoc. (object) — optional signer to verify against instead of the embedded key Constants — All known/versioned protocol namespaces (network plan §34). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c973bc4fae0f8f10b1059b83a9842991f25195c5208d05be58ad176ff96eadda"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/accord/AccordCapabilityV1.md::0000","path":"engine/reference/network/realm/accord/AccordCapabilityV1.md","title":"network/realm/accord/AccordCapabilityV1.js","description":"","kind":"reference","source":"engine/network/realm/accord/AccordCapabilityV1.js","updated":"","headings":["network/realm/accord/AccordCapabilityV1.js","Functions","async createAccordCapabilityAdvertisement(input, signer)","async verifyAccordCapabilityAdvertisement(record, { now = Date.now()","async negotiateAccordCapability(advertisements, request, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Signed, short lived Accord capability discovery records. Functions Select a verified capability that can satisfy an exact bounded request. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a72d64062c5c14006fa05add2089cd0db0ea00d00a352186381944655df0b992"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/accord/AccordCrypto.md::0000","path":"engine/reference/network/realm/accord/AccordCrypto.md","title":"network/realm/accord/AccordCrypto.js","description":"","kind":"reference","source":"engine/network/realm/accord/AccordCrypto.js","updated":"","headings":["network/realm/accord/AccordCrypto.js","Functions","safeInteger(value, name, minimum = 0, maximum = Number.MAXSAFEINTEGER)","boundedText(value, name, maximum = 512)","boundedToken(value, name, maximum = 128)","normalizeNonce(value, name = 'nonce')","assertSecureRecordId(value, name = 'record ID')","normalizeTokenList(values, name, { maximum = 128, allowEmpty = false } = {})","normalizeIdList(values, name, { maximum = 128, allowEmpty = true } = {})","assertIdentityId(value, name = 'identity ID')","normalizeWindow(input, { issuedAt = Date.now()","validateActiveWindow(record, now = Date.now()","normalizeBudget(value, name = 'budget', { allowZero = false } = {})","budgetWithin(candidate, ceiling)","normalizeScope(value, name = 'scope')","scopeWithin(candidate, ceiling)","assertSafePublicData(value, name = 'public data', { maximumBytes = ACCORDMAXPUBLICBYTES } = {})","canonicalPublicCopy(value, name = 'public data', options = {})","async accordSignerDescriptor(signer)","async finishSignedAccordRecord(record, idField, signer)","async verifySignedAccordRecord(record, { format, idField })","async authorizeWith(adapter, record, role)","exactKeys(value, expected, name)","normalizedBodyMatches(record, normalized)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared validation and domain separated signing for the Navi Accord wire protocol. Functions 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. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c0bdf0992c9bb30eb964c7c50ecac57a8dd1d3e19484738f61eb630956779349"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/accord/AccordDelegationV1.md::0000","path":"engine/reference/network/realm/accord/AccordDelegationV1.md","title":"network/realm/accord/AccordDelegationV1.js","description":"","kind":"reference","source":"engine/network/realm/accord/AccordDelegationV1.js","updated":"","headings":["network/realm/accord/AccordDelegationV1.js","Classes","class AccordDelegationRegistry","Functions","async createAccordDelegation(task, input, signer)","async verifyAccordDelegation(record, { task, acceptance = null, capabilityGrant, verifyCapabilityGrant, now = Date.now()","async createAccordDelegationRevocation(delegation, input, signer)","async verifyAccordDelegationRevocation(record, { delegation, now = Date.now()","async createAccordApprovalProof(task, input, signer)","async verifyAccordApprovalProof(record, { task, now = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Task bound capability delegation, revocation, and approval proofs. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"aaade1feb442fdec5e0ae3a74e5231fdc207a603a1b085537df18bf703d18d3f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/accord/AccordReplayGuard.md::0000","path":"engine/reference/network/realm/accord/AccordReplayGuard.md","title":"network/realm/accord/AccordReplayGuard.js","description":"","kind":"reference","source":"engine/network/realm/accord/AccordReplayGuard.js","updated":"","headings":["network/realm/accord/AccordReplayGuard.js","Classes","class AccordReplayGuard","Functions","consumeReplay(replayGuard, record, { idField, streamKey = null, sequence = null } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Bounded replay and monotonic sequence protection for verified Accord records. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0ffaa9baad33e9f0c84dd7314ec256ac879beb21c80ba2a589b554e43f40b08b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/accord/AccordResultV1.md::0000","path":"engine/reference/network/realm/accord/AccordResultV1.md","title":"network/realm/accord/AccordResultV1.js","description":"","kind":"reference","source":"engine/network/realm/accord/AccordResultV1.js","updated":"","headings":["network/realm/accord/AccordResultV1.js","Functions","async createAccordProgress(task, acceptance, input, signer)","async verifyAccordProgress(record, { task, acceptance, now = Date.now()","async createAccordCancellation(task, input, signer)","async verifyAccordCancellation(record, { task, now = Date.now()","async createAccordResultV1(task, acceptance, delegation, input, signer)","async verifyAccordResultV1(record, { task, acceptance, delegation, capabilityGrant, verifyCapabilityGrant, contextCapsules = [], approvalProofs = [], cancellation = null, now = Date.now()","async createAccordReputationEvidence(task, result, input, signer)","async verifyAccordReputationEvidence(record, { now = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Signed Accord progress, cancellation, results, and purpose isolated reputation evidence. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0d3ad5a8339ed8a9968e691d1a2114ff34336827efa545dea6681169e32d6a0a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/accord/AccordTaskV1.md::0000","path":"engine/reference/network/realm/accord/AccordTaskV1.md","title":"network/realm/accord/AccordTaskV1.js","description":"","kind":"reference","source":"engine/network/realm/accord/AccordTaskV1.js","updated":"","headings":["network/realm/accord/AccordTaskV1.js","Functions","async createAccordTask(input, signer)","async verifyAccordTask(record, { now = Date.now()","async createAccordTaskAcceptance(task, input, signer)","async verifyAccordTaskAcceptance(record, { task, now = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Requester signed Accord tasks and executor signed negotiated acceptance. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"20f7a7a1d8b345a462a5d057c3fa9106e5189e6b143a51a94238c103e24169a4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/accord/ContextCapsuleV1.md::0000","path":"engine/reference/network/realm/accord/ContextCapsuleV1.md","title":"network/realm/accord/ContextCapsuleV1.js","description":"","kind":"reference","source":"engine/network/realm/accord/ContextCapsuleV1.js","updated":"","headings":["network/realm/accord/ContextCapsuleV1.js","Functions","async createContextCapsuleV1(task, input, signer)","async verifyContextCapsuleV1(record, { task, acceptance = null, now = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Recipient bound, allowlisted, signed context for a single Accord task. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0e183f771de8c7bc19504eb63e1946b299ba2eeb613417101fc10ea01b594002"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/accord/index.md::0000","path":"engine/reference/network/realm/accord/index.md","title":"network/realm/accord/index.js","description":"","kind":"reference","source":"engine/network/realm/accord/index.js","updated":"","headings":["network/realm/accord/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/addressing/RealmAddress.md::0000","path":"engine/reference/network/realm/addressing/RealmAddress.md","title":"network/realm/addressing/RealmAddress.js","description":"","kind":"reference","source":"engine/network/realm/addressing/RealmAddress.js","updated":"","headings":["network/realm/addressing/RealmAddress.js","Classes","class RealmAddressResolver","Functions","parseRealmAddress(address)","realmAddressForId(realmId)","async createRealmAliasRecord(input, signer)","async verifyRealmAliasRecord(record, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RealmAddress.js — human aliases that resolve to location independent IDs. Classes In memory verified resolver. Persistence/discovery providers can replay records into it. Method Signature Summary Functions Parse and canonicalize a realm:// alias or direct ID address. Create an attributable alias update. Aliases can move; Realm IDs cannot. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cba714dd8f9d3ebe21f5b446a899ba3fb2fab5747221d828f3365740a0d58003"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/addressing/RealmIds.md::0000","path":"engine/reference/network/realm/addressing/RealmIds.md","title":"network/realm/addressing/RealmIds.js","description":"","kind":"reference","source":"engine/network/realm/addressing/RealmIds.js","updated":"","headings":["network/realm/addressing/RealmIds.js","Functions","async realmKeyFingerprint(publicKey)","async createRealmId(type, controlMaterial)","async createKeyControlledRealmId(type, publicKey)","async createContentRealmId(type, content)","parseRealmId(id)","isRealmId(id, expectedType = null)","assertRealmId(id, expectedType = null, label = 'Realm ID')","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Return the full SHA 256 fingerprint of a raw uncompressed P 256 key. Derive a typed stable ID from canonical control material. Callers must provide persistent material, never a location or session ID. Derive an identity controlled by a specific P 256 public key. Derive an immutable content identity from exact bytes. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"91171b2e9b7bf86d8409b84e5e7229aae770ef74e2aa1f8effd2da06748de946"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/addressing/index.md::0000","path":"engine/reference/network/realm/addressing/index.md","title":"network/realm/addressing/index.js","description":"","kind":"reference","source":"engine/network/realm/addressing/index.js","updated":"","headings":["network/realm/addressing/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/atlas/AtlasProviders.md::0000","path":"engine/reference/network/realm/atlas/AtlasProviders.md","title":"network/realm/atlas/AtlasProviders.js","description":"","kind":"reference","source":"engine/network/realm/atlas/AtlasProviders.js","updated":"","headings":["network/realm/atlas/AtlasProviders.js","Classes","class AtlasRecordProvider","Functions","atlasProviderAllowsVisibility(kind, visibility)","createLocalAtlasProvider(options)","createContactAtlasProvider(options)","createOrganizationAtlasProvider(options)","createPeerGossipAtlasProvider(options)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Feature gated Atlas provider contracts with bounded verified in memory stores. Classes 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. Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8a33b3277a015186d1a6c50db7707e58cf7f670187cde7bb903b8f54efdb2125"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/atlas/AtlasRecordV1.md::0000","path":"engine/reference/network/realm/atlas/AtlasRecordV1.md","title":"network/realm/atlas/AtlasRecordV1.js","description":"","kind":"reference","source":"engine/network/realm/atlas/AtlasRecordV1.js","updated":"","headings":["network/realm/atlas/AtlasRecordV1.js","Classes","class AtlasReplayGuard","Functions","async createAtlasRecordV1(input, signer)","async verifyAtlasRecordV1(record, { now = Date.now()","atlasVisibilitySemantics(visibility)","canAccessAtlasRecordV1(record, context = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Signed, bounded Realm Atlas publication records and visibility policy. Classes Monotonic per publisher replay guard for verified Atlas histories. Method Signature Summary Functions Create a signed immutable AtlasRecordV1. Verify canonical structure, SHA 256 identity, signature, freshness, and optional publisher authority. Evaluate a viewer against the signed audience without granting entry permissions. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"16afad92fc6578fea371424de245f98911334d42a9abdbc46c95ebeeba7f9009"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/atlas/BoundedServerAtlasProvider.md::0000","path":"engine/reference/network/realm/atlas/BoundedServerAtlasProvider.md","title":"network/realm/atlas/BoundedServerAtlasProvider.js","description":"","kind":"reference","source":"engine/network/realm/atlas/BoundedServerAtlasProvider.js","updated":"","headings":["network/realm/atlas/BoundedServerAtlasProvider.js","Classes","class BoundedServerAtlasProvider","Functions","async deriveAtlasScopeTag(scopeKey)","async createServerAtlasAdvertisement(record, { scopeKey, signer, issuedAt = Math.floor(Date.now()","async verifyServerAtlasAdvertisement(record, { now = Math.floor(Date.now()","async openServerAtlasAdvertisement(advertisement, { scopeKey, now = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Optional opaque V3 Atlas provider matching the bounded ephemeral server contract. Classes Method Signature Summary Functions Build the exact opaque advertisement accepted by the additive V3 server. Verify and decrypt one V3 envelope without trusting the server that stored it. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"38f50de93a11082bf3d7587b81b9d96c7b94ab83df145edc218ceb99847bd7e0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/atlas/index.md::0000","path":"engine/reference/network/realm/atlas/index.md","title":"network/realm/atlas/index.js","description":"","kind":"reference","source":"engine/network/realm/atlas/index.js","updated":"","headings":["network/realm/atlas/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/authority/AuthorityHandoff.md::0000","path":"engine/reference/network/realm/authority/AuthorityHandoff.md","title":"network/realm/authority/AuthorityHandoff.js","description":"","kind":"reference","source":"engine/network/realm/authority/AuthorityHandoff.js","updated":"","headings":["network/realm/authority/AuthorityHandoff.js","Classes","class AuthorityHandoffCoordinator","Functions","async createAuthorityHandoffMessage(input, signer)","async verifyAuthorityHandoffMessage(message, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Checkpoint backed, signed authority handoff state machine. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"66517449c9f94643d23fd393d1ece6176f4df5d46634de43d46d390cdd17fea8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/authority/AuthorityLease.md::0000","path":"engine/reference/network/realm/authority/AuthorityLease.md","title":"network/realm/authority/AuthorityLease.js","description":"","kind":"reference","source":"engine/network/realm/authority/AuthorityLease.js","updated":"","headings":["network/realm/authority/AuthorityLease.js","Functions","async createAuthorityLease(input, signer)","async renewAuthorityLease(previous, input, signer)","async verifyAuthorityLease(lease, options = {})","async createAuthorityRevocation(input, signer)","async verifyAuthorityRevocation(record, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4edc7af4414e959d88b517219d5dd54cf9f36a43fb98eedd53db8b2b621a8ec2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/authority/AuthorityLeaseManager.md::0000","path":"engine/reference/network/realm/authority/AuthorityLeaseManager.md","title":"network/realm/authority/AuthorityLeaseManager.js","description":"","kind":"reference","source":"engine/network/realm/authority/AuthorityLeaseManager.js","updated":"","headings":["network/realm/authority/AuthorityLeaseManager.js","Classes","class AuthorityLeaseManager","Functions","createAuthorityLeaseManager(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes In memory authority decision engine; persistence is supplied by the caller. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"43c8d55681d53474a47550c3393c86a9df757d949ca83fcb284a751360a233e7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/authority/HostMigrationQuorum.md::0000","path":"engine/reference/network/realm/authority/HostMigrationQuorum.md","title":"network/realm/authority/HostMigrationQuorum.js","description":"","kind":"reference","source":"engine/network/realm/authority/HostMigrationQuorum.js","updated":"","headings":["network/realm/authority/HostMigrationQuorum.js","Classes","class HostMigrationQuorum","Functions","async createHostMigrationVote(input, signer)","async verifyHostMigrationVote(vote, authorizeVoter = null)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0698b18e522b8eb6fd1253b8e820cc581c20d2f3768bfe5d7321214196a1272e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/authority/SemanticReplication.md::0000","path":"engine/reference/network/realm/authority/SemanticReplication.md","title":"network/realm/authority/SemanticReplication.js","description":"","kind":"reference","source":"engine/network/realm/authority/SemanticReplication.js","updated":"","headings":["network/realm/authority/SemanticReplication.js","Classes","class SemanticInbox","class SemanticOutbox","Functions","createSemanticRecord(input, signer)","createSemanticDelta(input, signer)","createSemanticCheckpoint(input, signer)","async verifySemanticEnvelope(value, options = {})","detectSemanticDivergence(local, remote)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Semantic replication records, idempotent inboxes, resumable outboxes, and divergence evidence. Classes Method Signature Summary Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"38485f7686105019cafd7b3cfdd7e896f8c28a2c1109acd1c919618f29a3882b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/authority/index.md::0000","path":"engine/reference/network/realm/authority/index.md","title":"network/realm/authority/index.js","description":"","kind":"reference","source":"engine/network/realm/authority/index.js","updated":"","headings":["network/realm/authority/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/branches/BranchStorage.md::0000","path":"engine/reference/network/realm/branches/BranchStorage.md","title":"network/realm/branches/BranchStorage.js","description":"","kind":"reference","source":"engine/network/realm/branches/BranchStorage.js","updated":"","headings":["network/realm/branches/BranchStorage.js","Classes","class RealmBranchStorage","Functions","prepareRealmBranchStorageRecord(record, label = 'branch storage record')","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes LocalStorage compatible persistent key/value adapter. Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0c61549770d9a3b26de61fef36c993fb983075b0ad065582d283e29b2834c885"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/branches/MergeProposal.md::0000","path":"engine/reference/network/realm/branches/MergeProposal.md","title":"network/realm/branches/MergeProposal.js","description":"","kind":"reference","source":"engine/network/realm/branches/MergeProposal.js","updated":"","headings":["network/realm/branches/MergeProposal.js","Functions","async createMergeProposal(input, signer)","async verifyMergeProposal(proposal, options = {})","buildDefaultMergeDecisions(proposal)","validateMergeDecisions(proposal, decisions)","async applyMergeProposal({ proposal, decisions, base, mine, theirs }, options = {})","async createMergeCommit(input, signer, options = {})","async verifyMergeCommit(event, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MergeProposalV1 contracts, dependency safe decisions, and merge commits. Functions Create a signed MergeProposalV1 from a semantic comparison. Verify proposal signature, IDs, dependency DAG, authorization, and expiry. Default policy: accept clean changes and retain conflicts on the source branch. Apply accepted changes to mine; rejected/conflicting source work is untouched. 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. Constants — Public MergeProposalV1 contract. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b8c297851484e59a01b80e2fb50fb7a611eb30e9ac3fca10d18a0e9e5e2396cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/branches/OfflineOperationQueue.md::0000","path":"engine/reference/network/realm/branches/OfflineOperationQueue.md","title":"network/realm/branches/OfflineOperationQueue.js","description":"","kind":"reference","source":"engine/network/realm/branches/OfflineOperationQueue.js","updated":"","headings":["network/realm/branches/OfflineOperationQueue.js","Classes","class OfflineOperationQueue","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Persistent, causal, resumable queue for signed offline Chronicle events. Classes Method Signature Summary Deliver every currently causal ready event at least once. A missing or failed acknowledgement returns the event to pending for a later reconnect. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e6216edf3ed56d4e5c93313444e37841e80309b126c94d904eaf3f8a93d0f39f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/branches/RealmBranch.md::0000","path":"engine/reference/network/realm/branches/RealmBranch.md","title":"network/realm/branches/RealmBranch.js","description":"","kind":"reference","source":"engine/network/realm/branches/RealmBranch.js","updated":"","headings":["network/realm/branches/RealmBranch.js","Classes","class RealmBranchDAG","Functions","async createRealmBranch(input, signer)","async verifyRealmBranch(branch, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RealmBranchV1 identity, ownership, signed head chains, and branch DAGs. Classes Verified in memory projection of branch descriptors and RealmBranchRefV1 head chains. Persistence is delegated to BranchStorage.js. Method Signature Summary Functions Create a stable RealmBranchV1. The label is intentionally excluded from the identity derivation, so renaming or alias changes cannot change branch IDs. Verify branch identity, controller signature, and optional owner authority. Constants — Public RealmBranchV1 contract. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f84885cc5988ecc107f5f8560b93137c73e915ba229ca8324eaab510510f9dcc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/branches/RealmBranchCrypto.md::0000","path":"engine/reference/network/realm/branches/RealmBranchCrypto.md","title":"network/realm/branches/RealmBranchCrypto.js","description":"","kind":"reference","source":"engine/network/realm/branches/RealmBranchCrypto.js","updated":"","headings":["network/realm/branches/RealmBranchCrypto.js","Functions","withoutSignedFields(record, idField)","async signBranchRecord(body, { idField, format }, signer)","async verifyBranchRecord(record, { idField, format })","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared signed record plumbing for Realm branch contracts. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bedd8a7c69834866fbf450a18f5e8d0c1f037a44f041b125e13ae98462994696"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/branches/SemanticAdapters.md::0000","path":"engine/reference/network/realm/branches/SemanticAdapters.md","title":"network/realm/branches/SemanticAdapters.js","description":"","kind":"reference","source":"engine/network/realm/branches/SemanticAdapters.js","updated":"","headings":["network/realm/branches/SemanticAdapters.js","Classes","class SemanticAdapterRegistry","Functions","normalizeSemanticSnapshot(value)","async hashSemanticChange(change)","createDefaultSemanticAdapterRegistry()","async compareSemanticSnapshots({ base, mine, theirs }, registry = createDefaultSemanticAdapterRegistry()","applySemanticChange(snapshot, change, selected, registry)","orderSemanticChanges(changes)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Explicit semantic and confluence proven CRDT adapters for three way merge. Classes Method Signature Summary Functions Produce a deterministic base/mine/theirs semantic comparison. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6d9ea8138213cc86f5a22b29720255015c1385c5327b6b46e4c464392618965f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/branches/index.md::0000","path":"engine/reference/network/realm/branches/index.md","title":"network/realm/branches/index.js","description":"","kind":"reference","source":"engine/network/realm/branches/index.js","updated":"","headings":["network/realm/branches/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"27c8b0e4bdaa7faa1a59ffd6ad916d87c0e0ae22ee87577889369955c986b15d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/capsule/CapsuleAssembler.md::0000","path":"engine/reference/network/realm/capsule/CapsuleAssembler.md","title":"network/realm/capsule/CapsuleAssembler.js","description":"","kind":"reference","source":"engine/network/realm/capsule/CapsuleAssembler.js","updated":"","headings":["network/realm/capsule/CapsuleAssembler.js","Classes","class CapsuleAssembler","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/capsule/CapsuleMigration.md::0000","path":"engine/reference/network/realm/capsule/CapsuleMigration.md","title":"network/realm/capsule/CapsuleMigration.js","description":"","kind":"reference","source":"engine/network/realm/capsule/CapsuleMigration.js","updated":"","headings":["network/realm/capsule/CapsuleMigration.js","Classes","class CapsuleMigrationRegistry","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/capsule/RealmBranchRef.md::0000","path":"engine/reference/network/realm/capsule/RealmBranchRef.md","title":"network/realm/capsule/RealmBranchRef.js","description":"","kind":"reference","source":"engine/network/realm/capsule/RealmBranchRef.js","updated":"","headings":["network/realm/capsule/RealmBranchRef.js","Functions","async hashRealmBranchRef(ref)","async createRealmBranchRef(input, signer, previous = null)","async verifyRealmBranchRef(ref, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/capsule/RealmCapsule.md::0000","path":"engine/reference/network/realm/capsule/RealmCapsule.md","title":"network/realm/capsule/RealmCapsule.js","description":"","kind":"reference","source":"engine/network/realm/capsule/RealmCapsule.js","updated":"","headings":["network/realm/capsule/RealmCapsule.js","Functions","toUint8Array(value)","taggedSha256(hex)","async adaptVerifiedPackageArtifact({ artifactBytes, parsedPackage, verification } = {})","async computeCapsuleRoot(body)","async prepareRealmBlob(input, options = {})","async buildRealmCapsule(input, signer, options = {})","async verifyRealmCapsule(capsule, options = {})","async verifyBlobAgainstDescriptor(bytesLike, descriptor)","bytesToBase64(bytes)","base64ToBytes(value)","async createOfflineCapsuleExport(capsule, resolveBlob, options = {})","async verifyOfflineCapsuleExport(bundle, options = {})","reassembleBlobChunks(chunks)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1f5d1bb36eb1fef0ac38ab0c4f61c543c0ff17f0f1802be8c6ab83ad2659a4c1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/capsule/RealmCapsuleSchema.md::0000","path":"engine/reference/network/realm/capsule/RealmCapsuleSchema.md","title":"network/realm/capsule/RealmCapsuleSchema.js","description":"","kind":"reference","source":"engine/network/realm/capsule/RealmCapsuleSchema.js","updated":"","headings":["network/realm/capsule/RealmCapsuleSchema.js","Classes","class RealmCapsuleValidationError extends TypeError","Functions","normalizeRights(value = {})","normalizeProvenance(value = {})","normalizeCompatibility(value = {})","normalizeCapsuleBody(value)","validateRealmCapsuleShape(value, { requireSignature = true } = {})","validateDependencyGraph(records, options = {})","isContentId(value)","contentIdHex(value)","deepFreeze(value)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0698b18e522b8eb6fd1253b8e820cc581c20d2f3768bfe5d7321214196a1272e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/capsule/index.md::0000","path":"engine/reference/network/realm/capsule/index.md","title":"network/realm/capsule/index.js","description":"","kind":"reference","source":"engine/network/realm/capsule/index.js","updated":"","headings":["network/realm/capsule/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4e3a60a719133f8b3ec875fa974efd18469aa0b476d883a573f9407b4e83e2d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/chronicle/RealmChronicle.md::0000","path":"engine/reference/network/realm/chronicle/RealmChronicle.md","title":"network/realm/chronicle/RealmChronicle.js","description":"","kind":"reference","source":"engine/network/realm/chronicle/RealmChronicle.js","updated":"","headings":["network/realm/chronicle/RealmChronicle.js","Classes","class RealmChronicle","Functions","async createChronicleEvent(input, signer)","async verifyChronicleEvent(event, options = {})","async verifyChronicle(value, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Functions Create a complete signed Chronicle event. Verify content hash, event hash, signer fingerprint, signature, and optional actor binding. Verify and rebuild a complete Chronicle snapshot or event list. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"244dc0f876e4e2e9f22ed13eadfbec3df57f9b92fd7d36df82c35ed6c571fc8a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/chronicle/index.md::0000","path":"engine/reference/network/realm/chronicle/index.md","title":"network/realm/chronicle/index.js","description":"","kind":"reference","source":"engine/network/realm/chronicle/index.js","updated":"","headings":["network/realm/chronicle/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/contracts.md::0000","path":"engine/reference/network/realm/contracts.md","title":"network/realm/contracts.js","description":"","kind":"reference","source":"engine/network/realm/contracts.js","updated":"","headings":["network/realm/contracts.js","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Constants Re exports , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"3e0a884fa3589f1544bce5143a13da42d369460c94aab17ca8474c4697eb4a70"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/gate/GatePlanV1.md::0000","path":"engine/reference/network/realm/gate/GatePlanV1.md","title":"network/realm/gate/GatePlanV1.js","description":"","kind":"reference","source":"engine/network/realm/gate/GatePlanV1.js","updated":"","headings":["network/realm/gate/GatePlanV1.js","Classes","class RealmGate","Functions","deriveGateOutcome(checks)","async createGatePlan(input, signer)","async verifyGatePlan(record, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Fail closed Realm entry planning over verified identity, content, and policy evidence. Classes Runtime Gate evaluator. It owns no persistence and performs no entry itself; it only emits a short lived signed plan that Shield can enforce. Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a4286019403452a8e69ea047c402998c43035ede5e87dd439ff974f6ea1fbe17"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/gate/index.md::0000","path":"engine/reference/network/realm/gate/index.md","title":"network/realm/gate/index.js","description":"","kind":"reference","source":"engine/network/realm/gate/index.js","updated":"","headings":["network/realm/gate/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a89e686480bebc5858af4fbbd82cd90cd94c85a42b1faf8274566ba68509b653"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/governance/CapabilityGrantV1.md::0000","path":"engine/reference/network/realm/governance/CapabilityGrantV1.md","title":"network/realm/governance/CapabilityGrantV1.js","description":"","kind":"reference","source":"engine/network/realm/governance/CapabilityGrantV1.js","updated":"","headings":["network/realm/governance/CapabilityGrantV1.js","Classes","class RealmCapabilityRegistry","Functions","async createCapabilityGrant(input, signer)","async verifyCapabilityGrant(record, options = {})","async attenuateCapabilityGrant(parentRecord, input, signer)","async recoverCapabilityGrant(previousRecord, input, signer)","async createCapabilityRevocation(input, signer)","async verifyCapabilityRevocation(record, options = {})","async createCapabilityAuditReceipt(input, signer)","async verifyCapabilityAuditReceipt(record, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Scoped, attenuable, delegable, revocable CapabilityGrantV1 contracts. Classes Runtime registry with online revocation and dynamic membership/role checks. Method Signature Summary Functions Constants — Public contract descriptor for callers that discover schemas dynamically. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a451359e36a5ba7ae8d67a70d07c89246fc8404109d66cb240c021db248e44d4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/governance/GovernanceCrypto.md::0000","path":"engine/reference/network/realm/governance/GovernanceCrypto.md","title":"network/realm/governance/GovernanceCrypto.js","description":"","kind":"reference","source":"engine/network/realm/governance/GovernanceCrypto.js","updated":"","headings":["network/realm/governance/GovernanceCrypto.js","Functions","async signerDescriptor(signer)","async finishSignedRecord(record, idField, signer)","async verifySignedRecord(record, { format, idField })","boundedInteger(value, name, minimum = 0)","boundedToken(value, name, maximum = 128, { wildcard = false } = {})","boundedText(value, name, maximum = 512)","uniqueSorted(values, name, normalize, maximum = 128)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared signing primitives for Realm organization and capability records. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"93d6133f006b7d34aaa4c941fad1fff0efddbcd933cf6ac038392a30fb913163"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/governance/OrganizationLedger.md::0000","path":"engine/reference/network/realm/governance/OrganizationLedger.md","title":"network/realm/governance/OrganizationLedger.js","description":"","kind":"reference","source":"engine/network/realm/governance/OrganizationLedger.js","updated":"","headings":["network/realm/governance/OrganizationLedger.js","Classes","class RealmOrganizationLedger","Functions","async createGovernanceEnvelope(input, signer)","async verifyGovernanceEnvelope(record)","async replayOrganizationLedger(organizationRecord, envelopes, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7bf249841e90a915f4a9d92cfff3ef0d6e83436c6783e73988939f1c3ce167d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/governance/OrganizationV1.md::0000","path":"engine/reference/network/realm/governance/OrganizationV1.md","title":"network/realm/governance/OrganizationV1.js","description":"","kind":"reference","source":"engine/network/realm/governance/OrganizationV1.js","updated":"","headings":["network/realm/governance/OrganizationV1.js","Functions","async createOrganizationV1(input, signer)","async verifyOrganizationV1(record)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Signed OrganizationV1 root contract and its fixed governance vocabulary. Functions Constants — Public contract descriptor for callers that discover schemas dynamically. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d76e6b85d4aded5beaef57862ce9fd66098b0c7f2304d3b163f862003ad38da4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/governance/index.md::0000","path":"engine/reference/network/realm/governance/index.md","title":"network/realm/governance/index.js","description":"","kind":"reference","source":"engine/network/realm/governance/index.js","updated":"","headings":["network/realm/governance/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"531fc5e1e7220295b3c19e72e0a0177d68013dd65f105f3ca9c4e1dfa2c7f6da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/health/HealthSnapshot.md::0000","path":"engine/reference/network/realm/health/HealthSnapshot.md","title":"network/realm/health/HealthSnapshot.js","description":"","kind":"reference","source":"engine/network/realm/health/HealthSnapshot.js","updated":"","headings":["network/realm/health/HealthSnapshot.js","Functions","createHealthMonitor({ realmId = null, branchId = null, now = ()","recordHealthComponent(monitor, componentId, { status, reason = null, metrics = {}, ttlMs = 60000, } = {})","removeHealthComponent(monitor, componentId)","subscribeHealth(monitor, subscriber)","buildHealthSnapshotV1(monitor)","observeRealmLinkHealth(monitor, linkSnapshot, { ttlMs = 30000 } = {})","observeDiscoveryHealth(monitor, providerStatuses, { ttlMs = 60000 } = {})","observePresenceHealth(monitor, { activeActors = 0, rejected = 0, sequenceGaps = 0 } = {}, { ttlMs = 60000 } = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Record a RealmLink snapshot without exposing identities, keys, or payloads. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"432e8ab15defd23069eaabca78c95383a33b553d58b5919343abdd0eb801b90e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/health/ReachabilityProjection.md::0000","path":"engine/reference/network/realm/health/ReachabilityProjection.md","title":"network/realm/health/ReachabilityProjection.js","description":"","kind":"reference","source":"engine/network/realm/health/ReachabilityProjection.js","updated":"","headings":["network/realm/health/ReachabilityProjection.js","Functions","projectEndpointReachability({ residentActive = false, routeCount = 0, masterservers = [], peers = [], observedAt = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Build a secret free reachability projection from locally observed evidence. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"38897619f4752a9fd02ccbae2edff0dc088db34585ea9248cd0959d1460c66dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/health/index.md::0000","path":"engine/reference/network/realm/health/index.md","title":"network/realm/health/index.js","description":"","kind":"reference","source":"engine/network/realm/health/index.js","updated":"","headings":["network/realm/health/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/identity/RealmPassport.md::0000","path":"engine/reference/network/realm/identity/RealmPassport.md","title":"network/realm/identity/RealmPassport.js","description":"","kind":"reference","source":"engine/network/realm/identity/RealmPassport.js","updated":"","headings":["network/realm/identity/RealmPassport.js","Functions","async createPassportLineage({ passportId, createdAt = Date.now()","appendPassportRotation(lineage, newSigner, previousSigner, options = {})","appendPassportRecovery(lineage, newSigner, previousSigner, options = {})","async appendPassportRevocation(lineage, currentSigner, options = {})","async verifyPassportLineage(lineage)","async createDeviceGrant(input, passportSigner)","async verifyDeviceGrant(grant, options = {})","async createDeviceRevocation(input, passportSigner)","async verifyDeviceRevocation(record, options = {})","async createRecoveryPolicy(input, passportSigner)","async verifyRecoveryPolicy(policy)","async createRecoveryRecord(input, passportSigner)","async verifyRecoveryRecord(record, options = {})","async createRealmPassport(input, passportSigner)","async verifyRealmPassport(passport)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a self signed genesis lineage. The Passport ID is bound to its root key. Append a terminal, signed key revocation record. Verify every digest, key fingerprint, link, and signature in a lineage. Build a signed, allowlisted public Passport projection. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9ef0d6e068341e40d57eeb0c9804a4d9c928b64b4dbfc7f3b5eee57bb99da348"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/identity/index.md::0000","path":"engine/reference/network/realm/identity/index.md","title":"network/realm/identity/index.js","description":"","kind":"reference","source":"engine/network/realm/identity/index.js","updated":"","headings":["network/realm/identity/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/index.md::0000","path":"engine/reference/network/realm/index.md","title":"network/realm/index.js","description":"","kind":"reference","source":"engine/network/realm/index.js","updated":"","headings":["network/realm/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Explicit exports win over same named subsystem descriptors and keep the public V1 contract surface stable while subsystem APIs remain available. Re exports , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ad4ffa15dac2dcb8a3679c1a89b063a68468d6f2ac176d0508bffcd6ae67cbc1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/link/ContinuityStore.md::0000","path":"engine/reference/network/realm/link/ContinuityStore.md","title":"network/realm/link/ContinuityStore.js","description":"","kind":"reference","source":"engine/network/realm/link/ContinuityStore.js","updated":"","headings":["network/realm/link/ContinuityStore.js","Functions","validateContinuityRecord(record)","createContinuityRecord({ linkId, realmId, branchId, localPeerId, remotePeerId = null, sessionEpoch = 0, lastSentSequence = 0, remoteMaxSequence = 0, remoteSeenSequences = [], sealedReconnectCredential = null, peerTicket = null, routeHints = [], transfers = [], updatedAt = Date.now()","continuityStorageKey({ realmId, branchId, linkId })","createMemoryContinuityAdapter()","createContinuityStore({ adapter = createMemoryContinuityAdapter()","async saveContinuity(store, record)","async loadContinuity(store, ids)","async removeContinuity(store, ids)","updateTransferProgress(record, update, now = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions In memory adapter for tests and ephemeral sessions; durable OS storage is injected with the same interface. Update one transfer monotonically; completed/cancelled records cannot be reopened. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"abeb5eadd6bdaad0e370846202fc73d424fb1ce88933b43fc8b96b4b5092d766"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/link/DiscoveryProvider.md::0000","path":"engine/reference/network/realm/link/DiscoveryProvider.md","title":"network/realm/link/DiscoveryProvider.js","description":"","kind":"reference","source":"engine/network/realm/link/DiscoveryProvider.js","updated":"","headings":["network/realm/link/DiscoveryProvider.js","Functions","normalizeDiscoveryCandidate(candidate, { sourceId, now = Date.now()","createDiscoveryProvider({ id, kind = DISCOVERYKIND.CUSTOM, priority = 0, discover, advertise = null, revoke = null, health = null, } = {})","createDiscoveryRegistry({ now = ()","registerDiscoveryProvider(registry, provider)","unregisterDiscoveryProvider(registry, providerId)","async discoverRealmPeers(registry, query = {}, { timeoutMs = 5000, correlationId = null } = {})","discoveryProviderStatus(registry)","createBootstrapRegistryProvider({ id = 'bootstrap', registry, priority = 10 } = {})","createPeerTicketDiscoveryProvider({ id = 'peer-tickets', store, priority = 100 } = {})","createDhtDiscoveryProvider({ id = 'dht', transport, priority = 20 } = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Normalize an untrusted provider result into the Realm discovery shape. Define one discovery provider. Network algorithms remain in the adapted subsystem. Query all enabled providers concurrently; one provider failure never erases valid peer results. Adapt the existing ordered bootstrap registry without reproducing its scan logic. Adapt the existing signed peer ticket store into discovery hints. Adapt the existing mesh DHT query transport; callers choose exactly one query key. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a8a93ddd65be3ec8bc3989967d006de79b0edf0d6ff5911aaac32dc5af35b54a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/link/RealmLink.md::0000","path":"engine/reference/network/realm/link/RealmLink.md","title":"network/realm/link/RealmLink.js","description":"","kind":"reference","source":"engine/network/realm/link/RealmLink.js","updated":"","headings":["network/realm/link/RealmLink.js","Functions","createRealmLink({ linkId, realmId, branchId, localIdentity, signer, verifyIdentity, supportedCapabilities = [], authorizeCapabilities = async ({ requested, supported })","async attachRealmLinkTransport(link, session, { initiate = true } = {})","async handleRealmLinkFrame(link, frame, { binding = null } = {})","async sendRealmLinkData(link, kind, payload, { capability = null } = {})","async upgradeRealmLinkTransport(link, candidateSession)","snapshotRealmLink(link)","realmLinkContinuityRecord(link, overrides = {})","async persistRealmLinkContinuity(link, overrides = {})","async markRealmLinkDisconnected(link, reason = 'transport-disconnected')","async closeRealmLink(link, reason = 'local-close')","realmLinkEvidence(link)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create one transport independent logical link. is required so cryptographic key ownership is also checked against Passport/device authorization rather than trusted from an embedded public key. Attach an existing transport session and optionally initiate the authenticated handshake. Verify, deduplicate, authorize, and dispatch one inbound Realm Link frame. Attempt a higher priority channel while the current one remains live. Canonical digest input for diagnostics/evidence without exposing keys or payloads. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7a502d49f53db02ed7ba1f82bc9970dcedac409c8644c23116cfec8883fadc73"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/link/RealmLinkProtocol.md::0000","path":"engine/reference/network/realm/link/RealmLinkProtocol.md","title":"network/realm/link/RealmLinkProtocol.js","description":"","kind":"reference","source":"engine/network/realm/link/RealmLinkProtocol.js","updated":"","headings":["network/realm/link/RealmLinkProtocol.js","Functions","unsignedRealmLinkFrame(frame)","async signRealmLinkFrame({ linkId, realmId, branchId, senderPeerId, sessionEpoch, sequence, messageId, issuedAt, type, payload = null, signer, } = {})","async verifyRealmLinkFrame(frame, { linkId, realmId, branchId, now = Date.now()","createRealmLinkReplayWindow({ width = 256, maxSequence = 0, seen = [] } = {})","acceptRealmLinkReplay(window, frame, { now = Date.now()","snapshotRealmLinkReplayWindow(window)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Build and sign one control/data frame using the existing authority signer. Cryptographically validate a frame. Passport/device authorization is a separate required hook. Sliding sequence window supports limited cross transport reordering while rejecting replay. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"112387d7b6c9cfcb85740d3cd8c39ff7b629d1e1979951d953beb0ea16fed22b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/link/TransportProvider.md::0000","path":"engine/reference/network/realm/link/TransportProvider.md","title":"network/realm/link/TransportProvider.js","description":"","kind":"reference","source":"engine/network/realm/link/TransportProvider.js","updated":"","headings":["network/realm/link/TransportProvider.js","Functions","assertRealmTransportSession(session)","createTransportProvider({ id, kind = TRANSPORTKIND.CUSTOM, priority = null, canConnect = ()","createTransportRegistry({ now = ()","registerTransportProvider(registry, provider)","unregisterTransportProvider(registry, providerId)","async connectRealmTransport(registry, target, opts = {})","transportProviderStatus(registry)","isPreferredTransport(candidate, current)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Realm transport providers adapt existing channels. They do not implement WebRTC, relays, WebSockets, LAN sockets, or encryption themselves. Functions Validate the minimal bidirectional channel RealmLink consumes. Try compatible providers in priority order. A failed direct path naturally falls through to an existing relay/WebSocket provider. True when a candidate session is a meaningful relay to direct upgrade. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1df54e66366cad3342ac980194d9333148093a8c5f4f2ee593d830aa624aed36"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/link/index.md::0000","path":"engine/reference/network/realm/link/index.md","title":"network/realm/link/index.js","description":"","kind":"reference","source":"engine/network/realm/link/index.js","updated":"","headings":["network/realm/link/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/presence/PresenceV1.md::0000","path":"engine/reference/network/realm/presence/PresenceV1.md","title":"network/realm/presence/PresenceV1.js","description":"","kind":"reference","source":"engine/network/realm/presence/PresenceV1.js","updated":"","headings":["network/realm/presence/PresenceV1.js","Functions","createPresenceV1({ realmId, branchId, actorId, deviceId, sessionId, sequence, status = PRESENCESTATUS.ONLINE, activity = null, location = null, issuedAt = Date.now()","async signPresenceV1(record, signer)","async verifyPresenceV1(record, { authorizeKey, now = Date.now()","createPresenceTracker({ authorizeKey, now = ()","async ingestPresence(tracker, record)","pruneExpiredPresence(tracker, now = tracker.now()","presenceSnapshot(tracker, { realmId = null, branchId = null } = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Verify signature, expiry, and Passport/device key authorization. Accept each signed session sequence once; a gap is surfaced but does not invent missing state. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2ca05a08f0fec8928907e396f9fdbed10f2f2888a68270d4f7f76b8ddad1a8b1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/presence/index.md::0000","path":"engine/reference/network/realm/presence/index.md","title":"network/realm/presence/index.js","description":"","kind":"reference","source":"engine/network/realm/presence/index.js","updated":"","headings":["network/realm/presence/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/publishing/RealmJourneyJournal.md::0000","path":"engine/reference/network/realm/publishing/RealmJourneyJournal.md","title":"network/realm/publishing/RealmJourneyJournal.js","description":"","kind":"reference","source":"engine/network/realm/publishing/RealmJourneyJournal.js","updated":"","headings":["network/realm/publishing/RealmJourneyJournal.js","Classes","class RealmJourneyJournal","Functions","normalizeRealmLocation(value, name = 'Realm location')","async createJourneyEvent(input, signer)","async verifyJourneyEvent(record, options = {})","async verifyJourneyJournal(events, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Signed publish/inspect/enter/leave history with exact branch aware returns. Classes An append only signed journal. Entry transitions are replayed locally; no network or storage side effects occur until a caller persists its snapshot. Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"34a9a31f49557c1082037b902e9673224e8db09fcd2bcfb5f80c147365135d5b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/publishing/index.md::0000","path":"engine/reference/network/realm/publishing/index.md","title":"network/realm/publishing/index.js","description":"","kind":"reference","source":"engine/network/realm/publishing/index.js","updated":"","headings":["network/realm/publishing/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a89e686480bebc5858af4fbbd82cd90cd94c85a42b1faf8274566ba68509b653"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/shield/RealmShield.md::0000","path":"engine/reference/network/realm/shield/RealmShield.md","title":"network/realm/shield/RealmShield.js","description":"","kind":"reference","source":"engine/network/realm/shield/RealmShield.js","updated":"","headings":["network/realm/shield/RealmShield.js","Classes","class RealmShield","Functions","async verifyShieldAuditTrail(events)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Runtime isolation, quotas, moderation, and tamper evident audit for Realm entry. Classes Realm Shield is deliberately local. It applies signed Gate plans but stores no Realm authority and performs no server side enforcement. Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"974eaa5e478a90fd4a1802535685fcdbbfc94879d167c5b83fdabbc2bdd93c00"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/realm/shield/index.md::0000","path":"engine/reference/network/realm/shield/index.md","title":"network/realm/shield/index.js","description":"","kind":"reference","source":"engine/network/realm/shield/index.js","updated":"","headings":["network/realm/shield/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8d8c08f82b1d74086b1fc7b5ca868330a15a95f573d530cc431b0f9b91d5559b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/MasterServerList.md::0000","path":"engine/reference/network/routes/MasterServerList.md","title":"network/routes/MasterServerList.js","description":"","kind":"reference","source":"engine/network/routes/MasterServerList.js","updated":"","headings":["network/routes/MasterServerList.js","Functions","defaultParticleMasterServers()","readParticleMasterServerRecord(storage = globalThis.localStorage)","loadParticleMasterServers(storage = globalThis.localStorage)","saveParticleMasterServers(list, storage = globalThis.localStorage)","normalizeMasterServerList(config = {})","pickNextMasterServer(masterServers, { excluded = [] } = {})","buildConnectionOrder(normalized)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions A fresh, mutable copy of the client shipped production bootstrap list. Strict read used by writers to quarantine unsupported/corrupt records. 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. Parameters: (object) — No description in source JSDoc. (Array) — No description in source JSDoc. (object) — No description in source JSDoc. Returns: } Pick the next enabled master server to try, in priority order, skipping any whose url is in (e.g. servers that just failed this round). Parameters: (object[]) — from normalizeMasterServerList().masterServers (object) — No description in source JSDoc. (string[]) — No description in source JSDoc. Build the full connection attempt order (network plan §4): cached peers LAN group gossip master servers (by priority) carrier DHT relay. Stages disabled via (or with no master servers configured) are omitted. Parameters: (object) — from normalizeMasterServerList() Returns: } Constants — Fallback stages other than master servers themselves, in priority order (§4). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see","contentHash":"29b1bd8cc28711e9abaf215372bec6ca671677586b2fe7bb0c5a23ad3e8f09d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/MasterServerList.md::0001","path":"engine/reference/network/routes/MasterServerList.md","title":"network/routes/MasterServerList.js","description":"","kind":"reference","source":"engine/network/routes/MasterServerList.js","updated":"","headings":["network/routes/MasterServerList.js","Functions","defaultParticleMasterServers()","readParticleMasterServerRecord(storage = globalThis.localStorage)","loadParticleMasterServers(storage = globalThis.localStorage)","saveParticleMasterServers(list, storage = globalThis.localStorage)","normalizeMasterServerList(config = {})","pickNextMasterServer(masterServers, { excluded = [] } = {})","buildConnectionOrder(normalized)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"master servers themselves, in priority order (§4). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1ef0ca53411c263ebb80f6c6098d8bcd4ab56596c59d05d23d6ffc9b5f9740d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/NodeRoleProtocol.md::0000","path":"engine/reference/network/routes/NodeRoleProtocol.md","title":"network/routes/NodeRoleProtocol.js","description":"","kind":"reference","source":"engine/network/routes/NodeRoleProtocol.js","updated":"","headings":["network/routes/NodeRoleProtocol.js","Functions","async signNodeRoleAnnouncement({ routeId, nodeId, sequence, availability = 'foreground', roles = ['resident'], capabilities = [], ttlMs = NODEROLEMAXTTLMS, signer, now = Date.now()","async verifyNodeRoleAnnouncement(message, { routeId, peerId, lastSequence = 0, now = Date.now()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Build a signed, expiring role announcement for one route. Verify signature, device key binding, route scope, freshness, and ordering. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ba55d0541f9d28f0bd2afb04e0f9a5b5c6c8beaa27dd407130bf4785027c81c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/OsNetworkSession.md::0000","path":"engine/reference/network/routes/OsNetworkSession.md","title":"network/routes/OsNetworkSession.js","description":"","kind":"reference","source":"engine/network/routes/OsNetworkSession.js","updated":"","headings":["network/routes/OsNetworkSession.js","Functions","createOsNetworkSession(routeId, opts = {})","addSessionOpHandler(session, handlerFn)","registerSessionProtocol(session, descriptor)","sessionSendToPeer(session, peerId, data)","sessionSendProtocol(session, peerId, data, { requireAdvertised = false } = {})","sessionBroadcast(session, data)","sessionBroadcastProtocol(session, data, { requireAdvertised = false } = {})","sessionPeerIds(session)","sessionTopologyStats(session)","sessionPeerMetrics(session)","sessionProtocolStatus(session)","destroyOsNetworkSession(session)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: network/routes/OsNetworkSession.js — the concrete factory was designed to take (network plan Phase 2 note: \"typically a thin wrapper around \"). 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 ( ) for V1 sync, which left / / (all three built against a real peer addressed + ) with no live mesh to run on. This module closes that gap. 's Tier 4 signaling (see 's header comment) already reads from localStorage and lazily acquires the shared pinned V2 ParticleNetworkDaemon itself. Explicit compatibility endpoints may still use the shared V1 registry. Therefore gets real cross internet WebRTC signaling over the same Masterserver config the Control Panel manages. Deliberately skips CollabCore's own peer identity/ECDH handshake ( / / / , ): that machinery expects raw keys (ECDH keypair + identity proof), which is a different, lower level API than the CSE wrapped this layer's identity/ signers use (see 's own header comment). This is not a security gap — every OS level payload carried over this session already brings its own crypto/verification: content hashes, onion ECDH, AES GCM, signed / envelopes. CollabCore here is used purely as a WebRTC transport (data channels + DTLS), the same way et al. were written to treat any . Functions Parameters: (string) — No description in source JSDoc. (object) — No description in source JSDoc. (string) — stable peer id for this session (e.g. ) (string) — No description in source JSDoc. (string Uint8Array ArrayBuffer null) — private 32 byte invite secret or passphrase; null marks a public room ((peerId:string, op:object)","contentHash":"5e1f0bd8702d1d56c2f0b53b884f3a83945a957075e96749837387bb5503ff4f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/OsNetworkSession.md::0001","path":"engine/reference/network/routes/OsNetworkSession.md","title":"network/routes/OsNetworkSession.js","description":"","kind":"reference","source":"engine/network/routes/OsNetworkSession.js","updated":"","headings":["network/routes/OsNetworkSession.js","Functions","createOsNetworkSession(routeId, opts = {})","addSessionOpHandler(session, handlerFn)","registerSessionProtocol(session, descriptor)","sessionSendToPeer(session, peerId, data)","sessionSendProtocol(session, peerId, data, { requireAdvertised = false } = {})","sessionBroadcast(session, data)","sessionBroadcastProtocol(session, data, { requireAdvertised = false } = {})","sessionPeerIds(session)","sessionTopologyStats(session)","sessionPeerMetrics(session)","sessionProtocolStatus(session)","destroyOsNetworkSession(session)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"in source JSDoc. (string Uint8Array ArrayBuffer null) — private 32 byte invite secret or passphrase; null marks a public room ((peerId:string, op:object) = void) — called when no registered op handler consumed a message ((peerId:string) = void) — No description in source JSDoc. ((peerId:string) = void) — No description in source JSDoc. (object) — optional injected RouteProtocolRegistry ((event:object) = void) — structured protocol diagnostics Returns: session — pass to addSessionOpHandler/destroyOsNetworkSession Register an op handler (e.g. 's , 's , 's — all follow the same \"handled?\" chaining pattern). Handlers are tried in registration order; the first one that returns consumes the message. Returns: unsubscribe function Register a bounded, version aware route protocol handler. This session's — the exact shape ChunkTransport/CarrierRelay/DhtTransport expect. Send a versioned protocol envelope, optionally requiring peer advertisement. Broadcast one application op to every connected direct mesh neighbor. Broadcast a versioned envelope only to compatible or pre catalog peers. Connected peer IDs for routing and role coordination. Mesh topology stats for UI display (mode, neighbor count, supernode status, gossip counters). Locally measured, secret free peer transport observations. Protocol catalog, peer negotiation, and bounded dispatch counters. Tear down a session's WebRTC connections, signaling, and topology timers. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"55f5ec943ce178589bdbc82ce282834e82baf60e32d62d7897b124fe409ee547"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/ReconnectBackoff.md::0000","path":"engine/reference/network/routes/ReconnectBackoff.md","title":"network/routes/ReconnectBackoff.js","description":"","kind":"reference","source":"engine/network/routes/ReconnectBackoff.js","updated":"","headings":["network/routes/ReconnectBackoff.js","Functions","createReconnectBackoff(cfg = {})","nextBackoffDelay(backoff)","isBackoffExhausted(backoff)","resetBackoff(backoff)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a reconnect backoff sequence. Parameters: (object) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — 0 = unlimited (number) — +/ fraction of the delay to randomize (() = number) — injectable RNG for deterministic tests Returns: backoff state Compute the next delay (ms) and advance the attempt counter. Parameters: (object) — No description in source JSDoc. Returns: } True once has been exceeded (0 = never exhausted). Matches nextBackoffDelay's flag. Reset the attempt counter after a successful (re)connect. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"106c487243a3d92549623612f38cdab47fca8c484a0129767833c78f015937fd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/RouteProtocolRegistry.md::0000","path":"engine/reference/network/routes/RouteProtocolRegistry.md","title":"network/routes/RouteProtocolRegistry.js","description":"","kind":"reference","source":"engine/network/routes/RouteProtocolRegistry.js","updated":"","headings":["network/routes/RouteProtocolRegistry.js","Functions","createRouteProtocolRegistry({ now = ()","registerRouteProtocol(registry, { id, protocols = [], matches = null, handle, authorize = null, validate = null, priority = 0, maxBytes = null, } = {})","unregisterRouteProtocol(registry, descriptorId)","routeProtocolCatalog(registry)","createRouteProtocolCatalogOp(registry)","forgetRouteProtocolPeer(registry, peerId)","peerSupportsRouteProtocol(registry, peerId, protocol)","async dispatchRouteProtocol(registry, peerId, op, context = {})","routeProtocolRegistryStatus(registry)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Dispatch one route operation. Protocol bearing traffic always fails closed. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d957dcfc4975d3bf98d87c4ade6686ea27c342388243dc93591e70ef36992aff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/RouteSessionManager.md::0000","path":"engine/reference/network/routes/RouteSessionManager.md","title":"network/routes/RouteSessionManager.js","description":"","kind":"reference","source":"engine/network/routes/RouteSessionManager.js","updated":"","headings":["network/routes/RouteSessionManager.js","Functions","createRouteSessionManager({ createSession, destroySession = null } = {})","ensureRouteSession(manager, routeId, opts = {})","acquireRouteSession(manager, routeId, opts = {})","releaseRouteSession(manager, routeId, options = {})","routeSessionLeaseStatus(manager, routeId)","getRouteSession(manager, routeId)","teardownRouteSession(manager, routeId, options = {})","listRouteSessions(manager)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 (typically a thin wrapper around ) 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). Functions Parameters: (object) — No description in source JSDoc. ((routeId:string, opts:object) = object) — No description in source JSDoc. ((session:object, routeId:string) = void) — No description in source JSDoc. Get the session for , creating it via the factory if it doesn't exist yet. 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. Release one local route lease without affecting other consumers. Inspect lease ownership without exposing route secrets or session internals. Get an existing session, or null. Does NOT create one. Tear down and forget a route's session (calls if provided). List routeIds with a live session. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"16a8b89a73f8205e12aa0333467508ee60c7fbcf66fe6c2bbb3e4072475812a7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/RouteTable.md::0000","path":"engine/reference/network/routes/RouteTable.md","title":"network/routes/RouteTable.js","description":"","kind":"reference","source":"engine/network/routes/RouteTable.js","updated":"","headings":["network/routes/RouteTable.js","Functions","createRouteTable(cfg = {})","attachRoute(table, { routeId, principal, capability, ttlMs = DEFAULTROUTETTLMS, meta = {} } = {})","heartbeatRoute(table, { routeId, principal, ttlMs = DEFAULTROUTETTLMS } = {})","detachRoute(table, { routeId, principal } = {})","pruneExpiredRoutes(table, now = now()","isRouteAttached(table, routeId)","getRoute(table, routeId)","listRoutes(table)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create an empty route table. Parameters: (object) — No description in source JSDoc. (string) — this device/session's peer id (for convenience defaults) Returns: route table state Attach to a route. Validates the capability authorizes 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. Parameters: (object) — No description in source JSDoc. (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — the attaching signer's fingerprint (object) — from makeRouteCapability()/attenuateRouteCapability() (number) — lease duration (default DEFAULT ROUTE TTL MS) (object) — opaque local metadata (routeType, maxFanout, maxHops, ...) Returns: } Refresh a principal's lease on a route (heartbeat). Re checks the capability so a revoked capability cannot keep renewing its lease. Returns: } Detach a principal from a route. Removes the route entirely once empty. Remove all","contentHash":"55d50d0991c328b457ba94ee3d41d22a7e3f1057248dfb2850022e418d13f107"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/RouteTable.md::0001","path":"engine/reference/network/routes/RouteTable.md","title":"network/routes/RouteTable.js","description":"","kind":"reference","source":"engine/network/routes/RouteTable.js","updated":"","headings":["network/routes/RouteTable.js","Functions","createRouteTable(cfg = {})","attachRoute(table, { routeId, principal, capability, ttlMs = DEFAULTROUTETTLMS, meta = {} } = {})","heartbeatRoute(table, { routeId, principal, ttlMs = DEFAULTROUTETTLMS } = {})","detachRoute(table, { routeId, principal } = {})","pruneExpiredRoutes(table, now = now()","isRouteAttached(table, routeId)","getRoute(table, routeId)","listRoutes(table)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"so a revoked capability cannot keep renewing its lease. Returns: } Detach a principal from a route. Removes the route entirely once empty. Remove all expired subscriber leases (and any routes left with zero subscribers). Call this periodically (e.g. alongside heartbeat ticks). Returns: } removed leases True if currently has at least one live subscriber. Snapshot of a route's subscribers, or null. List all currently live routes (opaque summaries only — no capability objects). Constants — Default route lease TTL (network plan §9/§35: 90s). — Default heartbeat interval to keep a lease alive (network plan §8: 25 30s). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"08a1500114387295d53005c4425ed902e48d33a589a5ddda8fc7e759d2a0a46c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/routes/index.md::0000","path":"engine/reference/network/routes/index.md","title":"network/routes/index.js","description":"","kind":"reference","source":"engine/network/routes/index.js","updated":"","headings":["network/routes/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/BroadcastStateChannelTransport.md::0000","path":"engine/reference/network/stateChannels/BroadcastStateChannelTransport.md","title":"network/stateChannels/BroadcastStateChannelTransport.js","description":"","kind":"reference","source":"engine/network/stateChannels/BroadcastStateChannelTransport.js","updated":"","headings":["network/stateChannels/BroadcastStateChannelTransport.js","Classes","class BroadcastStateChannelTransport","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/InProcessStateChannelTransport.md::0000","path":"engine/reference/network/stateChannels/InProcessStateChannelTransport.md","title":"network/stateChannels/InProcessStateChannelTransport.js","description":"","kind":"reference","source":"engine/network/stateChannels/InProcessStateChannelTransport.js","updated":"","headings":["network/stateChannels/InProcessStateChannelTransport.js","Classes","class InProcessStateChannelTransport","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/MeshStateChannelTransport.md::0000","path":"engine/reference/network/stateChannels/MeshStateChannelTransport.md","title":"network/stateChannels/MeshStateChannelTransport.js","description":"","kind":"reference","source":"engine/network/stateChannels/MeshStateChannelTransport.js","updated":"","headings":["network/stateChannels/MeshStateChannelTransport.js","Classes","class MeshStateChannelTransport","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes State Channel transport over browser to browser WebRTC mesh messages. Method Signature Summary Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f94c6ce3b35c00ad2d656d4b64ac42d7ce828702d41c8768531ded58461865ed"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/ParticleSignalStateChannelTransport.md::0000","path":"engine/reference/network/stateChannels/ParticleSignalStateChannelTransport.md","title":"network/stateChannels/ParticleSignalStateChannelTransport.js","description":"","kind":"reference","source":"engine/network/stateChannels/ParticleSignalStateChannelTransport.js","updated":"","headings":["network/stateChannels/ParticleSignalStateChannelTransport.js","Classes","class ParticleSignalStateChannelTransport","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/SseStateChannelTransport.md::0000","path":"engine/reference/network/stateChannels/SseStateChannelTransport.md","title":"network/stateChannels/SseStateChannelTransport.js","description":"","kind":"reference","source":"engine/network/stateChannels/SseStateChannelTransport.js","updated":"","headings":["network/stateChannels/SseStateChannelTransport.js","Classes","class SseStateChannelTransport","Functions","createDefaultStateChannelTransport(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Default standard transport: SSE projections/receipts down, HTTP intents up. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"04424a1e1e282afc334f19d60a7e1207ef022bf1fea4ff72fc6350bab0f624a2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/StateChannelAuthority.md::0000","path":"engine/reference/network/stateChannels/StateChannelAuthority.md","title":"network/stateChannels/StateChannelAuthority.js","description":"","kind":"reference","source":"engine/network/stateChannels/StateChannelAuthority.js","updated":"","headings":["network/stateChannels/StateChannelAuthority.js","Classes","class StateChannelAuthority","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Durable authority state used by witnesses and takeover candidates. Restore a non regressing checkpoint before resuming authority work. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9af4acfffef9b795333ff4b1f2e9fda478fbd93a225f6a7dd12452fffe508471"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/StateChannelAuthorityCoordinator.md::0000","path":"engine/reference/network/stateChannels/StateChannelAuthorityCoordinator.md","title":"network/stateChannels/StateChannelAuthorityCoordinator.js","description":"","kind":"reference","source":"engine/network/stateChannels/StateChannelAuthorityCoordinator.js","updated":"","headings":["network/stateChannels/StateChannelAuthorityCoordinator.js","Classes","class StateChannelAuthorityCoordinator","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d376d61d4beb8ea4b3e391feb245ca0ed6e6cea9c5ee49fa14675472470afe02"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/StateChannelClient.md::0000","path":"engine/reference/network/stateChannels/StateChannelClient.md","title":"network/stateChannels/StateChannelClient.js","description":"","kind":"reference","source":"engine/network/stateChannels/StateChannelClient.js","updated":"","headings":["network/stateChannels/StateChannelClient.js","Classes","class StateChannelClient","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/StateChannelContract.md::0000","path":"engine/reference/network/stateChannels/StateChannelContract.md","title":"network/stateChannels/StateChannelContract.js","description":"","kind":"reference","source":"engine/network/stateChannels/StateChannelContract.js","updated":"","headings":["network/stateChannels/StateChannelContract.js","Functions","defineStateChannelContract(input = {})","createStateIntent(channelId, action, payload, options = {})","createStateProjection(channelId, projection, options = {})","createStateReceipt(intent, options = {})","validateStateChannelMessage(message, channelId = null)","readStateChannelMessage(message, channelId = null)","negotiateStateChannelVersion(peerVersions, localVersions = STATECHANNELSUPPORTEDVERSIONS)","applyStateProjection(currentState, message)","createMergePatch(previous, next)","applyMergePatch(target, patch)","jsonClone(value)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/StateChannelTransportResolver.md::0000","path":"engine/reference/network/stateChannels/StateChannelTransportResolver.md","title":"network/stateChannels/StateChannelTransportResolver.js","description":"","kind":"reference","source":"engine/network/stateChannels/StateChannelTransportResolver.js","updated":"","headings":["network/stateChannels/StateChannelTransportResolver.js","Functions","resolveStateChannelTransport(options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Resolve transport from authority location. Server backed channels remain SSE by default; peer authority explicitly selects the WebRTC mesh. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c1600afa6728aa7ebc27484d7a811d69e66eac36885a82de0857ca9ad487d5e5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/stateChannels/index.md::0000","path":"engine/reference/network/stateChannels/index.md","title":"network/stateChannels/index.js","description":"","kind":"reference","source":"engine/network/stateChannels/index.js","updated":"","headings":["network/stateChannels/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/syncManager/SyncCategory.md::0000","path":"engine/reference/network/syncManager/SyncCategory.md","title":"network/syncManager/SyncCategory.js","description":"","kind":"reference","source":"engine/network/syncManager/SyncCategory.js","updated":"","headings":["network/syncManager/SyncCategory.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: network/syncManager/SyncCategory.js — sync categories + target scopes (network plan §20 Sync Manager). Constants — What a synced value may fan out to. — The category groupings a profile's Sync Manager governs (network plan §20). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7ef710eed7230b11c79c3bf9a6f47c39fe50d3c0f7ca92da40733d4221811925"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/syncManager/SyncManager.md::0000","path":"engine/reference/network/syncManager/SyncManager.md","title":"network/syncManager/SyncManager.js","description":"","kind":"reference","source":"engine/network/syncManager/SyncManager.js","updated":"","headings":["network/syncManager/SyncManager.js","Functions","createSyncManager({ rules = {} } = {})","setSyncRule(manager, category, { scope, enabled, targetDeviceIds } = {})","getSyncRule(manager, category)","listSyncRules(manager)","shouldSync(manager, category, targetScope)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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). Parameters: (object) — No description in source JSDoc. (object) — partial overrides keyed by category Set/update a category's sync rule. Parameters: (object) — No description in source JSDoc. (string) — one of SYNC CATEGORIES (object) — No description in source JSDoc. (string) — one of SYNC SCOPE (boolean) — No description in source JSDoc. (string[]) — required/used when scope === SELECTED DEVICES Returns: the resulting rule Get a category's current rule, or null if unset. All rules as a flat array of . Should currently sync to right now? Used as a gate before a caller pushes an update over a route/group. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ca5c9463f63ce59b6740c21e4c0e37441293cb70286c1c5f1f0828c77ed0e1db"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/syncManager/SyncTransport.md::0000","path":"engine/reference/network/syncManager/SyncTransport.md","title":"network/syncManager/SyncTransport.js","description":"","kind":"reference","source":"engine/network/syncManager/SyncTransport.js","updated":"","headings":["network/syncManager/SyncTransport.js","Functions","serializeWorkstationState(state)","deserializeWorkstationState(wire)","createSyncTransport({ client, routeId, syncManager, category, targetScope, getWorkstation, setWorkstation })","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 to every other session attached to the route, and incoming SIGNAL events for that routeId are folded in via CRDT join ( ). 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 ( ), 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). Functions Serialize a WorkstationState.js state object into a JSON safe wire payload. Inverse of serializeWorkstationState — reconstructs real CRDT instances (not plain values). Wire a live group workstation to a connected + route attached MasterServerClient. Both push (outgoing) and handleEvent (incoming) are gated by the same check, so disabling a category locally stops us from both broadcasting AND accepting that category's updates. Parameters: (object) — No description in source JSDoc. (object) — a connected (string) — the route both local and remote sessions are attached to (object) — from (string) — a entry gating this transport (typically 'desktop') (string) — the this route represents (e.g. ) Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable","contentHash":"8a9e704b57a5f2a937819e8fa6438f3647462df0b4f635c9008e12ebfdb5a555"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/syncManager/SyncTransport.md::0001","path":"engine/reference/network/syncManager/SyncTransport.md","title":"network/syncManager/SyncTransport.js","description":"","kind":"reference","source":"engine/network/syncManager/SyncTransport.js","updated":"","headings":["network/syncManager/SyncTransport.js","Functions","serializeWorkstationState(state)","deserializeWorkstationState(wire)","createSyncTransport({ client, routeId, syncManager, category, targetScope, getWorkstation, setWorkstation })","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"'desktop') (string) — the this route represents (e.g. ) Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"82985ffc5bbe650405ed92b417574f697e8d526ed76c7d0cec4569eda0175ba3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/syncManager/index.md::0000","path":"engine/reference/network/syncManager/index.md","title":"network/syncManager/index.js","description":"","kind":"reference","source":"engine/network/syncManager/index.js","updated":"","headings":["network/syncManager/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/transport/MasterServerClient.md::0000","path":"engine/reference/network/transport/MasterServerClient.md","title":"network/transport/MasterServerClient.js","description":"","kind":"reference","source":"engine/network/transport/MasterServerClient.js","updated":"","headings":["network/transport/MasterServerClient.js","Functions","createMasterServerClient({ url, deviceSigner = null, onEvent = null } = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 namespace — the server validates and 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(). Functions Create a live client for one Masterserver. Does not auto connect — call explicitly. Parameters: (object) — No description in source JSDoc. (string) — wss:// URL of the Masterserver's /v1/ws endpoint (object) — signer from createDeviceIdentity() — required to complete PROVE Returns: client { connect, disconnect, ping, discover, getState } Constants — Connection lifecycle states surfaced via onEvent(). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1662208fa6b2a88e27dfc9f0c02ae0fbc7f322dd9709b45d78b3a1ca581cd661"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/transport/MasterServerRegistry.md::0000","path":"engine/reference/network/transport/MasterServerRegistry.md","title":"network/transport/MasterServerRegistry.js","description":"","kind":"reference","source":"engine/network/transport/MasterServerRegistry.js","updated":"","headings":["network/transport/MasterServerRegistry.js","Functions","acquireSharedMasterServerClient({ url, deviceSigner = null, onEvent = null } = {})","hasSharedMasterServerClient(url)","sharedMasterServerClientStats(url)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Acquire a shared, ref counted MasterServerClient for , 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. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (object) — only used if this is the first consumer ((event:object) = void) — this consumer's own listener Returns: } True if a shared client for this url","contentHash":"e8d8a9ac7edbaf50ea2fe70a54f4b4034c4f841fdb11d8ade28c9818b995680f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/transport/MasterServerRegistry.md::0001","path":"engine/reference/network/transport/MasterServerRegistry.md","title":"network/transport/MasterServerRegistry.js","description":"","kind":"reference","source":"engine/network/transport/MasterServerRegistry.js","updated":"","headings":["network/transport/MasterServerRegistry.js","Functions","acquireSharedMasterServerClient({ url, deviceSigner = null, onEvent = null } = {})","hasSharedMasterServerClient(url)","sharedMasterServerClientStats(url)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"(object) — only used if this is the first consumer ((event:object) = void) — this consumer's own listener Returns: } True if a shared client for this url already exists (connecting or connected). Current listener/ref count for a url's shared client, or null if none exists. Diagnostics only. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8d24f888edce9c5eec86d171761f637ffbad462f2db8d7e1a3a4d0a96122284e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/transport/index.md::0000","path":"engine/reference/network/transport/index.md","title":"network/transport/index.js","description":"","kind":"reference","source":"engine/network/transport/index.js","updated":"","headings":["network/transport/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/workstation/Workstation.md::0000","path":"engine/reference/network/workstation/Workstation.md","title":"network/workstation/Workstation.js","description":"","kind":"reference","source":"engine/network/workstation/Workstation.js","updated":"","headings":["network/workstation/Workstation.js","Functions","createWorkstation({ groupId } = {})","mergeWorkstation(workstation, otherState)","computeWorkstationStateRoot(workstation)","buildWorkstationCheckpointPayload(workstation, { governanceHead, appRegistryHash = null, manifestRoot = null } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create a new (empty) group workstation. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. Merge in another replica's CRDT state (order independent). Stable content hash of the current workstation state (\"desktopStateRoot\"). Build the payload for a WORKSTATION CHECKPOINTED governance event (network plan §19). Pass the result straight into GroupLedger's . Parameters: (object) — No description in source JSDoc. (object) — No description in source JSDoc. (string) — ledger.eventLog.head at checkpoint time (string) — No description in source JSDoc. (string) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f3e3d0ab3712fe952eb4aaf4d337c3009f963a92e800765aa81af643bbeb04fc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/workstation/WorkstationState.md::0000","path":"engine/reference/network/workstation/WorkstationState.md","title":"network/workstation/WorkstationState.js","description":"","kind":"reference","source":"engine/network/workstation/WorkstationState.js","updated":"","headings":["network/workstation/WorkstationState.js","Functions","createWorkstationState()","pinApp(state, appId)","unpinApp(state, appId)","addFolder(state, folderId)","removeFolder(state, folderId)","addAgent(state, agentId)","removeAgent(state, agentId)","setWindowLayout(state, windowId, layout, ts, node = '')","getWindowLayout(state, windowId)","setWallpaper(state, wallpaper, ts, node = '')","mergeWorkstationState(a, b)","snapshotWorkstationState(state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create an empty workstation CRDT state. Set a window's layout (LWW: highest (ts, node) wins on merge). Join two workstation states (CRDT merge — order independent, convergent). Plain, JSON serializable snapshot (for hashing/checkpointing/transport). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0f5c8bc94cb9cfe66da66cac624c4542566d6a92ca0b78000fbef5fe40183871"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/network/workstation/index.md::0000","path":"engine/reference/network/workstation/index.md","title":"network/workstation/index.js","description":"","kind":"reference","source":"engine/network/workstation/index.js","updated":"","headings":["network/workstation/index.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/CameraMath.md::0000","path":"engine/reference/render/CameraMath.md","title":"render/CameraMath.js","description":"","kind":"reference","source":"engine/render/CameraMath.js","updated":"","headings":["render/CameraMath.js","Functions","computePerspectiveProjection(camera, aspectFallback, options = {})","computeOrthographicProjection(camera, viewHeight, aspectFallback)","computeViewMatrixFromTransform(transform)","computeViewProjMatrix(camera, transform, viewportWidth, viewportHeight)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Compute perspective projection matrix. Parameters: (Object) — Camera with fov, aspect, near, far (number) — Fallback aspect ratio (Object) — Optional settings (boolean) — Use WebGPU [0,1] depth range (default: true) Returns: Projection matrix <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ea05a8084c49d7e87282be82bf727b467ed91f557d48c6b3683f86ab40b89732"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/DrawHelpers.md::0000","path":"engine/reference/render/DrawHelpers.md","title":"render/DrawHelpers.js","description":"","kind":"reference","source":"engine/render/DrawHelpers.js","updated":"","headings":["render/DrawHelpers.js","Functions","drawMesh(pass, mesh, bindGroup)","encodeIndexedMeshClusterCulling(commandEncoder, viewProj, meshes)","drawMeshes(pass, meshEntries)","beginStandardRenderPass(encoder, options)","ensureDepthTexture(device, current, width, height)","ensureSceneColorTexture(device, current, width, height, format = \"bgra8unorm\")","buildViewProjData(projection, view, multiply, out = null)","renderParticleBillboards(renderPass, particles, options)","renderVolumetricSmoke(encoder, swapView, smoke, options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Draw a mesh with the given bind group and uniforms. Draw multiple meshes efficiently. Create a render pass with standard settings. Ensure depth texture matches canvas size, recreating if needed. Ensure scene color texture matches canvas size, recreating if needed. Used for screen space water refraction which needs to sample the rendered scene. Parameters: (GPUDevice) — WebGPU device (GPUTexture) — Current scene color texture (or null) (number) — Canvas width (number) — Canvas height (string) — Texture format (default: 'bgra8unorm') Returns: } Build viewProj matrix data for a frame buffer. Render particle billboards or points in an existing render pass. Automatically detects point list vs triangle list topology. Parameters: (GPURenderPassEncoder) — Active render pass (Object) — Particle state object with pipeline, frameBuffer, etc. (Object) — { projection, view, updateBuffer, mat4Multiply, getCameraEyeBasis } Render volumetric smoke in a separate pass after the main render pass. Parameters: (GPUCommandEncoder) — Command encoder (GPUTextureView) — Swap chain texture view (Object) — Smoke state object (Object) — { projection, view, depthTextureView, getCameraEyeBasis, canvas, updateBuffer, mat4Multiply, mat4Inverse, logger } Returns: Whether smoke was rendered <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device","contentHash":"391ab992523553e48fcdca7efc8e72e8f8f33fb9ecfe816de479bf3d15468cdb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/DrawHelpers.md::0001","path":"engine/reference/render/DrawHelpers.md","title":"render/DrawHelpers.js","description":"","kind":"reference","source":"engine/render/DrawHelpers.js","updated":"","headings":["render/DrawHelpers.js","Functions","drawMesh(pass, mesh, bindGroup)","encodeIndexedMeshClusterCulling(commandEncoder, viewProj, meshes)","drawMeshes(pass, meshEntries)","beginStandardRenderPass(encoder, options)","ensureDepthTexture(device, current, width, height)","ensureSceneColorTexture(device, current, width, height, format = \"bgra8unorm\")","buildViewProjData(projection, view, multiply, out = null)","renderParticleBillboards(renderPass, particles, options)","renderVolumetricSmoke(encoder, swapView, smoke, options)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"39cec35acf9009480bd1c9d91c75981ef9b86a65e977b9f5d34c25889c00eaa4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/DualModeRenderer.md::0000","path":"engine/reference/render/DualModeRenderer.md","title":"render/DualModeRenderer.js","description":"","kind":"reference","source":"engine/render/DualModeRenderer.js","updated":"","headings":["render/DualModeRenderer.js","Classes","class ParticleRenderer","class DualModeRenderer","Functions","velocityToColor(vx, vy, vz, scale = 0.1)","generateInstanceData(positions, velocities, particleSize = 1.0, colorScale = 0.1)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Update particle data from storage buffer Update instance buffer with velocity to color mapping Upload instance data from CPU Update uniforms Render particles Method Signature Summary Initialize both renderers Update LOD based on camera distance to volume center Set view mode Update particle data Update volume density Render frame Get current rendering stats Resize render targets Functions Map velocity to color Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: RGBA Generate particle instance data from positions and velocities Parameters: (Float32Array) — xyz per particle (Float32Array) — xyz per particle (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: 8 floats per particle Constants — View modes — LOD distance thresholds — Particle rendering styles <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks","contentHash":"c41c0f7ec744877c6ee0b979d448532d456ec9feb2d0470022dea0dbdfe6a215"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/DualModeRenderer.md::0001","path":"engine/reference/render/DualModeRenderer.md","title":"render/DualModeRenderer.js","description":"","kind":"reference","source":"engine/render/DualModeRenderer.js","updated":"","headings":["render/DualModeRenderer.js","Classes","class ParticleRenderer","class DualModeRenderer","Functions","velocityToColor(vx, vy, vz, scale = 0.1)","generateInstanceData(positions, velocities, particleSize = 1.0, colorScale = 0.1)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"457e8d96bd267302938589feb1c5cb12a462483844113b501fdebc5da4979cdc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/IndexedClusterCuller.md::0000","path":"engine/reference/render/IndexedClusterCuller.md","title":"render/IndexedClusterCuller.js","description":"","kind":"reference","source":"engine/render/IndexedClusterCuller.js","updated":"","headings":["render/IndexedClusterCuller.js","Classes","class IndexedClusterCuller","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/LightManager.md::0000","path":"engine/reference/render/LightManager.md","title":"render/LightManager.js","description":"","kind":"reference","source":"engine/render/LightManager.js","updated":"","headings":["render/LightManager.js","Classes","class LightManager","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Collect lights from ECS world and upload to GPU. Call once per frame before rendering. Get the WGSL struct definitions for the lighting uniform. Renderers embed this in their shader source. Get the WGSL lighting calculation function. Expects uniform to be bound. Uses PBR: GGX/Trowbridge Reitz NDF, Smith Schlick geometry, Schlick Fresnel. calcAllLighting(fragPos, normal, baseColor, viewDir, roughness, metallic) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device.","contentHash":"b8e230401f4f28e8c4f24c0d46e405c4dea614a1416636900396de5d9057d52f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/LightManager.md::0001","path":"engine/reference/render/LightManager.md","title":"render/LightManager.js","description":"","kind":"reference","source":"engine/render/LightManager.js","updated":"","headings":["render/LightManager.js","Classes","class LightManager","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"35bb289ce656e34ef53015dc6efa8007f0c8a3a002dc4ebee3eb967266684b62"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/Mesh.md::0000","path":"engine/reference/render/Mesh.md","title":"render/Mesh.js","description":"","kind":"reference","source":"engine/render/Mesh.js","updated":"","headings":["render/Mesh.js","Functions","computeBoundsFromInterleavedPositions(vertexData, strideFloats, positionOffsetFloats = 0)","createMesh(device, description)","createScreenQuadMesh(device, options = {})","createSphereMesh(device, options = {})","getVertexBufferLayoutForMesh(mesh, slot = 0)","createUnitCubeMesh(device, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/MinimapRenderer.md::0000","path":"engine/reference/render/MinimapRenderer.md","title":"render/MinimapRenderer.js","description":"","kind":"reference","source":"engine/render/MinimapRenderer.js","updated":"","headings":["render/MinimapRenderer.js","Classes","class MinimapRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Initialize the minimap Update minimap Draw terrain using ImageData with SAMPLING OPTIMIZATION Only samples every Nth pixel to reduce CPU load from O(n²) to O(n²/step²) Apply brightness shading to a color Draw chunk borders Draw player marker Clear terrain cache (call when chunks change significantly) Invalidate cache for a specific chunk Resize minimap Load config <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"102a359f28a8a0b83d3ea969fe3cdad09448f7cb2e3eddd3905d85d9b12e716a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/PlanetPreviewRenderer.md::0000","path":"engine/reference/render/PlanetPreviewRenderer.md","title":"render/PlanetPreviewRenderer.js","description":"","kind":"reference","source":"engine/render/PlanetPreviewRenderer.js","updated":"","headings":["render/PlanetPreviewRenderer.js","Classes","class PlanetPreviewRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Generate planet preview showing explored region Calculate bounds of explored chunks in world coordinates Draw starfield background Draw the planet sphere with procedural terrain Get terrain color based on lat/lon using procedural noise Draw atmospheric glow around planet Draw indicator showing explored region on globe Draw info overlay with world stats Simple 2D noise function Seeded random for consistent star placement Linear interpolate between two colors <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a7f051bfb5fff1a05b8798314a56f72969d4b5b15eec3cfd8a395cade1d02fd8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/RenderBundleManager.md::0000","path":"engine/reference/render/RenderBundleManager.md","title":"render/RenderBundleManager.js","description":"","kind":"reference","source":"engine/render/RenderBundleManager.js","updated":"","headings":["render/RenderBundleManager.js","Classes","class RenderBundleManager","class ParticleRenderBundleCache","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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 Method Signature Summary Create a render bundle for repeated draw calls Execute a render bundle in a render pass Create particle rendering bundle Invalidate a bundle (force recreation) Clear all bundles Particle specific render bundle optimization Pre records particle billboard rendering for massive performance gains Method Signature Summary Get or create particle render bundle Bundles are keyed by instance count brackets (powers of 2) Execute particle bundle with dynamic instance count <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all","contentHash":"e158cbb12ac61058a9f2655147518baeb5fdf79151e191c603292ae089808056"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/RenderBundleManager.md::0001","path":"engine/reference/render/RenderBundleManager.md","title":"render/RenderBundleManager.js","description":"","kind":"reference","source":"engine/render/RenderBundleManager.js","updated":"","headings":["render/RenderBundleManager.js","Classes","class RenderBundleManager","class ParticleRenderBundleCache","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"5221ccde0195ad4fdb5102856bc628a9a5c4d4c753509863bad61231520fd691"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/RenderingInit.md::0000","path":"engine/reference/render/RenderingInit.md","title":"render/RenderingInit.js","description":"","kind":"reference","source":"engine/render/RenderingInit.js","updated":"","headings":["render/RenderingInit.js","Functions","async initParticleSystem(options)","async initSmokeRenderer(options)","async initSimulationRendering(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Initialize particle simulation and renderer. Parameters: (Object) — Initialization options (Object) — GPU device wrapper (Object) — Raw WebGPU device (string) — Surface format (Object) — Particle state to populate (number) — Max particle count (default: 20000) (number) — Compute workgroup size (default: 256) (string) — Renderer type ('point' 'billboard') (string) — Blend mode (Function) — Optional logger Initialize volumetric smoke renderer (fluid sim is lazy). Parameters: (Object) — Initialization options (Object) — Raw WebGPU device (string) — Surface format (number) — Room size for volume bounds (Object) — Smoke state to populate (Function) — Optional logger Initialize particle system and optionally smoke renderer. Parameters: (Object) — Combined options <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives.","contentHash":"04064ab20faa338bde3fbba4c227586f73a7ff5e4f439cab05c6eb7b09111b9d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/RenderingInit.md::0001","path":"engine/reference/render/RenderingInit.md","title":"render/RenderingInit.js","description":"","kind":"reference","source":"engine/render/RenderingInit.js","updated":"","headings":["render/RenderingInit.js","Functions","async initParticleSystem(options)","async initSmokeRenderer(options)","async initSimulationRendering(options)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a07d3ce7fc2f697fe3cc74a2ddd15e254b541cc6c254b7044fff621e1dc9dea7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/SceneRenderer.md::0000","path":"engine/reference/render/SceneRenderer.md","title":"render/SceneRenderer.js","description":"","kind":"reference","source":"engine/render/SceneRenderer.js","updated":"","headings":["render/SceneRenderer.js","Functions","encodeEntitiesClusterCulling(options)","renderEntities(options)","renderRoom(options)","renderLightCube(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Render all spawned ECS entities. Parameters: (Object) — Render options (Object) — WebGPU render pass (Array) — Spawned entities array (Object) — Mesh lookup { cube, sphere, cylinder, plane } (Map) — Entity uniform buffers (Map) — Entity bind groups (Function) — Function to get entity transform (Function) — Function to update uniforms (number) — Current light count (number null) — Selected entity for outline Render room geometry (floor, walls, ceiling). Parameters: (Object) — Render options (Object) — WebGPU render pass (Object) — Room meshes and bind groups (Function) — Function to update uniforms (number) — Current light count Render a light cube at a position. Parameters: (Object) — Render options <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an","contentHash":"f5086d07fec071904b361bec8c067772c32d494178ad9b141c9a1a3253a49b5d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/SceneRenderer.md::0001","path":"engine/reference/render/SceneRenderer.md","title":"render/SceneRenderer.js","description":"","kind":"reference","source":"engine/render/SceneRenderer.js","updated":"","headings":["render/SceneRenderer.js","Functions","encodeEntitiesClusterCulling(options)","renderEntities(options)","renderRoom(options)","renderLightCube(options)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"542ef39c0ab37ed38d9a3fd0e55775a79cbd8496ce84d5a7d57b9e93a8c0412d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/VolumetricRaymarch.md::0000","path":"engine/reference/render/VolumetricRaymarch.md","title":"render/VolumetricRaymarch.js","description":"","kind":"reference","source":"engine/render/VolumetricRaymarch.js","updated":"","headings":["render/VolumetricRaymarch.js","Classes","class VolumetricRaymarcher","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize GPU resources Update density texture from CPU data Copy density from GPU buffer (e.g., MPM grid) Update uniforms Render to output texture Set render mode Set color ramp Constants — Default raymarch parameters — Render modes <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"211f011421ba3b3d5b33de1aa5f15714e895fe198269482dd971ff1ec84e92df"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/World3DPreviewRenderer.md::0000","path":"engine/reference/render/World3DPreviewRenderer.md","title":"render/World3DPreviewRenderer.js","description":"","kind":"reference","source":"engine/render/World3DPreviewRenderer.js","updated":"","headings":["render/World3DPreviewRenderer.js","Classes","class World3DPreviewRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize WebGPU for the preview Generate heightmap from chunk data Add sci fi orbital ring around planet Add glowing location marker on planet surface Add glowing ring around location marker Start rendering animation Stop rendering Convert float32 to float16 (half precision) Cleanup <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"8d441ac33756557407b25acca5dbd9cc403591d08c7c3355f989581968098ec3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/WorldParticleRenderer.md::0000","path":"engine/reference/render/WorldParticleRenderer.md","title":"render/WorldParticleRenderer.js","description":"","kind":"reference","source":"engine/render/WorldParticleRenderer.js","updated":"","headings":["render/WorldParticleRenderer.js","Classes","class WorldParticleRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Update frame uniforms Upload particle data Render particles Load configuration from engine.cfg section <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"7c014ef2d9e8e3035c18845984da4ea00d0b99343d9b5f459d833ab443ad5f5b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/AerialPerspective.md::0000","path":"engine/reference/render/atmosphere/AerialPerspective.md","title":"render/atmosphere/AerialPerspective.js","description":"","kind":"reference","source":"engine/render/atmosphere/AerialPerspective.js","updated":"","headings":["render/atmosphere/AerialPerspective.js","Classes","class AerialPerspective","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes AerialPerspective Distance based color shifting Method Signature Summary Initialize GPU resources Update uniform buffer Configure for a specific view distance Set horizon color Set effect strengths Apply aerial perspective to a color (CPU side) Get effect factor for a distance Apply a preset Get bind group entry Load configuration from engine.cfg section Get WGSL shader code Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6934e5c4cb7fd1e19ddb4c19bc22bad78e81ce12751b715ef07c09d6074c3a14"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/AtmosphereUtils.md::0000","path":"engine/reference/render/atmosphere/AtmosphereUtils.md","title":"render/atmosphere/AtmosphereUtils.js","description":"","kind":"reference","source":"engine/render/atmosphere/AtmosphereUtils.js","updated":"","headings":["render/atmosphere/AtmosphereUtils.js","Functions","getMieAsymmetryFromVisibility(visibility)","getAdaptiveStepMultiplier(opticalDepth)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Calculate recommended Mie asymmetry based on visibility Parameters: (number) — Visibility in meters Returns: Mie asymmetry parameter g (0.76 0.99) Get step size recommendation based on optical depth Parameters: (number) — Local optical depth Returns: Recommended step multiplier (0.1 to 1.0) Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a621ec370a5379247f257e9d71a29956ec4046547326762f5dc46460d1c47fb7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/AtmosphericScattering.md::0000","path":"engine/reference/render/atmosphere/AtmosphericScattering.md","title":"render/atmosphere/AtmosphericScattering.js","description":"","kind":"reference","source":"engine/render/atmosphere/AtmosphericScattering.js","updated":"","headings":["render/atmosphere/AtmosphericScattering.js","Classes","class AtmosphericScattering","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes AtmosphericScattering Physical atmosphere simulation Method Signature Summary Initialize GPU resources Update uniform buffer Set planet radius Set meteorological visibility Set sun direction (normalized) Set camera height above surface Calculate geometric horizon distance Calculate effective horizon with refraction Calculate Rayleigh scattering limit ( 300km on Earth) Calculate Koschmieder visibility Apply atmospheric scattering to a color (CPU side) Get visibility info for debugging Set weather conditions Get bind group entry Load configuration from engine.cfg section Get WGSL shader code Precompute transmittance LUT texture Maps (altitude, view zenith angle) transmittance RGB Reduces per pixel scattering calculation to a single texture fetch Precompute inscattering LUT texture Maps (altitude, sun zenith, view sun angle) inscattered light RGB 3D texture for full angular coverage Compute optical depth and transmittance for LUT Compute inscattered light for LUT Compute ray length through atmosphere Initialize all LUTs for fast runtime sampling Get LUT bind group entries for shader Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it.","contentHash":"6fefd354211eef20f9008eeb05ed61b96de1a808b8c8e1ed2c1cea071f624e68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/AtmosphericScattering.md::0001","path":"engine/reference/render/atmosphere/AtmosphericScattering.md","title":"render/atmosphere/AtmosphericScattering.js","description":"","kind":"reference","source":"engine/render/atmosphere/AtmosphericScattering.js","updated":"","headings":["render/atmosphere/AtmosphericScattering.js","Classes","class AtmosphericScattering","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"963c22a5887cb3112c91198dffa1e47f21f8ed7e166502a2ea93a56ccbaddcd4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/AuroraPass.md::0000","path":"engine/reference/render/atmosphere/AuroraPass.md","title":"render/atmosphere/AuroraPass.js","description":"","kind":"reference","source":"engine/render/atmosphere/AuroraPass.js","updated":"","headings":["render/atmosphere/AuroraPass.js","Classes","class AuroraPass","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes AuroraPass Volumetric aurora rendering pass Method Signature Summary Initialize GPU resources Update uniform buffer Update per frame (call before rendering) Set sun direction (for night side visibility) Set aurora intensity Set color shift Get uniform buffer for binding Get WGSL shader code Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"694c1bfcd45131962457e86f946a7b37c835ce21bcd89ecda8c3acd041a2d516"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/BlueNoise.md::0000","path":"engine/reference/render/atmosphere/BlueNoise.md","title":"render/atmosphere/BlueNoise.js","description":"","kind":"reference","source":"engine/render/atmosphere/BlueNoise.js","updated":"","headings":["render/atmosphere/BlueNoise.js","Classes","class BlueNoiseTexture","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes BlueNoiseTexture GPU blue noise texture manager Method Signature Summary Initialize blue noise texture Advance frame counter (call once per frame) Get texture view for binding Get sampler for binding Get current frame index Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c896cc0931b6bbbb0f68aed6f7dac24d3dba8f461b54a1905f8838e3e43aaca6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/CelestialMoon.md::0000","path":"engine/reference/render/atmosphere/CelestialMoon.md","title":"render/atmosphere/CelestialMoon.js","description":"","kind":"reference","source":"engine/render/atmosphere/CelestialMoon.js","updated":"","headings":["render/atmosphere/CelestialMoon.js","Classes","class Moon","class MoonSystem","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Moon class for orbital mechanics and state management Method Signature Summary Update moon position and phase based on time Get uniform data for GPU Check if moon is above horizon MoonSystem Manages multiple moons Method Signature Summary Add a moon to the system Remove a moon from the system Update all moons Get all visible moons Get uniform data for all moons (up to maxMoons) Load preset moons Constants — Default configurations for different moon types — Preset moon configurations for the world — WGSL shader code for moon rendering <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU","contentHash":"8d79eefc2ba8fd636771a811da0a3882c68e8ec7d952f0c639fd476c113ebd9e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/CelestialMoon.md::0001","path":"engine/reference/render/atmosphere/CelestialMoon.md","title":"render/atmosphere/CelestialMoon.js","description":"","kind":"reference","source":"engine/render/atmosphere/CelestialMoon.js","updated":"","headings":["render/atmosphere/CelestialMoon.js","Classes","class Moon","class MoonSystem","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0b87224503d51cdf4dbcce84c621580781c58849becbe60ef2cfde96bac51fe8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/CelestialStars.md::0000","path":"engine/reference/render/atmosphere/CelestialStars.md","title":"render/atmosphere/CelestialStars.js","description":"","kind":"reference","source":"engine/render/atmosphere/CelestialStars.js","updated":"","headings":["render/atmosphere/CelestialStars.js","Classes","class StarField","class StarSystem","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes StarField class for managing star rendering Method Signature Summary Add a star layer Remove a star layer Load default layers Get visibility factor based on sun position Get uniform data for GPU Update configuration StarSystem Complete star management system Method Signature Summary Initialize with default settings Add a constellation Load preset constellations Get all uniform data Constants — Star layer types for different visual effects — Star field configuration defaults — Star layer presets — Constellation definitions (named star patterns) — WGSL shader code for star rendering <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations.","contentHash":"e9cae7ecb6b4c9aa42616cd505424077a870a3fb63e464c5dd325e304ee5e571"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/CelestialStars.md::0001","path":"engine/reference/render/atmosphere/CelestialStars.md","title":"render/atmosphere/CelestialStars.js","description":"","kind":"reference","source":"engine/render/atmosphere/CelestialStars.js","updated":"","headings":["render/atmosphere/CelestialStars.js","Classes","class StarField","class StarSystem","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a3e420e0268259fc8f91b864c9bd0543cf595cefb1575df1db131039bb97fec4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/CelestialSun.md::0000","path":"engine/reference/render/atmosphere/CelestialSun.md","title":"render/atmosphere/CelestialSun.js","description":"","kind":"reference","source":"engine/render/atmosphere/CelestialSun.js","updated":"","headings":["render/atmosphere/CelestialSun.js","Classes","class Sun","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Sun class for orbital mechanics and state management Method Signature Summary Update sun position based on time Get uniform data for GPU Check if sun is above horizon Get day factor (0 = night, 1 = full day) Constants — WGSL shader code for sun rendering <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9dd6c8828b82a33e341c23f030911882577423c9ae31971de7281deca2ba6ba8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/DistanceFog.md::0000","path":"engine/reference/render/atmosphere/DistanceFog.md","title":"render/atmosphere/DistanceFog.js","description":"","kind":"reference","source":"engine/render/atmosphere/DistanceFog.js","updated":"","headings":["render/atmosphere/DistanceFog.js","Classes","class DistanceFog","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes DistanceFog Distance based fog system Method Signature Summary Initialize GPU resources Update uniform buffer Update camera position Set fog type Set fog color Set fog distances (for linear fog) Set fog density (for exponential fog) Configure based on render distance Calculate fog factor for a position (CPU side) Calculate chunk fade factor Apply fog to color (CPU side) Get bind group entry for uniform buffer Apply a preset Load configuration from engine.cfg section Get WGSL shader code Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e611f761cf1a57baeb039e64ab0fb9719d82b2f9022dfa04b47bc1658210ba74"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/HillaireLUT.md::0000","path":"engine/reference/render/atmosphere/HillaireLUT.md","title":"render/atmosphere/HillaireLUT.js","description":"","kind":"reference","source":"engine/render/atmosphere/HillaireLUT.js","updated":"","headings":["render/atmosphere/HillaireLUT.js","Classes","class HillaireLUT","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes HillaireLUT Main class for Hillaire style atmospheric LUT system Method Signature Summary Initialize GPU resources Update atmosphere parameters buffer Update camera parameters buffer Update frustum parameters buffer for aerial perspective Generate Transmittance LUT (call when atmosphere params change) Generate Multi Scattering LUT (call when atmosphere params change) Must be called AFTER transmittance LUT is generated Generate Sky View LUT (updated every frame) Must be called AFTER transmittance and multi scatter LUTs are generated Generate Aerial Perspective LUT (updated every frame) Must be called AFTER transmittance and multi scatter LUTs are generated Set planet radius Set sun direction Set camera altitude (for sky view and aerial perspective LUTs) Set frustum parameters for aerial perspective Update LUTs if needed (call once per frame) Sky View and Aerial Perspective are regenerated every frame Get transmittance LUT texture view Get multi scattering LUT texture view Get sky view LUT texture view Get aerial perspective LUT texture view (3D) Get linear sampler for LUT sampling Get atmosphere params buffer Get camera params buffer Get frustum params buffer Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared","contentHash":"4be0f7fe751d627b36efb93874077bc26b57d3a063be3a43aae1db7587cd2a85"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/HillaireLUT.md::0001","path":"engine/reference/render/atmosphere/HillaireLUT.md","title":"render/atmosphere/HillaireLUT.js","description":"","kind":"reference","source":"engine/render/atmosphere/HillaireLUT.js","updated":"","headings":["render/atmosphere/HillaireLUT.js","Classes","class HillaireLUT","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"7102315ca31ca566b338016675011c843b68ef0bf1d9b913740c8c53b3bd5b16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/PlanetCurvature.md::0000","path":"engine/reference/render/atmosphere/PlanetCurvature.md","title":"render/atmosphere/PlanetCurvature.js","description":"","kind":"reference","source":"engine/render/atmosphere/PlanetCurvature.js","updated":"","headings":["render/atmosphere/PlanetCurvature.js","Classes","class PlanetCurvature","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes PlanetCurvature Planetary curvature simulation Method Signature Summary Initialize GPU resources Recalculate horizon distances Update uniform buffer Set planet radius Set camera height above surface Set refraction coefficient Calculate curvature drop at a distance (CPU side) Calculate hidden height of an object (CPU side) Check if an object is completely below horizon (hull down) Get visible fraction of an object Apply curvature displacement to a world position Get horizon information Comparison with Earth Get bind group entry Load configuration from engine.cfg sections Get WGSL shader code Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check","contentHash":"3fee873983cdd136343df2af9b55aea579a3c1d81c194a8cd31a5b81473b6200"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/PlanetCurvature.md::0001","path":"engine/reference/render/atmosphere/PlanetCurvature.md","title":"render/atmosphere/PlanetCurvature.js","description":"","kind":"reference","source":"engine/render/atmosphere/PlanetCurvature.js","updated":"","headings":["render/atmosphere/PlanetCurvature.js","Classes","class PlanetCurvature","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"07c92cf05bebccc5fa0e5446d466abc44a31a990b7c5339b3c71fcf553ddacdb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/ProceduralSky.md::0000","path":"engine/reference/render/atmosphere/ProceduralSky.md","title":"render/atmosphere/ProceduralSky.js","description":"","kind":"reference","source":"engine/render/atmosphere/ProceduralSky.js","updated":"","headings":["render/atmosphere/ProceduralSky.js","Classes","class ProceduralSky","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ProceduralSky Complete sky system Method Signature Summary Initialize the sky system Create the sky render pipeline Render the sky Update bind group to use Hillaire Sky View LUT when available Invert a 4x4 matrix (simple implementation for projection matrices) Update sky based on world time Update ambient and directional lighting based on sun/moons Get combined moonlight contribution Get the strongest moon currently above horizon Update GPU uniform buffer Set time of day Set time scale Set camera altitude (affects atmosphere rendering) Set planet parameters Connect to Hillaire LUT atmosphere system When connected, sky rendering uses production grade LUTs instead of built in scattering Get Hillaire LUT views for external rendering Get current time info Get sun direction for lighting Get primary light direction (sun during day, moon at night) Get bind group entry Load configuration from engine.cfg sections Get WGSL shader code Destroy resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device","contentHash":"c5ce730e03039057cec84f01904f5ae8c9712282aedc3198ea507ab922c3a929"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/ProceduralSky.md::0001","path":"engine/reference/render/atmosphere/ProceduralSky.md","title":"render/atmosphere/ProceduralSky.js","description":"","kind":"reference","source":"engine/render/atmosphere/ProceduralSky.js","updated":"","headings":["render/atmosphere/ProceduralSky.js","Classes","class ProceduralSky","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0bacce3c684a704dd6ea16baf26f1c43d7e48645791157e6889022bab4a8b5c2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/Space.md::0000","path":"engine/reference/render/atmosphere/Space.md","title":"render/atmosphere/Space.js","description":"","kind":"reference","source":"engine/render/atmosphere/Space.js","updated":"","headings":["render/atmosphere/Space.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/SpectralWeather.md::0000","path":"engine/reference/render/atmosphere/SpectralWeather.md","title":"render/atmosphere/SpectralWeather.js","description":"","kind":"reference","source":"engine/render/atmosphere/SpectralWeather.js","updated":"","headings":["render/atmosphere/SpectralWeather.js","Classes","class SpectralWeather","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes SpectralWeather T21 spectral weather simulation Method Signature Summary Initialize GPU resources Initialize coefficient buffer with realistic patterns Get coefficient buffer index Update uniform buffer Evolve weather coefficients (CPU fallback) Rossby wave frequency Sample weather at a point (CPU) Real spherical harmonic Y l^m(θ, φ) Associated Legendre polynomial P l^m(x) Get wind vector for cloud advection Get temperature for cloud formation Get humidity for precipitation Get coefficient buffer for GPU access Get uniform buffer Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU","contentHash":"548d2633f95d5ca6163f902f450fd9e2722af7b628a015e04dbce7d61cf6687a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/SpectralWeather.md::0001","path":"engine/reference/render/atmosphere/SpectralWeather.md","title":"render/atmosphere/SpectralWeather.js","description":"","kind":"reference","source":"engine/render/atmosphere/SpectralWeather.js","updated":"","headings":["render/atmosphere/SpectralWeather.js","Classes","class SpectralWeather","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f40d84bbabdbbfa6c3a967a6f48c7e8cab2a95ff7cf732007791771eb21313be"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/TemporalAccumulation.md::0000","path":"engine/reference/render/atmosphere/TemporalAccumulation.md","title":"render/atmosphere/TemporalAccumulation.js","description":"","kind":"reference","source":"engine/render/atmosphere/TemporalAccumulation.js","updated":"","headings":["render/atmosphere/TemporalAccumulation.js","Classes","class TemporalAccumulation","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes TemporalAccumulation TAA pass for atmosphere Method Signature Summary Initialize TAA resources Update uniforms Get Halton jitter offset for current frame Advance to next frame (swap buffers) Get jitter offset for applying to projection matrix Get history texture view Get current texture view Get uniform buffer Resize textures Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f095d4052911fa5ed861614cc6138908a7430bcaaf217a3186e316f3d61a1541"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/index.md::0000","path":"engine/reference/render/atmosphere/index.md","title":"render/atmosphere/index.js","description":"","kind":"reference","source":"engine/render/atmosphere/index.js","updated":"","headings":["render/atmosphere/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d917cbb6d371b7b6bfed2685a79e4c25cb0b31428f15157658b50f96300a2a38"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/atmosphere/sky/index.md::0000","path":"engine/reference/render/atmosphere/sky/index.md","title":"render/atmosphere/sky/index.js","description":"","kind":"reference","source":"engine/render/atmosphere/sky/index.js","updated":"","headings":["render/atmosphere/sky/index.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"05847c248dd3df1db16f8cb6d89550b9093198a470f2ca77acedbe0ab24af97d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/debug/GridRenderer.md::0000","path":"engine/reference/render/debug/GridRenderer.md","title":"render/debug/GridRenderer.js","description":"","kind":"reference","source":"engine/render/debug/GridRenderer.js","updated":"","headings":["render/debug/GridRenderer.js","Classes","class GridRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GridRenderer Infinite grid for 3D viewport Now powered by vGPU driver Classes Method Signature Summary Update lighting parameters from LightManager <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"17f847b2666ad244c45733f737185614786a56c355907efd3790171e6701cb1d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/debug/PhysicsLineRenderer.md::0000","path":"engine/reference/render/debug/PhysicsLineRenderer.md","title":"render/debug/PhysicsLineRenderer.js","description":"","kind":"reference","source":"engine/render/debug/PhysicsLineRenderer.js","updated":"","headings":["render/debug/PhysicsLineRenderer.js","Classes","class PhysicsLineRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Update line data from physics simulations Render physics lines <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c7b9cdd4b7f01a10c449c8974b7f3dc0b0f6de1b9d569e74f3bfce9a3bf512cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/debug/WireframeBoxRenderer.md::0000","path":"engine/reference/render/debug/WireframeBoxRenderer.md","title":"render/debug/WireframeBoxRenderer.js","description":"","kind":"reference","source":"engine/render/debug/WireframeBoxRenderer.js","updated":"","headings":["render/debug/WireframeBoxRenderer.js","Classes","class WireframeBoxRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WireframeBoxRenderer Renders wireframe boxes for debug visualization Used to visualize voxel colliders in the editor Now powered by vGPU driver Classes Method Signature Summary Clear boxes for this frame Add a wireframe box to render Render all accumulated boxes <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"21b13a966859b4c94ac44322a735377c8c1d2f6839bb739a1facfdbf88385035"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/debug/index.md::0000","path":"engine/reference/render/debug/index.md","title":"render/debug/index.js","description":"","kind":"reference","source":"engine/render/debug/index.js","updated":"","headings":["render/debug/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Debug Renderers GPU debug visualization tools These renderers are useful for both editor and runtime debug visualization. Re exports , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"401e6979f38d95946ba1fdee920f6ce6643a7e1cb4da0cca7c284e7ccf59dddc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/CapsuleGeometry.md::0000","path":"engine/reference/render/geometry/CapsuleGeometry.md","title":"render/geometry/CapsuleGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/CapsuleGeometry.js","updated":"","headings":["render/geometry/CapsuleGeometry.js","Functions","createCapsuleGeometry(radius = 0.3, height = 1.0, radialSegments = 16, hemisphereSegments = 8)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/ConeGeometry.md::0000","path":"engine/reference/render/geometry/ConeGeometry.md","title":"render/geometry/ConeGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/ConeGeometry.js","updated":"","headings":["render/geometry/ConeGeometry.js","Functions","createConeGeometry(radius = 0.5, height = 1.0, segments = 16)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/CubeGeometry.md::0000","path":"engine/reference/render/geometry/CubeGeometry.md","title":"render/geometry/CubeGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/CubeGeometry.js","updated":"","headings":["render/geometry/CubeGeometry.js","Functions","createCubeGeometry(size = 1)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/CylinderGeometry.md::0000","path":"engine/reference/render/geometry/CylinderGeometry.md","title":"render/geometry/CylinderGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/CylinderGeometry.js","updated":"","headings":["render/geometry/CylinderGeometry.js","Functions","createHollowCylinderGeometry(outerRadius = 0.5, innerRadius = 0.4, height = 1.0, radialSegments = 24,)","createCylinderGeometry(radius = 0.5, height = 1.0, radialSegments = 16, heightSegments = 1,)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/GroundGeometry.md::0000","path":"engine/reference/render/geometry/GroundGeometry.md","title":"render/geometry/GroundGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/GroundGeometry.js","updated":"","headings":["render/geometry/GroundGeometry.js","Functions","createGroundGeometry(size = 30)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/PlaneGeometry.md::0000","path":"engine/reference/render/geometry/PlaneGeometry.md","title":"render/geometry/PlaneGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/PlaneGeometry.js","updated":"","headings":["render/geometry/PlaneGeometry.js","Functions","createPlaneGeometry(size = 10, y = 0)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/PrimitiveGeometry.md::0000","path":"engine/reference/render/geometry/PrimitiveGeometry.md","title":"render/geometry/PrimitiveGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/PrimitiveGeometry.js","updated":"","headings":["render/geometry/PrimitiveGeometry.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Barrel export file for primitive geometry generators Re exports all geometry modules for convenient importing Re exports , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"454093f144e2e736e681908a6155206f24055586e7b2e8e9e3dcf3be6dfe222c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/SkyboxGeometry.md::0000","path":"engine/reference/render/geometry/SkyboxGeometry.md","title":"render/geometry/SkyboxGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/SkyboxGeometry.js","updated":"","headings":["render/geometry/SkyboxGeometry.js","Functions","createSkyboxGeometry(size = 50)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/SphereGeometry.md::0000","path":"engine/reference/render/geometry/SphereGeometry.md","title":"render/geometry/SphereGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/SphereGeometry.js","updated":"","headings":["render/geometry/SphereGeometry.js","Functions","createSphereGeometry(radius = 0.5, widthSegments = 16, heightSegments = 12)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/StaticMeshBuilder.md::0000","path":"engine/reference/render/geometry/StaticMeshBuilder.md","title":"render/geometry/StaticMeshBuilder.js","description":"","kind":"reference","source":"engine/render/geometry/StaticMeshBuilder.js","updated":"","headings":["render/geometry/StaticMeshBuilder.js","Functions","staticMeshVertexLayoutForGeometry(geometry)","staticMeshVertexDataFromGeometry(geometry)","buildStaticMeshFromGeometry(device, geometry, label, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/geometry/TorusGeometry.md::0000","path":"engine/reference/render/geometry/TorusGeometry.md","title":"render/geometry/TorusGeometry.js","description":"","kind":"reference","source":"engine/render/geometry/TorusGeometry.js","updated":"","headings":["render/geometry/TorusGeometry.js","Functions","createTorusGeometry(majorRadius = 0.4, minorRadius = 0.15, majorSegments = 24, minorSegments = 12)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/gpu/IndirectDrawSystem.md::0000","path":"engine/reference/render/gpu/IndirectDrawSystem.md","title":"render/gpu/IndirectDrawSystem.js","description":"","kind":"reference","source":"engine/render/gpu/IndirectDrawSystem.js","updated":"","headings":["render/gpu/IndirectDrawSystem.js","Classes","class IndirectDrawSystem","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Upload LOD table data Upload instance data Update culling parameters Create bind group for culling pass Execute GPU culling pass Get buffers for indirect draw call <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"301b017df1afee04890bfddd8f29124dc95ea9a7f8f57bb1b83d182cd0301d19"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/index.md::0000","path":"engine/reference/render/index.md","title":"render/index.js","description":"","kind":"reference","source":"engine/render/index.js","updated":"","headings":["render/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Engine Render Modules Exports all render related utilities from subfolders Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ba88a05b97b15fa121b8390e0416f1bed8910e0fe94e0bcc559a5c2460b14bc1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/lighting/RealtimeGI.md::0000","path":"engine/reference/render/lighting/RealtimeGI.md","title":"render/lighting/RealtimeGI.js","description":"","kind":"reference","source":"engine/render/lighting/RealtimeGI.js","updated":"","headings":["render/lighting/RealtimeGI.js","Classes","class RealtimeGI","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Update params buffer Create bind groups Update probe irradiance (once per frame or less) Get shader code for sampling GI in materials Get probe irradiance buffer for shader binding Get probe grid config buffer for shader binding <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"81c6464ba17373d2a89602bf56ef85462d5f7fe28add8017e54a2da9897a2661"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/AnimatedMaterialSystem.md::0000","path":"engine/reference/render/materials/AnimatedMaterialSystem.md","title":"render/materials/AnimatedMaterialSystem.js","description":"","kind":"reference","source":"engine/render/materials/AnimatedMaterialSystem.js","updated":"","headings":["render/materials/AnimatedMaterialSystem.js","Functions","async initAnimatedMaterials(materialLibrary)","tickAnimatedMaterials()","getAnimatedPBR(materialId)","isAnimatedMaterial(materialId)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Initialize the animated material system. Scans all materials for animated node graphs and caches them. Parameters: (Object) — MaterialLibrary instance Evaluate all animated material graphs for this frame. Call once per frame before rendering entities. Get the current frame animated PBR values for a material. Returns null if the material is not animated. Parameters: (string) — No description in source JSDoc. Returns: { baseColor, metallic, roughness, emissive, ... } Check if a material is registered as animated. Parameters: (string) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery:","contentHash":"e8515932ef31e65265ec03f549fd8e99f009082adf8fe996b03f40d2fbd53dd8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/AnimatedMaterialSystem.md::0001","path":"engine/reference/render/materials/AnimatedMaterialSystem.md","title":"render/materials/AnimatedMaterialSystem.js","description":"","kind":"reference","source":"engine/render/materials/AnimatedMaterialSystem.js","updated":"","headings":["render/materials/AnimatedMaterialSystem.js","Functions","async initAnimatedMaterials(materialLibrary)","tickAnimatedMaterials()","getAnimatedPBR(materialId)","isAnimatedMaterial(materialId)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d2da68394522e2f287ff7208e304b22ad6ba11829056559cea0e8de55f4a2d94"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/BindGroupManager.md::0000","path":"engine/reference/render/materials/BindGroupManager.md","title":"render/materials/BindGroupManager.js","description":"","kind":"reference","source":"engine/render/materials/BindGroupManager.js","updated":"","headings":["render/materials/BindGroupManager.js","Classes","class BindGroupLayoutBuilder","class FrameBindGroup","class MaterialBindGroup","class ObjectBindGroup","class BindGroupCache","Functions","createVoxelBindGroupLayouts(device)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes BindGroupLayoutBuilder Fluent API for building bind group layouts Method Signature Summary Add a uniform buffer binding Add a storage buffer binding Add a texture binding Add a depth texture binding Add a 3D texture binding Add a sampler binding Add a comparison sampler (for shadow mapping) Add a storage texture binding Build the bind group layout Get entries (for inspection/debugging) FrameBindGroup Manages Group 0 (per frame global data) Method Signature Summary Set a uniform field value Set a matrix uniform Set an additional resource (texture view, sampler) Upload dirty uniforms to GPU Get or create the bind group Bind to render pass Destroy resources MaterialBindGroup Manages Group 1 (per material data) Method Signature Summary Set a uniform field value Set a texture Set a sampler Upload dirty uniforms to GPU Get or create the bind group Bind to render pass Destroy resources ObjectBindGroup Manages Group 2 (per object data like transforms) Method Signature Summary Set a uniform field value Set a matrix uniform Upload and bind in one call (optimized for per draw updates) Destroy resources BindGroupCache Caches bind groups to avoid recreation Method Signature Summary Get or create a bind group Invalidate a cached bind group Clear entire cache Get cache statistics Functions Create the standard voxel renderer bind group layouts Parameters: (GPUDevice) — No description in source JSDoc. Returns: { frameLayout, materialLayout, objectLayout, pipelineLayout } Constants — Bind group frequency tiers <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse","contentHash":"a3aa61f4b18e29ebdc1c85a2e83e8de36e94767c23976945004a4e4167a193d9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/BindGroupManager.md::0001","path":"engine/reference/render/materials/BindGroupManager.md","title":"render/materials/BindGroupManager.js","description":"","kind":"reference","source":"engine/render/materials/BindGroupManager.js","updated":"","headings":["render/materials/BindGroupManager.js","Classes","class BindGroupLayoutBuilder","class FrameBindGroup","class MaterialBindGroup","class ObjectBindGroup","class BindGroupCache","Functions","createVoxelBindGroupLayouts(device)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"objectLayout, pipelineLayout } Constants — Bind group frequency tiers <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6b994922522b83e15d706db38516ceedadc96cde7286379073dc9a84be0441db"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/MaterialLibrary.md::0000","path":"engine/reference/render/materials/MaterialLibrary.md","title":"render/materials/MaterialLibrary.js","description":"","kind":"reference","source":"engine/render/materials/MaterialLibrary.js","updated":"","headings":["render/materials/MaterialLibrary.js","Functions","readMaterialLibraryRecord(storage = globalThis.localStorage)","writeMaterialLibraryRecord(materials, storage = globalThis.localStorage)","normalizeMaterial(input)","createMaterialLibrary(storage = globalThis.localStorage)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Normalize a material descriptor, filling missing fields with defaults. Parameters: (Object) — No description in source JSDoc. Create a MaterialLibrary instance. Returns: MaterialLibrary API Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"12a913c146032c3ee0be5116f3eaed02853ff1d168e90133f0416b97574943f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/MaterialSystem.md::0000","path":"engine/reference/render/materials/MaterialSystem.md","title":"render/materials/MaterialSystem.js","description":"","kind":"reference","source":"engine/render/materials/MaterialSystem.js","updated":"","headings":["render/materials/MaterialSystem.js","Functions","normalizeMaterialDescriptor(input)","createMaterialSystem(device, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/PipelineCache.md::0000","path":"engine/reference/render/materials/PipelineCache.md","title":"render/materials/PipelineCache.js","description":"","kind":"reference","source":"engine/render/materials/PipelineCache.js","updated":"","headings":["render/materials/PipelineCache.js","Classes","class RenderStateDescriptor","class PipelineDescriptor","class ComputePipelineDescriptor","class PipelineCache","class ComputePipelineCache","class ShaderModuleCache","class MaterialPipelineManager","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes RenderStateDescriptor Describes render pipeline state Method Signature Summary Set primitive topology Set cull mode Set depth test configuration Enable alpha blending Disable blending Set color format Set multisample count Generate cache key string Create a copy of this descriptor PipelineDescriptor Complete pipeline configuration Method Signature Summary Set entry points Add vertex buffer layout Set override constants Set render state Set label for debugging Generate cache key Build WebGPU render pipeline descriptor Method Signature Summary PipelineCache Caches compiled pipelines Method Signature Summary Get or create a pipeline synchronously Get or create a pipeline asynchronously Check if a pipeline is cached Check if a pipeline is being compiled Invalidate a specific pipeline Invalidate all pipelines using a shader module Clear entire cache Get cache statistics Precompile a set of pipeline variants Method Signature Summary ShaderModuleCache Caches compiled shader modules Method Signature Summary Get or create a shader module Invalidate a cached module Clear entire cache Get cache size MaterialPipelineManager High level material to pipeline management Method Signature Summary Register a shader for a material type Get pipeline for a material Get cache statistics <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned","contentHash":"e5319d69b2cd849889669aa5efd4bcefc50339420cb9188193ca2fbb3946f91b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/PipelineCache.md::0001","path":"engine/reference/render/materials/PipelineCache.md","title":"render/materials/PipelineCache.js","description":"","kind":"reference","source":"engine/render/materials/PipelineCache.js","updated":"","headings":["render/materials/PipelineCache.js","Classes","class RenderStateDescriptor","class PipelineDescriptor","class ComputePipelineDescriptor","class PipelineCache","class ComputePipelineCache","class ShaderModuleCache","class MaterialPipelineManager","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Get pipeline for a material Get cache statistics <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"36e2470ca61a07fd75d7eea186c6bb95163de7c6bd696e0585d13482ef77ef8d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/ShaderComposer.md::0000","path":"engine/reference/render/materials/ShaderComposer.md","title":"render/materials/ShaderComposer.js","description":"","kind":"reference","source":"engine/render/materials/ShaderComposer.js","updated":"","headings":["render/materials/ShaderComposer.js","Classes","class ShaderChunkRegistry","class PipelineOverrides","class ShaderVariant","class UberShaderBuilder","Functions","createDefaultRegistry()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ShaderChunkRegistry Central registry for shader code chunks Method Signature Summary Register a shader chunk Register multiple chunks at once Get a chunk by name Check if chunk exists Compose shader from multiple chunks PipelineOverrides Manage WGSL override constants WGSL override constants allow compile time specialization: Method Signature Summary Set an override value Set multiple overrides at once Get override value Check if override is set Clear all overrides Convert to WebGPU constants format For use in pipeline compilation options Generate cache key for pipeline caching Clone overrides ShaderVariant A specific configuration of a shader Method Signature Summary Get compilation options for this variant Generate unique key for this variant UberShaderBuilder Build ubershaders with feature toggles Method Signature Summary Add a base chunk (always included) Define a feature with its override constant and chunks Functions Create a default shader chunk registry with standard chunks Constants — Standard WGSL chunks for voxel rendering <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while","contentHash":"5ee0950f3fff576f0405dce895342f337cabeb48b3991fcd184322f6d512f217"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/ShaderComposer.md::0001","path":"engine/reference/render/materials/ShaderComposer.md","title":"render/materials/ShaderComposer.js","description":"","kind":"reference","source":"engine/render/materials/ShaderComposer.js","updated":"","headings":["render/materials/ShaderComposer.js","Classes","class ShaderChunkRegistry","class PipelineOverrides","class ShaderVariant","class UberShaderBuilder","Functions","createDefaultRegistry()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"501cfd8e71ff797306b043b64e29e268d5bb9faffb64e18501160fb7589c5a5a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/Std140Layout.md::0000","path":"engine/reference/render/materials/Std140Layout.md","title":"render/materials/Std140Layout.js","description":"","kind":"reference","source":"engine/render/materials/Std140Layout.js","updated":"","headings":["render/materials/Std140Layout.js","Classes","class Std140StructBuilder","class Std140StructLayout","Functions","alignOffset(currentOffset, alignment)","createFrameUniformsLayout()","createChunkUniformsLayout()","createPBRMaterialLayout()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Std140StructBuilder Build CPU side structs that match GPU layout exactly Method Signature Summary Add a field to the struct Add explicit padding (useful for matching existing GPU structs) Finalize struct ensures size is multiple of max alignment Std140StructLayout Immutable layout definition with write methods Method Signature Summary Get field info by name Create a typed array buffer for this struct Create a Float32Array view (for uniform writes) Write a value to the buffer at the field's offset Write a 4x4 matrix to the buffer Validate layout against expected offsets (for debugging) Debug: Print layout information Functions Calculate aligned offset for a field Parameters: (number) — Current byte offset (number) — Required alignment Returns: Aligned offset Create a FrameUniforms layout matching the VoxelRenderer Create a ChunkUniforms layout Create a MaterialUniforms layout for PBR materials Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements:","contentHash":"785375bef8ab9f0d7588b084f2dc3fa14fbb941761eaefb728724cd17cf881a3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/Std140Layout.md::0001","path":"engine/reference/render/materials/Std140Layout.md","title":"render/materials/Std140Layout.js","description":"","kind":"reference","source":"engine/render/materials/Std140Layout.js","updated":"","headings":["render/materials/Std140Layout.js","Classes","class Std140StructBuilder","class Std140StructLayout","Functions","alignOffset(currentOffset, alignment)","createFrameUniformsLayout()","createChunkUniformsLayout()","createPBRMaterialLayout()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"28b8f33f970391e320f36441ec627fbeb65c03e9e5c453fdbc0993c13e9590b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/TextureManager.md::0000","path":"engine/reference/render/materials/TextureManager.md","title":"render/materials/TextureManager.js","description":"","kind":"reference","source":"engine/render/materials/TextureManager.js","updated":"","headings":["render/materials/TextureManager.js","Functions","createTextureManager(device, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a TextureManager instance. Parameters: (GPUDevice) — No description in source JSDoc. Returns: TextureManager API <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6ee3955a6f2d0d72e101a46999c587ceaed0bf90ed6020761130dee99bef505f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/VoxelMaterial.md::0000","path":"engine/reference/render/materials/VoxelMaterial.md","title":"render/materials/VoxelMaterial.js","description":"","kind":"reference","source":"engine/render/materials/VoxelMaterial.js","updated":"","headings":["render/materials/VoxelMaterial.js","Classes","class VoxelMaterial","Functions","createVoxelFrameLayout()","createVoxelMaterialLayout()","createVoxelChunkLayout()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes VoxelMaterial Complete material implementation for voxel rendering Method Signature Summary Create bind group layouts Create a frame bind group Create a material bind group with default values Create a chunk bind group Get or create pipeline with specific overrides Get pipeline for transparent rendering Get pipeline statistics Destroy all resources Functions Create the Frame uniforms layout (Group 0) Create the Material uniforms layout (Group 1) Create the Chunk uniforms layout (Group 2) Constants — Standard voxel vertex buffer layout <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports","contentHash":"e2b4248749730a246f82208e17ec09a217e77c10c48973675f15436f79650289"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/VoxelMaterial.md::0001","path":"engine/reference/render/materials/VoxelMaterial.md","title":"render/materials/VoxelMaterial.js","description":"","kind":"reference","source":"engine/render/materials/VoxelMaterial.js","updated":"","headings":["render/materials/VoxelMaterial.js","Classes","class VoxelMaterial","Functions","createVoxelFrameLayout()","createVoxelMaterialLayout()","createVoxelChunkLayout()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2872ab854121e83497ef6ac82b37de96b394fee8b4353a5bc72092558da4828b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/VoxelMaterialIntegration.md::0000","path":"engine/reference/render/materials/VoxelMaterialIntegration.md","title":"render/materials/VoxelMaterialIntegration.js","description":"","kind":"reference","source":"engine/render/materials/VoxelMaterialIntegration.js","updated":"","headings":["render/materials/VoxelMaterialIntegration.js","Classes","class VoxelMaterialManager","Functions","createVoxelFrameUniformsLayout()","createVoxelChunkUniformsLayout()","createDefaultVoxelOverrides()","createLowQualityOverrides()","integrateWithVoxelRenderer(renderer, device)","createValidatedFrameUniformsBuffer(device)","createValidatedChunkUniformsBuffer(device)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes VoxelMaterialManager Manages voxel materials with the new system Method Signature Summary Register the main voxel shader Register the shadow shader Set quality preset Toggle a specific feature Get current overrides as constants for pipeline creation Get or create pipeline with current overrides Get pipeline for shadow pass Validate uniform buffer against layout Get statistics Clear all caches Functions Create validated Frame uniforms layout matching VoxelRenderer shader Create validated Chunk uniforms layout Create default voxel pipeline overrides Create low quality overrides for performance Integrate material system with existing VoxelRenderer Parameters: (VoxelRenderer) — No description in source JSDoc. (GPUDevice) — No description in source JSDoc. Create frame uniforms buffer with validated layout Parameters: (GPUDevice) — No description in source JSDoc. Returns: } Create chunk uniforms buffer with validated layout Parameters: (GPUDevice) — No description in source JSDoc. Returns: } Constants — Voxel shader features that can be toggled via overrides <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional","contentHash":"41f73df613a8b3ec20c70c246f659493968aeacbfe99835cff4a209c54655483"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/VoxelMaterialIntegration.md::0001","path":"engine/reference/render/materials/VoxelMaterialIntegration.md","title":"render/materials/VoxelMaterialIntegration.js","description":"","kind":"reference","source":"engine/render/materials/VoxelMaterialIntegration.js","updated":"","headings":["render/materials/VoxelMaterialIntegration.js","Classes","class VoxelMaterialManager","Functions","createVoxelFrameUniformsLayout()","createVoxelChunkUniformsLayout()","createDefaultVoxelOverrides()","createLowQualityOverrides()","integrateWithVoxelRenderer(renderer, device)","createValidatedFrameUniformsBuffer(device)","createValidatedChunkUniformsBuffer(device)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a54c39e6fcb7c37fabb5c3a616bc9db3cac8ad6c9fc5fda465c9449b81dc4bbe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/materials/index.md::0000","path":"engine/reference/render/materials/index.md","title":"render/materials/index.js","description":"","kind":"reference","source":"engine/render/materials/index.js","updated":"","headings":["render/materials/index.js","Functions","createVoxelMaterialSystem(device)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a complete material system for voxel rendering Parameters: (GPUDevice) — No description in source JSDoc. Returns: Complete material system Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0da74e997cd8a2f707f0c4031ae20de56850d76b77b6090b241ebc9eb1f68fdc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/ClothMeshRenderer.md::0000","path":"engine/reference/render/mesh/ClothMeshRenderer.md","title":"render/mesh/ClothMeshRenderer.js","description":"","kind":"reference","source":"engine/render/mesh/ClothMeshRenderer.js","updated":"","headings":["render/mesh/ClothMeshRenderer.js","Classes","class ClothMeshRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Update cloth mesh from simulation data Update from all cloth simulations Render cloth mesh <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f31f7d39ef02abddcea87aae7f339db593b1dd36ae51fd233221352a16fe818d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/CustomMeshRegistry.md::0000","path":"engine/reference/render/mesh/CustomMeshRegistry.md","title":"render/mesh/CustomMeshRegistry.js","description":"","kind":"reference","source":"engine/render/mesh/CustomMeshRegistry.js","updated":"","headings":["render/mesh/CustomMeshRegistry.js","Functions","registerCustomMesh(meshKey, geo)","unregisterCustomMesh(meshKey)","getCustomMesh(meshKey)","isCustomMesh(meshType)","getRegisteredMeshTypes()","onMeshRegistered(fn)","getCustomMeshCount()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ CustomMeshRegistry.js Store imported mesh geometry for custom models ============================================================================ Functions Register a custom mesh geometry. Parameters: (string) — e.g. 'custom <uuid ' Unregister a custom mesh. Get geometry data for a custom mesh. Returns: null} Check if a meshType is a custom (imported) mesh. Get all registered custom mesh keys. Subscribe to mesh registration events. Callback: (meshKey, geo) = void Get count of registered custom meshes. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2127936e21c2bc92673765df1ff94e544461718ff30905a91a07fe71a35d5a33"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/EntityMeshRenderer.md::0000","path":"engine/reference/render/mesh/EntityMeshRenderer.md","title":"render/mesh/EntityMeshRenderer.js","description":"","kind":"reference","source":"engine/render/mesh/EntityMeshRenderer.js","updated":"","headings":["render/mesh/EntityMeshRenderer.js","Classes","class EntityMeshRenderer","Functions","entityMaterialParamsData(options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Call at start of frame to reset instance batches Grow instance buffer to accommodate more entities Create a material bind group from a GPU texture view. Get a cached material bind group, or the default. Invalidate a cached material bind group (e.g. when texture changes). Interleave separate position/normal/uv/tangent arrays into a single vertex buffer. Layout: pos3 + normal3 + uv0 2 + tangent4 + uv1 2 = 14 floats per vertex. Register a custom mesh (imported model) at runtime. Update vertex buffer for a skinned mesh with new positions/normals. Called each frame by the skeletal animation system. Refresh local space animated bounds without replacing static mesh/SDF data. Get raw mesh data for SDF generation Store raw mesh data for SDF generation + compute bounding volumes. Computes both AABB (min/max/center/extents) and bounding sphere radius. The AABB is in local mesh space (before entity transform). Get precomputed bounding sphere radius for a mesh type. Custom/imported meshes that haven't loaded yet get a generous fallback (10.0) to prevent false culling. Built in types default to 0.866 (unit cube diagonal). Get precomputed bounding volumes for a mesh type. Returns AABB { min, max, center, extents } in local mesh space. For entities, the caller must offset center by entity position and scale extents. Queue an entity for instanced rendering (batched by mesh type + material) Call flush() after all entities to issue draw calls Flush all batched instances issues ONE draw call per mesh type Flush using the X ray pipeline — depth test always passes, no","contentHash":"f3de5a30acbf68295ec01df4b5f8a015f75559ce50880e3cf4d91ce4f30ce28b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/EntityMeshRenderer.md::0001","path":"engine/reference/render/mesh/EntityMeshRenderer.md","title":"render/mesh/EntityMeshRenderer.js","description":"","kind":"reference","source":"engine/render/mesh/EntityMeshRenderer.js","updated":"","headings":["render/mesh/EntityMeshRenderer.js","Classes","class EntityMeshRenderer","Functions","entityMaterialParamsData(options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"all entities to issue draw calls Flush all batched instances issues ONE draw call per mesh type Flush using the X ray pipeline — depth test always passes, no depth write. Use for skeleton/diagnostic geometry that must show through opaque overlays. Re draw all this frame's batched instances into a shadow depth map. Must be called AFTER flush() (reuses the same GPU instance buffer data). Register a point cloud for rendering. Unregister and release GPU resources for a point cloud. Update the entity space offset and point size for a point cloud. Call each frame with the entity's world position. Render all registered point clouds. Call after flush() in the same render pass. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"10ef27377950e174f9e1d78fb27922011dc91260cfb52ffe76258463db27d237"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/GPUSkinning.md::0000","path":"engine/reference/render/mesh/GPUSkinning.md","title":"render/mesh/GPUSkinning.js","description":"","kind":"reference","source":"engine/render/mesh/GPUSkinning.js","updated":"","headings":["render/mesh/GPUSkinning.js","Classes","class GPUSkinning","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ 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). ============================================================================ Classes Method Signature Summary Lazy init pipeline + shader (called once on first use) Register a skinned mesh for GPU skinning. Uploads static buffers (bind pose geometry, joint data) once. Creates the output vertex buffer with STORAGE VERTEX usage. Upload skin matrices and dispatch the compute shader for one mesh. Call once per frame per dirty skinned mesh, BEFORE rendering. Check if a mesh is registered for GPU skinning. Get the output vertex buffer for a registered mesh. Unregister a mesh and destroy its GPU resources. Destroy all resources. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported","contentHash":"06f250f70d082d3f80ea5c525e07ee407565e16f1da381d9af759d9e069d4d82"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/GPUSkinning.md::0001","path":"engine/reference/render/mesh/GPUSkinning.md","title":"render/mesh/GPUSkinning.js","description":"","kind":"reference","source":"engine/render/mesh/GPUSkinning.js","updated":"","headings":["render/mesh/GPUSkinning.js","Classes","class GPUSkinning","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1b426b19bac3bcca5909db8960d7af7636d64807da276025c4a06c643b091ab0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/ProceduralSkeleton.md::0000","path":"engine/reference/render/mesh/ProceduralSkeleton.md","title":"render/mesh/ProceduralSkeleton.js","description":"","kind":"reference","source":"engine/render/mesh/ProceduralSkeleton.js","updated":"","headings":["render/mesh/ProceduralSkeleton.js","Functions","generateProceduralSkeleton(positions, normals, options = {})","augmentGeoWithSkeleton(geo, options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ 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. ============================================================================ Functions 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) Parameters: (Float32Array number[]) — — flat xyz array (N 3) (Float32Array number[]) — — flat xyz array (N 3) (Object) — No description in source JSDoc. (number) — =0.8] — target distance between bones (number) — =2] — minimum bone count on primary axis (number) — =24] — maximum bone count total (number) — =0.35] — secondary/primary extent ratio to add branches (number) — =2.0] — exponent for distance weight falloff Returns: , skeleton: {jointCount, joints, inverseBindMatrices} }} Convenience: generate skeleton AND augment geo object in place. Returns the skeleton object for passing to registerSkinnedMesh. Parameters: (Object) — — same as generateProceduralSkeleton Returns: } <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by .","contentHash":"e51270b8b07712e3baf9c157bc4d90083c49047794a88165aacc07495a1defcc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/ProceduralSkeleton.md::0001","path":"engine/reference/render/mesh/ProceduralSkeleton.md","title":"render/mesh/ProceduralSkeleton.js","description":"","kind":"reference","source":"engine/render/mesh/ProceduralSkeleton.js","updated":"","headings":["render/mesh/ProceduralSkeleton.js","Functions","generateProceduralSkeleton(positions, normals, options = {})","augmentGeoWithSkeleton(geo, options)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"same as generateProceduralSkeleton Returns: } <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b393e48ca3d0d58b48c86d390bfe72901734c398cbffeba3cb16c271e6e1110f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/RopeMeshRenderer.md::0000","path":"engine/reference/render/mesh/RopeMeshRenderer.md","title":"render/mesh/RopeMeshRenderer.js","description":"","kind":"reference","source":"engine/render/mesh/RopeMeshRenderer.js","updated":"","headings":["render/mesh/RopeMeshRenderer.js","Classes","class RopeMeshRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Update rope meshes from ECS components Reads PhysicsChain components from entities Update rope meshes from unified particle system (Phase 3) Reads rope particle positions from ropeChains metadata Legacy method update from editor.physicsSimulations Map Build tube meshes from rope entries (shared by both update methods) Each entry: { pts, ringCount, radius, color, materialParams, secondaryColor, styleParams } <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See","contentHash":"d2a37352c7447c64c610545af946b9e5709d8bb1870f17ebd9bb39aa09322402"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/RopeMeshRenderer.md::0001","path":"engine/reference/render/mesh/RopeMeshRenderer.md","title":"render/mesh/RopeMeshRenderer.js","description":"","kind":"reference","source":"engine/render/mesh/RopeMeshRenderer.js","updated":"","headings":["render/mesh/RopeMeshRenderer.js","Classes","class RopeMeshRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"da5704c1f02f69e8b5a187bd3956c375e4c5e226d7ad7982a5c342a6b04a6921"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/SkeletalAnimation.md::0000","path":"engine/reference/render/mesh/SkeletalAnimation.md","title":"render/mesh/SkeletalAnimation.js","description":"","kind":"reference","source":"engine/render/mesh/SkeletalAnimation.js","updated":"","headings":["render/mesh/SkeletalAnimation.js","Functions","registerSkinnedMesh(meshKey, geo, skeleton, animations)","unregisterSkinnedMesh(meshKey)","getSkinnedMesh(meshKey)","tickSkeletalAnimations(dt)","registerModelNodeAnimation(modelInstanceId, graph, animations, playbackState = null)","unregisterModelNodeAnimation(modelInstanceId)","getModelNodeAnimation(modelInstanceId)","getModelNodeAnimationState(modelInstanceId)","getModelNodeAnimationDescriptor(modelInstanceId)","setModelNodeAnimationState(modelInstanceId, playbackState)","getModelNodeWorldMatrix(modelInstanceId, nodeIndex)","getModelNodeAnimationKeys()","consumeModelNodeAnimationDirty(modelInstanceId)","bindSkinnedMeshNodeAnimation(meshKey, modelInstanceId)","isSkinnedMesh(meshKey)","getSkinnedGeometry(meshKey)","getSkinnedBounds(meshKey)","getCachedSkinnedBounds(meshKey)","getMorphWeights(meshKey)","setMorphWeights(meshKey, weights)","getMorphTargetCount(meshKey)","getModelMorphState(parts)","getModelMorphDescriptor(parts)","setModelMorphState(parts, state)","getSkinnedMeshKeys()","getBoneCapsules(meshKey)","getAnimatedBoneShapes(meshKey, entityPos)","getBindPoseBones(meshKey, entityPos)","enableRagdoll(meshKey, entityPos)","setRagdollBoneTransforms(meshKey, boneWorldMatrices)","disableRagdoll(meshKey)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ 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. ============================================================================ Functions Register a skinned mesh for animation playback. Parameters: (string) — e.g. 'custom <uuid ' (Object) — { positions, normals, tangents, uvs, indices, joints, weights } (Object) — { joints[], inverseBindMatrices, jointCount } (Object[]) — Array of { name, channels[], duration } Unregister a skinned mesh. Get a skinned mesh instance. Tick all active skinned meshes. Call once per frame before rendering. Parameters: (number) — Delta time in seconds Register ordinary glTF node animation once per model entity instance. Check if a meshKey has skeletal animation. Get the current skinned positions/normals/tangents for a mesh. Returns null if not a skinned mesh. Compute current local space skinned bounds from bind vertices and live skin matrices. This remains authoritative when GPU skinning intentionally leaves CPU outputs stale. Get the current bounds already refreshed by the animation/ragdoll tick. Get all registered skinned mesh keys. Get per bone capsule dimensions computed from vertex weights. Returns cached data computed once at registration time. Parameters: (string) — No description in source JSDoc. Returns: null} Get ANIMATED bone shapes for visual overlay rendering. Returns current frame bone positions/rotations with mesh measured capsule sizes. Uses the CURRENT animated","contentHash":"9865a69ffc2faee4d62c1a777293fe901eefa0e055de6217be32628608de8b47"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/SkeletalAnimation.md::0001","path":"engine/reference/render/mesh/SkeletalAnimation.md","title":"render/mesh/SkeletalAnimation.js","description":"","kind":"reference","source":"engine/render/mesh/SkeletalAnimation.js","updated":"","headings":["render/mesh/SkeletalAnimation.js","Functions","registerSkinnedMesh(meshKey, geo, skeleton, animations)","unregisterSkinnedMesh(meshKey)","getSkinnedMesh(meshKey)","tickSkeletalAnimations(dt)","registerModelNodeAnimation(modelInstanceId, graph, animations, playbackState = null)","unregisterModelNodeAnimation(modelInstanceId)","getModelNodeAnimation(modelInstanceId)","getModelNodeAnimationState(modelInstanceId)","getModelNodeAnimationDescriptor(modelInstanceId)","setModelNodeAnimationState(modelInstanceId, playbackState)","getModelNodeWorldMatrix(modelInstanceId, nodeIndex)","getModelNodeAnimationKeys()","consumeModelNodeAnimationDirty(modelInstanceId)","bindSkinnedMeshNodeAnimation(meshKey, modelInstanceId)","isSkinnedMesh(meshKey)","getSkinnedGeometry(meshKey)","getSkinnedBounds(meshKey)","getCachedSkinnedBounds(meshKey)","getMorphWeights(meshKey)","setMorphWeights(meshKey, weights)","getMorphTargetCount(meshKey)","getModelMorphState(parts)","getModelMorphDescriptor(parts)","setModelMorphState(parts, state)","getSkinnedMeshKeys()","getBoneCapsules(meshKey)","getAnimatedBoneShapes(meshKey, entityPos)","getBindPoseBones(meshKey, entityPos)","enableRagdoll(meshKey, entityPos)","setRagdollBoneTransforms(meshKey, boneWorldMatrices)","disableRagdoll(meshKey)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":3,"text":"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) Parameters: (string) — e.g. 'custom <uuid ' (number[]) — [x,y,z] entity world position Returns: { shapes: [...], bodyHeight, shoulderWidth } Get bind pose bone data WITHOUT modifying state (no ragdoll, no animation stop). Used for edit mode SDF collider visualization preview. Parameters: (string) — No description in source JSDoc. (number[]) — [x,y,z] entity world position Returns: { bones: [{index, parentIndex, worldPos, worldRot, childPositions, name}], jointCount, rootScale } Enable ragdoll mode for a skinned mesh. Stops animation and returns bind pose bone world positions + hierarchy for creating physics bodies. Parameters: (string) — No description in source JSDoc. (number[]) — [x,y,z] entity world position Returns: { bones: [{index, parentIndex, worldPos, childPositions, name}], jointCount } Update bone world matrices from ragdoll physics transforms, then reskin. Parameters: (string) — No description in source JSDoc. (Float32Array) — jointCount 16 column major matrices Disable ragdoll mode, resuming animation. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned","contentHash":"39d3f8ce27ce56ebc5996b278a6fee8bc0dda78a3bc9b30b841a70df9975267c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/SkeletalAnimation.md::0002","path":"engine/reference/render/mesh/SkeletalAnimation.md","title":"render/mesh/SkeletalAnimation.js","description":"","kind":"reference","source":"engine/render/mesh/SkeletalAnimation.js","updated":"","headings":["render/mesh/SkeletalAnimation.js","Functions","registerSkinnedMesh(meshKey, geo, skeleton, animations)","unregisterSkinnedMesh(meshKey)","getSkinnedMesh(meshKey)","tickSkeletalAnimations(dt)","registerModelNodeAnimation(modelInstanceId, graph, animations, playbackState = null)","unregisterModelNodeAnimation(modelInstanceId)","getModelNodeAnimation(modelInstanceId)","getModelNodeAnimationState(modelInstanceId)","getModelNodeAnimationDescriptor(modelInstanceId)","setModelNodeAnimationState(modelInstanceId, playbackState)","getModelNodeWorldMatrix(modelInstanceId, nodeIndex)","getModelNodeAnimationKeys()","consumeModelNodeAnimationDirty(modelInstanceId)","bindSkinnedMeshNodeAnimation(meshKey, modelInstanceId)","isSkinnedMesh(meshKey)","getSkinnedGeometry(meshKey)","getSkinnedBounds(meshKey)","getCachedSkinnedBounds(meshKey)","getMorphWeights(meshKey)","setMorphWeights(meshKey, weights)","getMorphTargetCount(meshKey)","getModelMorphState(parts)","getModelMorphDescriptor(parts)","setModelMorphState(parts, state)","getSkinnedMeshKeys()","getBoneCapsules(meshKey)","getAnimatedBoneShapes(meshKey, entityPos)","getBindPoseBones(meshKey, entityPos)","enableRagdoll(meshKey, entityPos)","setRagdollBoneTransforms(meshKey, boneWorldMatrices)","disableRagdoll(meshKey)","Notes & Examples","Shared GPU device"],"chunkIndex":2,"chunkCount":3,"text":"matrices Disable ragdoll mode, resuming animation. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines re","contentHash":"feba6f5c3932002071e34f1deceeab270bb1930594df80cf0045b702836fd21b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/VirtualGeometrySystem.md::0000","path":"engine/reference/render/mesh/VirtualGeometrySystem.md","title":"render/mesh/VirtualGeometrySystem.js","description":"","kind":"reference","source":"engine/render/mesh/VirtualGeometrySystem.js","updated":"","headings":["render/mesh/VirtualGeometrySystem.js","Classes","class VirtualGeometrySystem","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Update culling parameters Create bind group for culling pass Execute cluster culling and LOD selection Get visible clusters buffer for indirect draw Get visible count buffer for indirect draw Build cluster hierarchy from mesh Uses a simple greedy clustering algorithm based on spatial locality <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"dc51fe39021aa318eddce11e0e856d1dd53c99ab4ab4a8e7e7a31edf3eff6473"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/mesh/index.md::0000","path":"engine/reference/render/mesh/index.md","title":"render/mesh/index.js","description":"","kind":"reference","source":"engine/render/mesh/index.js","updated":"","headings":["render/mesh/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Mesh Renderers GPU mesh rendering utilities Re exports , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"68d229b32118645ef6ddfc39ae8f87fda618845441ad4415e6a23f0359d835eb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/assets/MorphAssetCodec.md::0000","path":"engine/reference/render/morphfield/assets/MorphAssetCodec.md","title":"render/morphfield/assets/MorphAssetCodec.js","description":"","kind":"reference","source":"engine/render/morphfield/assets/MorphAssetCodec.js","updated":"","headings":["render/morphfield/assets/MorphAssetCodec.js","Functions","async encodeMorphAsset(sceneInput, options = {})","async decodeMorphAsset(input, options = {})","async loadMorphAsset(source, options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e5c0bb5489d7b2290952823ad15a3269ae4907e8568e7b581b010abb464066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/assets/MorphAssetFormat.md::0000","path":"engine/reference/render/morphfield/assets/MorphAssetFormat.md","title":"render/morphfield/assets/MorphAssetFormat.js","description":"","kind":"reference","source":"engine/render/morphfield/assets/MorphAssetFormat.js","updated":"","headings":["render/morphfield/assets/MorphAssetFormat.js","Functions","fourCCToUint32(value)","uint32ToFourCC(value)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e5c0bb5489d7b2290952823ad15a3269ae4907e8568e7b581b010abb464066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/assets/index.md::0000","path":"engine/reference/render/morphfield/assets/index.md","title":"render/morphfield/assets/index.js","description":"","kind":"reference","source":"engine/render/morphfield/assets/index.js","updated":"","headings":["render/morphfield/assets/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f7bb777cef6c37350ca4ca0c10032fd7892e49fece55e7d058bf6b5424b3b905"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/assets/selfTest.md::0000","path":"engine/reference/render/morphfield/assets/selfTest.md","title":"render/morphfield/assets/selfTest.js","description":"","kind":"reference","source":"engine/render/morphfield/assets/selfTest.js","updated":"","headings":["render/morphfield/assets/selfTest.js","Functions","async runMorphAssetSelfTests()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/AabbBvh.md::0000","path":"engine/reference/render/morphfield/core/AabbBvh.md","title":"render/morphfield/core/AabbBvh.js","description":"","kind":"reference","source":"engine/render/morphfield/core/AabbBvh.js","updated":"","headings":["render/morphfield/core/AabbBvh.js","Classes","class AabbBvh","Functions","buildAabbBvh(leaves)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6856256ef1889ac76f3115f7215ec0627f47aaad919f3257866d7b4481decf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/FieldletAbi.md::0000","path":"engine/reference/render/morphfield/core/FieldletAbi.md","title":"render/morphfield/core/FieldletAbi.js","description":"","kind":"reference","source":"engine/render/morphfield/core/FieldletAbi.js","updated":"","headings":["render/morphfield/core/FieldletAbi.js","Functions","createOutwardF32Bounds(bounds, expansion = 0)","packFieldletMeta({ subtype = 0, family = 0, queryMask = 0, flags = 0 } = {})","unpackFieldletMeta(meta)","createFieldletHeader({ boundsRef, payloadRef, meta, certificateRef = INVALIDREF })","writeFieldletHeader(view, byteOffset, header)","readFieldletHeader(view, byteOffset = 0)","createCertificateBundle({ surfaceRef = INVALIDREF, mediumRef = INVALIDREF, motionRef = INVALIDREF, collisionRef = INVALIDREF, } = {})","createSurfaceCertificate({ fieldValueErrorMax = 0, lipschitzMax, fallbackBand = 0, motionRadiusMax = 0, })","createMediumCertificate({ densityMax = 0, extinctionMax = 0, emissionLuminanceMax = 0, motionRadiusMax = 0, } = {})","createMotionCertificate({ displacementMax = 0, speedMax = 0, accelerationMax = 0, validDuration = 0, } = {})","createCollisionCertificate({ fieldValueErrorMax = 0, lipschitzMax, contactOffset, contactSlop = 0, motionRadiusMax = 0, })","safeCertifiedStep(fieldEstimate, certificate)","validateFieldletAbi()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/MeshTopologyValidation.md::0000","path":"engine/reference/render/morphfield/core/MeshTopologyValidation.md","title":"render/morphfield/core/MeshTopologyValidation.js","description":"","kind":"reference","source":"engine/render/morphfield/core/MeshTopologyValidation.js","updated":"","headings":["render/morphfield/core/MeshTopologyValidation.js","Functions","validateIndexedTriangleMesh(mesh, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c53879e5fdd4335d714d336c331c79159c7ec62e2a6efb8e3d9ac9fc2ee47f25"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/MorphFieldCompiler.md::0000","path":"engine/reference/render/morphfield/core/MorphFieldCompiler.md","title":"render/morphfield/core/MorphFieldCompiler.js","description":"","kind":"reference","source":"engine/render/morphfield/core/MorphFieldCompiler.js","updated":"","headings":["render/morphfield/core/MorphFieldCompiler.js","Classes","class MorphFieldCompiler","Functions","isCompilerProducedCompiledScene(value)","verifyCompiledSceneProvenance(value)","inspectNexelCompilerFeasibility(input)","createMorphFieldCompiler(options)","async compileMorphFieldScene(scene, options)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions 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. 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. Re exports , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing ·","contentHash":"5007a1e6132ba8ae6e1fe77999e3bc9a09d8952f09a85186cc74f6a04fe5bf89"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/MorphFieldCompiler.md::0001","path":"engine/reference/render/morphfield/core/MorphFieldCompiler.md","title":"render/morphfield/core/MorphFieldCompiler.js","description":"","kind":"reference","source":"engine/render/morphfield/core/MorphFieldCompiler.js","updated":"","headings":["render/morphfield/core/MorphFieldCompiler.js","Classes","class MorphFieldCompiler","Functions","isCompilerProducedCompiledScene(value)","verifyCompiledSceneProvenance(value)","inspectNexelCompilerFeasibility(input)","createMorphFieldCompiler(options)","async compileMorphFieldScene(scene, options)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"57af9f14a6b98c6d090a8b484cd248f48b20b4c20a48afffe4b6f5d99643b404"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/NexelScene.md::0000","path":"engine/reference/render/morphfield/core/NexelScene.md","title":"render/morphfield/core/NexelScene.js","description":"","kind":"reference","source":"engine/render/morphfield/core/NexelScene.js","updated":"","headings":["render/morphfield/core/NexelScene.js","Classes","class NexelScene","Functions","normalizeNexelPatch(input)","createNexelScene(options)","isNexelScene(value)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Re exports , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e89e024179a63f2bbb0387e0bda1b600161571ca81c32deddf803f22f696f643"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/ReferenceQueries.md::0000","path":"engine/reference/render/morphfield/core/ReferenceQueries.md","title":"render/morphfield/core/ReferenceQueries.js","description":"","kind":"reference","source":"engine/render/morphfield/core/ReferenceQueries.js","updated":"","headings":["render/morphfield/core/ReferenceQueries.js","Classes","class MorphFieldReferenceEvaluator","Functions","evaluateSourceDistance(source, pointValue)","evaluateNexelDistance(nexelValue, pointValue)","createMorphFieldReferenceEvaluator(sceneOrCompiled)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6856256ef1889ac76f3115f7215ec0627f47aaad919f3257866d7b4481decf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/Transform.md::0000","path":"engine/reference/render/morphfield/core/Transform.md","title":"render/morphfield/core/Transform.js","description":"","kind":"reference","source":"engine/render/morphfield/core/Transform.js","updated":"","headings":["render/morphfield/core/Transform.js","Functions","normalizeVector3(value, path = 'vector', fallback = [0, 0, 0])","normalizeQuaternion(value, path = 'rotation')","matrixFromRigidUniformTransform(translation, rotation, scale)","normalizeTransform(input = undefined, path = 'transform')","isIdentityTransform(transform)","transformPoint(matrix, point)","transformDirection(matrix, direction)","transformAabb(bounds, transform)","composeTransforms(parent, child)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/constants.md::0000","path":"engine/reference/render/morphfield/core/constants.md","title":"render/morphfield/core/constants.js","description":"","kind":"reference","source":"engine/render/morphfield/core/constants.js","updated":"","headings":["render/morphfield/core/constants.js","Functions","queryMaskForKind(kind)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e5c0bb5489d7b2290952823ad15a3269ae4907e8568e7b581b010abb464066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/errors.md::0000","path":"engine/reference/render/morphfield/core/errors.md","title":"render/morphfield/core/errors.js","description":"","kind":"reference","source":"engine/render/morphfield/core/errors.js","updated":"","headings":["render/morphfield/core/errors.js","Classes","class MorphFieldError extends Error","Functions","failMorphField(code, message, details = undefined)","invariant(condition, code, message, details = undefined)","asMorphFieldError(error, code, message, details = undefined)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6856256ef1889ac76f3115f7215ec0627f47aaad919f3257866d7b4481decf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/index.md::0000","path":"engine/reference/render/morphfield/core/index.md","title":"render/morphfield/core/index.js","description":"","kind":"reference","source":"engine/render/morphfield/core/index.js","updated":"","headings":["render/morphfield/core/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f7bb777cef6c37350ca4ca0c10032fd7892e49fece55e7d058bf6b5424b3b905"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/selfTest.md::0000","path":"engine/reference/render/morphfield/core/selfTest.md","title":"render/morphfield/core/selfTest.js","description":"","kind":"reference","source":"engine/render/morphfield/core/selfTest.js","updated":"","headings":["render/morphfield/core/selfTest.js","Functions","async runMorphFieldCoreSelfTests()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/serialization.md::0000","path":"engine/reference/render/morphfield/core/serialization.md","title":"render/morphfield/core/serialization.js","description":"","kind":"reference","source":"engine/render/morphfield/core/serialization.js","updated":"","headings":["render/morphfield/core/serialization.js","Functions","isPlainObject(value)","compareCanonicalStrings(left, right)","canonicalize(value, path = '$', options = {})","canonicalStringify(value, options = {})","canonicalParse(text, options = {})","deepFreeze(value, visited = new WeakSet()","cloneCanonical(value)","utf8Encode(text)","utf8Decode(bytes, options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"10e3f564af6a88e50ff9df47765f6497c4f41d29a3319510b0ae0503d1f12cc7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/core/validation.md::0000","path":"engine/reference/render/morphfield/core/validation.md","title":"render/morphfield/core/validation.js","description":"","kind":"reference","source":"engine/render/morphfield/core/validation.js","updated":"","headings":["render/morphfield/core/validation.js","Functions","normalizeBounds(value, path = 'bounds')","normalizeSource(input, path = 'source', depth = 0, options = {})","validateMaterialF32Channels(material, path = 'material')","validateNexelId(value, path = 'id')","normalizeNexelDescriptor(input, path = 'nexel')","planRepresentation(source)","computeSourceBounds(source)","computeNexelBounds(nexel)","computeNexelQueryMask(nexel)","sourceContainsLocalTransforms(source)","countAnalyticInstructions(source)","maximumAnalyticStackDepth(source)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e5c0bb5489d7b2290952823ad15a3269ae4907e8568e7b581b010abb464066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/index.md::0000","path":"engine/reference/render/morphfield/index.md","title":"render/morphfield/index.js","description":"","kind":"reference","source":"engine/render/morphfield/index.js","updated":"","headings":["render/morphfield/index.js","Functions","createScene(options)","createCompiler(options)","encodeAsset(scene, options)","async loadAsset(source, options)","inspectAsset(source, options)","createRenderer(options)","createPathTracer(options)","createMicrostructureRenderer(options)","createAffineBrickRenderer(options)","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a device independent semantic Nexel scene. Create a deterministic device independent MorphField compiler. Encode a semantic scene into a bounded, checksummed MOR2 container. Load a MOR2 container and return its authoritative semantic Nexel scene. Use inspectAsset() when chunk metadata or provenance is also required. Decode a MOR2 container while retaining provenance and optional chunks. Create an external encoder renderer that borrows its host GPUDevice. Create the bounded queue progressive compute path tracer. Create the portable u32 render cluster decoder on a borrowed GPU device. Create the direct 32 byte AFFINE4 brick decoder on a borrowed GPU device. Constants — 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. Re exports , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines","contentHash":"4a108d546d7211727a6bc264fc28d5f4cd4bb28546a07bb229db250e7c94bbc2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/index.md::0001","path":"engine/reference/render/morphfield/index.md","title":"render/morphfield/index.js","description":"","kind":"reference","source":"engine/render/morphfield/index.js","updated":"","headings":["render/morphfield/index.js","Functions","createScene(options)","createCompiler(options)","encodeAsset(scene, options)","async loadAsset(source, options)","inspectAsset(source, options)","createRenderer(options)","createPathTracer(options)","createMicrostructureRenderer(options)","createAffineBrickRenderer(options)","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ca0b84ce9a2aabdb3f465f8045cf1ad6abae7aa601a7a29cdf34c7022dc148d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/AdaptiveQualityGovernor.md::0000","path":"engine/reference/render/morphfield/runtime/AdaptiveQualityGovernor.md","title":"render/morphfield/runtime/AdaptiveQualityGovernor.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/AdaptiveQualityGovernor.js","updated":"","headings":["render/morphfield/runtime/AdaptiveQualityGovernor.js","Functions","normalizeQualityDecision(decision, fallback, options = {})","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e6fc58ac296b51a95f44fdd8385d702b2ab7bc727468a8f59d35c5123ce33c55"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/MorphFieldRenderer.md::0000","path":"engine/reference/render/morphfield/runtime/MorphFieldRenderer.md","title":"render/morphfield/runtime/MorphFieldRenderer.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/MorphFieldRenderer.js","updated":"","headings":["render/morphfield/runtime/MorphFieldRenderer.js","Classes","class MorphFieldRenderer","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"938e70148a60175623cbe428eee2c73b97f2aac7fb51ba26dbee5e1676e45f67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/NexelAffineBrickRenderer.md::0000","path":"engine/reference/render/morphfield/runtime/NexelAffineBrickRenderer.md","title":"render/morphfield/runtime/NexelAffineBrickRenderer.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/NexelAffineBrickRenderer.js","updated":"","headings":["render/morphfield/runtime/NexelAffineBrickRenderer.js","Classes","class NexelAffineBrickRenderer","Functions","createNexelAffineBrickRenderer(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Directly expands 32 byte AFFINE4 morphology payloads into render only cells. Simulation/collision remains attached to the authoritative MorphField scene. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9aa6c636ad6706ab81ff8fd805c32331758fabd4a7036556b758dd30f0a3ad53"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/NexelAffineBrickShaders.md::0000","path":"engine/reference/render/morphfield/runtime/NexelAffineBrickShaders.md","title":"render/morphfield/runtime/NexelAffineBrickShaders.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/NexelAffineBrickShaders.js","updated":"","headings":["render/morphfield/runtime/NexelAffineBrickShaders.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Direct GPU expansion of a 32 byte, sixty four microcube AFFINE4 payload. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ff13fcf6897c0b060e7d6e6232a71ee10b410d180e3745b6560c711f6baf5639"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/NexelMicrostructureRenderer.md::0000","path":"engine/reference/render/morphfield/runtime/NexelMicrostructureRenderer.md","title":"render/morphfield/runtime/NexelMicrostructureRenderer.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/NexelMicrostructureRenderer.js","updated":"","headings":["render/morphfield/runtime/NexelMicrostructureRenderer.js","Classes","class NexelMicrostructureRenderer","Functions","createNexelMicrostructureRenderer(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes A borrowed device, external encoder renderer. Each 32 byte parent Nexel is decoded directly in WGSL into at most eight render only samples. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"05034fd5ad06f95515d1a0ade71f663626f53fcf14a2e4f720e2f58a11a8afe5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/NexelMicrostructureShaders.md::0000","path":"engine/reference/render/morphfield/runtime/NexelMicrostructureShaders.md","title":"render/morphfield/runtime/NexelMicrostructureShaders.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/NexelMicrostructureShaders.js","updated":"","headings":["render/morphfield/runtime/NexelMicrostructureShaders.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Portable u32 direct decode renderer for RM(1,3) Nexel clusters. Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2a9681515d79dd76ae30f2cb7534ac9f520f73f780fd9ddd22455b442d04b986"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/NexelPresentationRuntime.md::0000","path":"engine/reference/render/morphfield/runtime/NexelPresentationRuntime.md","title":"render/morphfield/runtime/NexelPresentationRuntime.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/NexelPresentationRuntime.js","updated":"","headings":["render/morphfield/runtime/NexelPresentationRuntime.js","Functions","finiteNexelNumber(value, fallback = 0)","clampNexelNumber(value, minimum, maximum)","checkedNexelU32(value, label)","finiteNexelVector(value, length, label)","packNexelRgba8(color)","nextNexelCapacity(required, maximum)","async assertNexelShaderCompiles(module, label)","writeNexelFrameUniforms(target, { camera, viewport, time, frameCount, quality, pointGain, projectionScale, opacity, } = {})","createNexelOverlayPassDescriptor(label, target, depthFormat)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e5c0bb5489d7b2290952823ad15a3269ae4907e8568e7b581b010abb464066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/NexelShaderPlan.md::0000","path":"engine/reference/render/morphfield/runtime/NexelShaderPlan.md","title":"render/morphfield/runtime/NexelShaderPlan.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/NexelShaderPlan.js","updated":"","headings":["render/morphfield/runtime/NexelShaderPlan.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Root Algebra style immutable execution plan shared by every Nexel shader. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"8758ff54d888024f2f9aa0e5b5640428e4c7a0864ed5194c1703fbf0089cade3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/QueryEncoder.md::0000","path":"engine/reference/render/morphfield/runtime/QueryEncoder.md","title":"render/morphfield/runtime/QueryEncoder.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/QueryEncoder.js","updated":"","headings":["render/morphfield/runtime/QueryEncoder.js","Classes","class MorphFieldQueryEncoder","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/ResourceOwnershipTracker.md::0000","path":"engine/reference/render/morphfield/runtime/ResourceOwnershipTracker.md","title":"render/morphfield/runtime/ResourceOwnershipTracker.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/ResourceOwnershipTracker.js","updated":"","headings":["render/morphfield/runtime/ResourceOwnershipTracker.js","Classes","class ResourceOwnershipTracker","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/RuntimeShaders.md::0000","path":"engine/reference/render/morphfield/runtime/RuntimeShaders.md","title":"render/morphfield/runtime/RuntimeShaders.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/RuntimeShaders.js","updated":"","headings":["render/morphfield/runtime/RuntimeShaders.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/SceneBufferUploader.md::0000","path":"engine/reference/render/morphfield/runtime/SceneBufferUploader.md","title":"render/morphfield/runtime/SceneBufferUploader.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/SceneBufferUploader.js","updated":"","headings":["render/morphfield/runtime/SceneBufferUploader.js","Classes","class SceneBufferUploader","Functions","validateCompiledSceneAbi(scene)","normalizeCompiledScene(scene)","packSpatialRecords(canonical)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions 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. 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. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source:","contentHash":"967ecdeff50acd5c15abb0cb2395a5d1853870481ff5ef5c4f0272098b95e613"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/SceneBufferUploader.md::0001","path":"engine/reference/render/morphfield/runtime/SceneBufferUploader.md","title":"render/morphfield/runtime/SceneBufferUploader.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/SceneBufferUploader.js","updated":"","headings":["render/morphfield/runtime/SceneBufferUploader.js","Classes","class SceneBufferUploader","Functions","validateCompiledSceneAbi(scene)","normalizeCompiledScene(scene)","packSpatialRecords(canonical)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"44da23d910ba1b334912304923b4de5d78f32a15de03d053df614f73b7927ad1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/capabilities.md::0000","path":"engine/reference/render/morphfield/runtime/capabilities.md","title":"render/morphfield/runtime/capabilities.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/capabilities.js","updated":"","headings":["render/morphfield/runtime/capabilities.js","Functions","bufferUsage(...names)","textureUsage(...names)","shaderStages(...names)","validateBorrowedDevice(device)","validateExternalEncoder(encoder)","inspectDeviceCapabilities(device)","inspectNexelComputeCapabilities(device, { wgslLanguageFeatures } = {})","positiveExtent(value, maximum)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6f5cc3bf56f9bc84843ab2f2e5eecb715e52e5ec75d1f65a4c79e27812144a91"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/index.md::0000","path":"engine/reference/render/morphfield/runtime/index.md","title":"render/morphfield/runtime/index.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/index.js","updated":"","headings":["render/morphfield/runtime/index.js","Functions","async createRenderer(options)","canonicalizeCompiledScene(scene)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. Re exports , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"12a0493878a5f4e0ecdc7359ad576d8b52056aba9c225568faee3bdc0de20105"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.md::0000","path":"engine/reference/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.md","title":"render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.js","updated":"","headings":["render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.js","Classes","class MorphFieldWavefrontPathTracer","Functions","async createWavefrontPathTracer(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Binds borrowed scene buffers. contains four vec4 records per Fieldlet in surface, medium, motion, collision order. Optional material extensions may be a borrowed GPU buffer, packed CPU data, or semantic descriptors. No borrowed buffer is ever destroyed. Updates same allocation scene metadata without rebuilding borrowed bind groups. Allocates bounded owned queues and an f32 sum/count accumulation buffer. Invalidates progressive accumulation on the next external encode. Records generate/intersect/shade/shadow/finalize compute passes. The host retains responsibility for finishing and submitting . Resolves an explicitly requested queue header readback after host submit. Returns the owned rgba32float radiance sum/sample count output buffer. Releases only resolution dependent queues and accumulation. Persistent pipelines, layouts, scene bindings, and lifetime counters remain ready so a later progressive encode can rebuild the extent without recompilation. Returns synchronous lifecycle data plus the latest resolved GPU counters. Releases only owned resources. Safe to call more than once. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native","contentHash":"8c8c76bbdafad6ec02de8bb6a174a88cbaba20131e1f73a0397734afb67d79af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.md::0001","path":"engine/reference/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.md","title":"render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.js","updated":"","headings":["render/morphfield/runtime/wavefront/MorphFieldWavefrontPathTracer.js","Classes","class MorphFieldWavefrontPathTracer","Functions","async createWavefrontPathTracer(options)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6d10dfa86b7bc5060d328432d50980b92c4582ed36bb81239187baacc996b6e5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/wavefront/WavefrontShaders.md::0000","path":"engine/reference/render/morphfield/runtime/wavefront/WavefrontShaders.md","title":"render/morphfield/runtime/wavefront/WavefrontShaders.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/wavefront/WavefrontShaders.js","updated":"","headings":["render/morphfield/runtime/wavefront/WavefrontShaders.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/wavefront/constants.md::0000","path":"engine/reference/render/morphfield/runtime/wavefront/constants.md","title":"render/morphfield/runtime/wavefront/constants.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/wavefront/constants.js","updated":"","headings":["render/morphfield/runtime/wavefront/constants.js","Functions","queueByteSize(capacity, recordBytes)","packMaterialExtensions(descriptors = [])","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Packs one extension record per material as [transmissionFactor, ior, clearcoatFactor, clearcoatRoughness]. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"fea414f45ce95aa267c5122831bee9925d239afb45ddc0ddefbc84e2f0af78b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/wavefront/index.md::0000","path":"engine/reference/render/morphfield/runtime/wavefront/index.md","title":"render/morphfield/runtime/wavefront/index.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/wavefront/index.js","updated":"","headings":["render/morphfield/runtime/wavefront/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9e1d2d5b5192d12e5e230b945264ae9e8fd75d7b619234e9f16ccbc224e9d4ed"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/runtime/wavefront/selfTest.md::0000","path":"engine/reference/render/morphfield/runtime/wavefront/selfTest.md","title":"render/morphfield/runtime/wavefront/selfTest.js","description":"","kind":"reference","source":"engine/render/morphfield/runtime/wavefront/selfTest.js","updated":"","headings":["render/morphfield/runtime/wavefront/selfTest.js","Functions","async runWavefrontSelfTest({ realWebGpu = false, device = null } = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/schemas/ids.md::0000","path":"engine/reference/render/morphfield/schemas/ids.md","title":"render/morphfield/schemas/ids.js","description":"","kind":"reference","source":"engine/render/morphfield/schemas/ids.js","updated":"","headings":["render/morphfield/schemas/ids.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/schemas/index.md::0000","path":"engine/reference/render/morphfield/schemas/index.md","title":"render/morphfield/schemas/index.js","description":"","kind":"reference","source":"engine/render/morphfield/schemas/index.js","updated":"","headings":["render/morphfield/schemas/index.js","Functions","inspectNexelCapabilities(input)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Normalize one semantic Nexel and report the execution/query capabilities the current R2 implementation can honestly provide for it. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"76cc0c83ce190c2b65fc65f0c598f94f51cee81bd47bc43753c8344334ee9af5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/EngineSimulationAdapters.md::0000","path":"engine/reference/render/morphfield/systems/EngineSimulationAdapters.md","title":"render/morphfield/systems/EngineSimulationAdapters.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/EngineSimulationAdapters.js","updated":"","headings":["render/morphfield/systems/EngineSimulationAdapters.js","Functions","createParticleWorldAdapter(world, options = {})","createFluidWorldAdapter(world, options = {})","createVolumeSystemAdapter(volumeSystem, options = {})","createGpuSimulationAdapter(descriptor)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Adapt the existing particle world to the shared host encoder. Adapt the existing external encoder fluid grid. Adapt an existing volume system exposing update(encoder, camera). Generic bridge for a caller owned GPU simulation. It deliberately does not invent domain specific solver names or resource ownership. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6fe63645babdae9081161aa72b9eaac75b224e48c26d93d0a6a3cb61feef34ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/KernelMedia.md::0000","path":"engine/reference/render/morphfield/systems/KernelMedia.md","title":"render/morphfield/systems/KernelMedia.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/KernelMedia.js","updated":"","headings":["render/morphfield/systems/KernelMedia.js","Classes","class OrientedKernelSet","class LayeredOITAccumulator","Functions","integrateMedium(ray, evaluateMedium, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes CPU reference and bin builder for semantic anisotropic oriented kernels. Method Signature Summary Four exact sorted layers followed by a bounded weighted blended tail. Method Signature Summary Functions Deterministic reference integrator using a certified extinction majorant. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3aff680907e5ff38e45a861d0478cf65c846044e992d2139bfa53791f75ff4f2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/NexelMicrostructure.md::0000","path":"engine/reference/render/morphfield/systems/NexelMicrostructure.md","title":"render/morphfield/systems/NexelMicrostructure.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/NexelMicrostructure.js","updated":"","headings":["render/morphfield/systems/NexelMicrostructure.js","Functions","compileNexelAffineDecodePlan()","compileNexelDictionary(dictionary = [])","affineCubeSample(morphology, corner)","expandAffineCube(morphology)","decodeAffineCube(pattern)","affineFaceParitySyndrome(pattern)","inspectAffineCube(pattern)","countSetBits8(value)","hammingDistance8(left, right)","packNexelMorton3D5(x, y, z)","unpackNexelMorton3D5(mortonCoordinate)","encodeNexelMicrocube(pattern, { dictionary } = {})","decodeNexelMicrocube(encoded, { dictionary } = {})","packNexelDescriptor({ mortonCoordinate = 0, material = 0, morphology = 0, state = 0, lod = 0, flags = 0, } = {})","unpackNexelDescriptor(word)","packAffine4Brick(patterns)","packAffine4Morphologies(morphologies)","unpackAffine4Brick(words)","crc32Bytes(bytes)","computeAffineBrickFaceSignatures(patterns)","createAffineNexelBrick(patterns, options = {})","createAffineNexelBrickFromMorphologies(morphologies, options = {})","verifyAffineNexelBrick(brick)","nexelClusterCornerOrder(seed = 0)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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. Compile an immutable exact dictionary and reverse lookup once per codebook. Evaluate one corner of an RM(1,3) affine microcube. Expand an affine morphology into its exact eight bit occupancy mask. Return the affine morphology for a pattern, or null for a non codeword. 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. Interleave three five bit coordinates into the descriptor's 15 bit Morton field. Choose the smallest lossless local mode under the supplied dictionary. Pack the research descriptor: 15/6/4/3/2/2 exact integer fields. Pack sixty four affine microcubes into eight u32 words (32 bytes). Pack already proven morphology nibbles without expanding and re decoding. Build a brick directly from its sixty four affine morphology nibbles. Recompute every local brick invariant without trusting stored TypedArrays. Return a deterministic, exact permutation of the eight microcube corners. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss","contentHash":"9140d83d70bc73bd37f7eb2c23949c9ef157c039b247362afac31dfd43cbb13c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/NexelMicrostructure.md::0001","path":"engine/reference/render/morphfield/systems/NexelMicrostructure.md","title":"render/morphfield/systems/NexelMicrostructure.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/NexelMicrostructure.js","updated":"","headings":["render/morphfield/systems/NexelMicrostructure.js","Functions","compileNexelAffineDecodePlan()","compileNexelDictionary(dictionary = [])","affineCubeSample(morphology, corner)","expandAffineCube(morphology)","decodeAffineCube(pattern)","affineFaceParitySyndrome(pattern)","inspectAffineCube(pattern)","countSetBits8(value)","hammingDistance8(left, right)","packNexelMorton3D5(x, y, z)","unpackNexelMorton3D5(mortonCoordinate)","encodeNexelMicrocube(pattern, { dictionary } = {})","decodeNexelMicrocube(encoded, { dictionary } = {})","packNexelDescriptor({ mortonCoordinate = 0, material = 0, morphology = 0, state = 0, lod = 0, flags = 0, } = {})","unpackNexelDescriptor(word)","packAffine4Brick(patterns)","packAffine4Morphologies(morphologies)","unpackAffine4Brick(words)","crc32Bytes(bytes)","computeAffineBrickFaceSignatures(patterns)","createAffineNexelBrick(patterns, options = {})","createAffineNexelBrickFromMorphologies(morphologies, options = {})","verifyAffineNexelBrick(brick)","nexelClusterCornerOrder(seed = 0)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"edf052d395bed671efb5a2af14427106bbe0b8b26a6e840bc4899b5e668eb322"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/NexelPbdCollisionAdapter.md::0000","path":"engine/reference/render/morphfield/systems/NexelPbdCollisionAdapter.md","title":"render/morphfield/systems/NexelPbdCollisionAdapter.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/NexelPbdCollisionAdapter.js","updated":"","headings":["render/morphfield/systems/NexelPbdCollisionAdapter.js","Classes","class NexelPbdCollisionAdapter","Functions","compileNexelPbdColliderSet(descriptorInput, { contactOffset = 0.002, restOffset = 0, friction = 0.36, } = {})","applyNexelPbdColliderSet(solver, colliderSet)","createNexelPbdCollisionAdapter(options)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions 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). Apply a compiled collider set without taking ownership of the solver. Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"409fbf83ed68ee21959050171622d5c8bc80f18d19503ab5df559d678a90e757"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/ParticleChainNexelAdapter.md::0000","path":"engine/reference/render/morphfield/systems/ParticleChainNexelAdapter.md","title":"render/morphfield/systems/ParticleChainNexelAdapter.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/ParticleChainNexelAdapter.js","updated":"","headings":["render/morphfield/systems/ParticleChainNexelAdapter.js","Functions","createParticleChainNexelDescriptors(snapshot, options = {})","createParticleChainNexelPatch(scene, snapshot, options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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 , CPU PBD , and ordinary arrays intentionally share this one input contract. Build an incremental scene patch while preserving stable chain IDs. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"021ea5043914b733d708941e0e5f0501aaf4743517218dd2a9a43c28e8f295e3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/QefSolver.md::0000","path":"engine/reference/render/morphfield/systems/QefSolver.md","title":"render/morphfield/systems/QefSolver.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/QefSolver.js","updated":"","headings":["render/morphfield/systems/QefSolver.js","Functions","solveQef(intersections, normals, bounds, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"43330e6c8c91f113074ae609bb24f34b98dab7bb6b334c69c7f9633e1bfce959"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/RepresentationPlanner.md::0000","path":"engine/reference/render/morphfield/systems/RepresentationPlanner.md","title":"render/morphfield/systems/RepresentationPlanner.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/RepresentationPlanner.js","updated":"","headings":["render/morphfield/systems/RepresentationPlanner.js","Classes","class RepresentationPlanner","Functions","selectSurfaceExtractor(intent = {}, capabilities = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Stable top level MorphField execution families. Classes Deterministic representation planner. Source semantics and certificates are authoritative; performance history can only promote an eligible surface to a disposable cache. Method Signature Summary Functions 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. Constants — Stable top level MorphField execution families. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ca3b91c479447248b2b195fd5d53a8630efb40b24e1bd16855112ac686911749"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/ResidualHierarchy.md::0000","path":"engine/reference/render/morphfield/systems/ResidualHierarchy.md","title":"render/morphfield/systems/ResidualHierarchy.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/ResidualHierarchy.js","updated":"","headings":["render/morphfield/systems/ResidualHierarchy.js","Classes","class CertifiedResidualBrick","class ResidualHierarchy","Functions","composeResidualCertificate(analytic, residual)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Certified scalar residual brick with deterministic trilinear sampling. Method Signature Summary Revisioned, fixed budget residual residency manager. The coarsest level is pinned, so every accepted source always has a certified fallback. Method Signature Summary Functions Compose analytic and residual surface certificates conservatively. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"573f617faa5902d2d8804140f931e17c112faf7e789ac9c7b5f32bf4936af1e1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/SimulationScheduler.md::0000","path":"engine/reference/render/morphfield/systems/SimulationScheduler.md","title":"render/morphfield/systems/SimulationScheduler.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/SimulationScheduler.js","updated":"","headings":["render/morphfield/systems/SimulationScheduler.js","Classes","class FixedStepSimulationScheduler","Functions","createExternalEncoderAdapter({ id, authority = 'authoritative', encode, interpolate, updateStride = 1 })","createKinematicAdapter({ id, sample, apply, authority = 'authoritative' })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Fixed step scheduler for external encoder simulation domains. Classes Fixed step scheduler for external encoder simulation domains. Method Signature Summary Functions Wrap an existing external encoder simulation API without changing its name. Kinematic adapter that advances a caller owned transform source. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"766d015d42b659892c92db7eff5b2394454980961dc2598c371ac711fc592bd8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/SurfaceCacheExtractor.md::0000","path":"engine/reference/render/morphfield/systems/SurfaceCacheExtractor.md","title":"render/morphfield/systems/SurfaceCacheExtractor.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/SurfaceCacheExtractor.js","updated":"","headings":["render/morphfield/systems/SurfaceCacheExtractor.js","Classes","class SurfaceCacheExtractor","class SurfaceCacheManager","Functions","validateMesh(mesh, topologyRequirement = 'unspecified')","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Device independent surface cache extractor and validation boundary. Method Signature Summary Stages complete connected domains and atomically replaces validated entries. Method Signature Summary Crack safe portable fallback for a connected mixed LOD domain. Every member is resampled at the finest cell size before staging, trading memory for an exact shared boundary until a validated transition cell backend is active. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"48f2938d7cf683eb0a63a60c92d0f70ac8f810ab11c0e4e0a059726e118ecf47"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/index.md::0000","path":"engine/reference/render/morphfield/systems/index.md","title":"render/morphfield/systems/index.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/index.js","updated":"","headings":["render/morphfield/systems/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f7bb777cef6c37350ca4ca0c10032fd7892e49fece55e7d058bf6b5424b3b905"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/transitions/TransitionBoundary.md::0000","path":"engine/reference/render/morphfield/systems/transitions/TransitionBoundary.md","title":"render/morphfield/systems/transitions/TransitionBoundary.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/transitions/TransitionBoundary.js","updated":"","headings":["render/morphfield/systems/transitions/TransitionBoundary.js","Functions","createTransitionBoundarySignatures(mesh, options = {})","compareTransitionBoundarySignatures(left, right)","compareTransitionBoundaries(left, leftFace, right, rightFace)","assertTransitionBoundaryMatch(left, leftFace, right, rightFace)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"57d0e97a3547fbc9ee0d4d1e23b0deefb01dbe1bb9ec7e359c2f9224504347f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/transitions/TransitionCellExtractor.md::0000","path":"engine/reference/render/morphfield/systems/transitions/TransitionCellExtractor.md","title":"render/morphfield/systems/transitions/TransitionCellExtractor.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/transitions/TransitionCellExtractor.js","updated":"","headings":["render/morphfield/systems/transitions/TransitionCellExtractor.js","Classes","class TransitionExtractionError extends Error","class TransitionCellExtractor","Functions","validateExact2To1GridPair(fineInput, coarseInput)","extractTransitionInterface(input)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Functions Extract a deterministic transition slab for one exact 2:1 grid pair. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"bb3c02592b6a681c6b0055f68f77cb5d6f6848bc428ed63dc1d2311721e0b6cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/transitions/TransitionValidation.md::0000","path":"engine/reference/render/morphfield/systems/transitions/TransitionValidation.md","title":"render/morphfield/systems/transitions/TransitionValidation.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/transitions/TransitionValidation.js","updated":"","headings":["render/morphfield/systems/transitions/TransitionValidation.js","Functions","validateTransitionInterface(mesh, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"31a227d70fc757110ff759fae87162cb446396f67cd5dab79cba23636fd8ca33"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/transitions/index.md::0000","path":"engine/reference/render/morphfield/systems/transitions/index.md","title":"render/morphfield/systems/transitions/index.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/transitions/index.js","updated":"","headings":["render/morphfield/systems/transitions/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f7bb777cef6c37350ca4ca0c10032fd7892e49fece55e7d058bf6b5424b3b905"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/morphfield/systems/transitions/selfTest.md::0000","path":"engine/reference/render/morphfield/systems/transitions/selfTest.md","title":"render/morphfield/systems/transitions/selfTest.js","description":"","kind":"reference","source":"engine/render/morphfield/systems/transitions/selfTest.js","updated":"","headings":["render/morphfield/systems/transitions/selfTest.js","Functions","runMorphFieldTransitionSelfTests()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/CustomParticleEffect.md::0000","path":"engine/reference/render/particles/CustomParticleEffect.md","title":"render/particles/CustomParticleEffect.js","description":"","kind":"reference","source":"engine/render/particles/CustomParticleEffect.js","updated":"","headings":["render/particles/CustomParticleEffect.js","Functions","createCustomEffectId()","createCustomEffectCloneId(effectId)","createImportedEffectId(effectId)","generateVisualShader(effect, options = {})","generateCollisionShader(effect)","validateEffect(effect)","async compileEffect(device, effect)","createEffect(options = {})","cloneEffect(effect, newId)","getPresets()","getPreset(id)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Generate visual raymarching shader from effect Generate collision compute shader from effect Validate effect WGSL code Returns: } Compile effect shaders on device (validates WGSL syntax) Create a new custom effect from template Clone an existing effect Get all built in presets as array Get preset by ID Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b1b5355fcd96edb3b51200482b3666939a4473baf07dc7393679d8646858b76e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/CustomParticleEffectIntegration.md::0000","path":"engine/reference/render/particles/CustomParticleEffectIntegration.md","title":"render/particles/CustomParticleEffectIntegration.js","description":"","kind":"reference","source":"engine/render/particles/CustomParticleEffectIntegration.js","updated":"","headings":["render/particles/CustomParticleEffectIntegration.js","Functions","async initCustomParticleEffects(device)","async getCompiledEffect(device, effectId)","getCollisionSDFSystem()","applyEffectToEmitter(emitterComponent, effectId, params = null)","getEffectForRendering(effectId)","createEffectParamsData(emitter)","getParticleSDF(effectId)","isCustomEffectsInitialized()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Initialize the custom particle effect system Call this during engine initialization Get compiled effect shaders for an effect ID Get the collision SDF system Apply a custom effect to a particle emitter component Get effect data for rendering Create effect parameters buffer data for GPU Returns a reusable Float32Array DO NOT modify after passing to GPU Get the effective SDF for a particle (for collision queries) Returns a function that evaluates the SDF at a local position Check if custom effects system is initialized <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device","contentHash":"22377d2ae3c2fb2588f712b51025afca18af693173ce402b54f1926bf6481586"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/CustomParticleEffectIntegration.md::0001","path":"engine/reference/render/particles/CustomParticleEffectIntegration.md","title":"render/particles/CustomParticleEffectIntegration.js","description":"","kind":"reference","source":"engine/render/particles/CustomParticleEffectIntegration.js","updated":"","headings":["render/particles/CustomParticleEffectIntegration.js","Functions","async initCustomParticleEffects(device)","async getCompiledEffect(device, effectId)","getCollisionSDFSystem()","applyEffectToEmitter(emitterComponent, effectId, params = null)","getEffectForRendering(effectId)","createEffectParamsData(emitter)","getParticleSDF(effectId)","isCustomEffectsInitialized()","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ded4252e2e83720b5095260c1f591c572a59f783f8aec3cb50f4a753f8daddfc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleAgeRenderer.md::0000","path":"engine/reference/render/particles/ParticleAgeRenderer.md","title":"render/particles/ParticleAgeRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleAgeRenderer.js","updated":"","headings":["render/particles/ParticleAgeRenderer.js","Functions","async createParticleAgeRenderer(options)","createParticleAgeDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)","setParticleAgeParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleAlbedoRenderer.md::0000","path":"engine/reference/render/particles/ParticleAlbedoRenderer.md","title":"render/particles/ParticleAlbedoRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleAlbedoRenderer.js","updated":"","headings":["render/particles/ParticleAlbedoRenderer.js","Functions","async createParticleAlbedoRenderer(options)","createParticleAlbedoDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)","setParticleAlbedoParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create particle albedo pass renderer Create data bind group for albedo pass Update albedo pass parameters <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"58947bf5f4289a54243bab5b4dda99ca5dadc9122cbd8d1722b31bb16fc31251"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleBeamRenderer.md::0000","path":"engine/reference/render/particles/ParticleBeamRenderer.md","title":"render/particles/ParticleBeamRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleBeamRenderer.js","updated":"","headings":["render/particles/ParticleBeamRenderer.js","Functions","async createParticleBeamRenderer(device, options = {})","bindBeamParticleData(renderer, world)","renderBeamParticles(pass, renderer, options = {})","setBeamParams(renderer, params = {})","destroyParticleBeamRenderer(renderer)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 }); Functions Create a particle beam renderer. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — { format, mode, width, taper, jitterAmount } Bind particle data from a particle world. Render beam particles. Parameters: (GPURenderPassEncoder) — No description in source JSDoc. (Object) — No description in source JSDoc. (Object) — { viewProj, viewRight, viewUp, time, segmentCount } Update beam parameters. Destroy the beam renderer. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks","contentHash":"93bf4ffd666fd37f77db171966002474eeff6384805f5d88f46a79dd9c96c876"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleBeamRenderer.md::0001","path":"engine/reference/render/particles/ParticleBeamRenderer.md","title":"render/particles/ParticleBeamRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleBeamRenderer.js","updated":"","headings":["render/particles/ParticleBeamRenderer.js","Functions","async createParticleBeamRenderer(device, options = {})","bindBeamParticleData(renderer, world)","renderBeamParticles(pass, renderer, options = {})","setBeamParams(renderer, params = {})","destroyParticleBeamRenderer(renderer)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"457e8d96bd267302938589feb1c5cb12a462483844113b501fdebc5da4979cdc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleBillboardRenderer.md::0000","path":"engine/reference/render/particles/ParticleBillboardRenderer.md","title":"render/particles/ParticleBillboardRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleBillboardRenderer.js","updated":"","headings":["render/particles/ParticleBillboardRenderer.js","Functions","async createParticlePointRenderer(options)","async createParticleBillboardRenderer(options)","createParticleBillboardDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer, uvBuffer, albedoTextureView, albedoSampler)","setParticleBillboardParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0, rotationRate = 0, useColorGradient = false, stretchFactor = 0, facingMode = 0, })","setParticleBillboardDepth(renderer, depthTextureView, aliveListBuffer)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Creates a particle point renderer (spheres instead of flat billboards). This renders particles as actual points with spherical falloff. Creates a particle billboard renderer. This is a pure rendering module it does not own particle simulation. Creates a data bind group for a specific particle world. Call this once per particle world you want to render. Parameters: (Object) — The particle billboard renderer (GPUBuffer) — The particle position buffer (xyz=pos, w=age) (GPUBuffer) — The per particle metadata buffer (rgb=color, w=size+shape) (GPUBuffer) — The particle velocity buffer (xyz=vel, w=lifetime) Updates particle rendering parameters including quality settings. Parameters: (Object) — Particle renderer (Object) — No description in source JSDoc. (number) — Default particle size (fallback) (number) — Quality scalar 0.0 1.0 (1.0 = full quality) (number) — Distance LOD aggressiveness (1.0 = normal) (number) — Max particles to render (0 = no limit) 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. Parameters: (Object) — The billboard renderer (GPUTextureView) — Scene depth texture view (GPUBuffer) — Alive list buffer from IndirectDispatch (optional) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by","contentHash":"54107c90d738ffbbb0645522ad3f2d19ab23e27310c7f56fe45baff7af1732f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleBillboardRenderer.md::0001","path":"engine/reference/render/particles/ParticleBillboardRenderer.md","title":"render/particles/ParticleBillboardRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleBillboardRenderer.js","updated":"","headings":["render/particles/ParticleBillboardRenderer.js","Functions","async createParticlePointRenderer(options)","async createParticleBillboardRenderer(options)","createParticleBillboardDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer, uvBuffer, albedoTextureView, albedoSampler)","setParticleBillboardParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0, rotationRate = 0, useColorGradient = false, stretchFactor = 0, facingMode = 0, })","setParticleBillboardDepth(renderer, depthTextureView, aliveListBuffer)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2d3b6702d9ad574de8fd4a084b25b48c9470269b071722da7c78807791788cf2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleBlackbodyRenderer.md::0000","path":"engine/reference/render/particles/ParticleBlackbodyRenderer.md","title":"render/particles/ParticleBlackbodyRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleBlackbodyRenderer.js","updated":"","headings":["render/particles/ParticleBlackbodyRenderer.js","Functions","createBlackbodySystem(device, options = {})","createBlackbodyBindGroupLayout(device)","getBlackbodyBindGroup(system, layout)","setBlackbodyEmission(system, strength)","destroyBlackbodySystem(system)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create the blackbody rendering system with LUT texture. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. Create a bind group layout for blackbody resources. Typically bound as an additional group in particle render pipelines. Create the bind group for blackbody resources. Update emission strength at runtime. Destroy. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all","contentHash":"74c3f1eb308f8ade995354749968a354f5667340543128afe15940ad8a852ce3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleBlackbodyRenderer.md::0001","path":"engine/reference/render/particles/ParticleBlackbodyRenderer.md","title":"render/particles/ParticleBlackbodyRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleBlackbodyRenderer.js","updated":"","headings":["render/particles/ParticleBlackbodyRenderer.js","Functions","createBlackbodySystem(device, options = {})","createBlackbodyBindGroupLayout(device)","getBlackbodyBindGroup(system, layout)","setBlackbodyEmission(system, strength)","destroyBlackbodySystem(system)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"5221ccde0195ad4fdb5102856bc628a9a5c4d4c753509863bad61231520fd691"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleBondRenderer.md::0000","path":"engine/reference/render/particles/ParticleBondRenderer.md","title":"render/particles/ParticleBondRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleBondRenderer.js","updated":"","headings":["render/particles/ParticleBondRenderer.js","Functions","createBondRenderer(device, format)","initBondRendererBindGroups(renderer, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer)","uploadBonds(renderer, device, bondData, bondCount)","renderBonds(pass, renderer, viewProj, cameraPos, viewRight, viewUp)","destroyBondRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the bond renderer. Initialize bind groups. Upload bond data from CPU. Parameters: (Uint32Array) — Flat array of [particleA, particleB, bondType, bondOrder, ...] (number) — No description in source JSDoc. Render bonds in the given render pass. Destroy. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs","contentHash":"b0ba620922f9ee1e4215f39f095db96c599b8fdc7421c180c318ef4657e31a10"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleBondRenderer.md::0001","path":"engine/reference/render/particles/ParticleBondRenderer.md","title":"render/particles/ParticleBondRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleBondRenderer.js","updated":"","headings":["render/particles/ParticleBondRenderer.js","Functions","createBondRenderer(device, format)","initBondRendererBindGroups(renderer, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer)","uploadBonds(renderer, device, bondData, bondCount)","renderBonds(pass, renderer, viewProj, cameraPos, viewRight, viewUp)","destroyBondRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d70753a4e77c56e6c5fc168e6dc07afb8bdfd1907b7f40c17de870211825fd67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleCollisionSDF.md::0000","path":"engine/reference/render/particles/ParticleCollisionSDF.md","title":"render/particles/ParticleCollisionSDF.js","description":"","kind":"reference","source":"engine/render/particles/ParticleCollisionSDF.js","updated":"","headings":["render/particles/ParticleCollisionSDF.js","Classes","class ParticleCollisionSDFSystem","Functions","registerEffectForCollision(effectId)","getEffectIndex(effectId)","getEffectByIndex(index)","generateMultiEffectCollisionShader(registeredEffects)","createCollisionPipeline(device, options = {})","createParticleCollisionSDFSystem(device)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Initialize/rebuild the collision pipeline Mark pipeline as needing rebuild (call when effects change) Register effect for collision Create bind group for particle buffer Dispatch collision computation Destroy resources Functions Register an effect for collision (assigns an index) Get effect index (0 if not registered) Get effect by index Generate the multi effect collision shader This shader supports switching between different SDFs based on effectId Create collision compute pipeline with custom SDFs Create a particle collision SDF system <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native","contentHash":"33223e28a8b8d8b05542f5c8b56b9b1158026912587306efc26ce46a634b63fd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleCollisionSDF.md::0001","path":"engine/reference/render/particles/ParticleCollisionSDF.md","title":"render/particles/ParticleCollisionSDF.js","description":"","kind":"reference","source":"engine/render/particles/ParticleCollisionSDF.js","updated":"","headings":["render/particles/ParticleCollisionSDF.js","Classes","class ParticleCollisionSDFSystem","Functions","registerEffectForCollision(effectId)","getEffectIndex(effectId)","getEffectByIndex(index)","generateMultiEffectCollisionShader(registeredEffects)","createCollisionPipeline(device, options = {})","createParticleCollisionSDFSystem(device)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"cdcbf9618c7c875d847b2220727b289bddf0135168e5852f16f357a16d521382"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleDecalRenderer.md::0000","path":"engine/reference/render/particles/ParticleDecalRenderer.md","title":"render/particles/ParticleDecalRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleDecalRenderer.js","updated":"","headings":["render/particles/ParticleDecalRenderer.js","Functions","createDecalRenderer(device, format)","uploadDecals(renderer, decals)","renderDecals(pass, renderer, frameData)","destroyDecalRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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] Functions Create a decal rendering system Parameters: (GPUDevice) — No description in source JSDoc. (string) — Render target format Upload active decals from the CPU side spawner pool to GPU Parameters: (Object) — No description in source JSDoc. (Array) — From getActiveDecals(spawner) Render decals into the current render pass Parameters: (GPURenderPassEncoder) — No description in source JSDoc. (Object) — No description in source JSDoc. (Float32Array) — Frame uniforms (viewProj + viewRight + viewUp) Destroy decal renderer resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports","contentHash":"9587be6db23a829ce5fc156fc601bc5c311746e68d152bf70e23d3ea0007d3b3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleDecalRenderer.md::0001","path":"engine/reference/render/particles/ParticleDecalRenderer.md","title":"render/particles/ParticleDecalRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleDecalRenderer.js","updated":"","headings":["render/particles/ParticleDecalRenderer.js","Functions","createDecalRenderer(device, format)","uploadDecals(renderer, decals)","renderDecals(pass, renderer, frameData)","destroyDecalRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"197975b2d53c94073bab2c9f5ce9151c5855406be3ccc1cddeb03ab2fc52947b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleDepthRenderer.md::0000","path":"engine/reference/render/particles/ParticleDepthRenderer.md","title":"render/particles/ParticleDepthRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleDepthRenderer.js","updated":"","headings":["render/particles/ParticleDepthRenderer.js","Functions","async createParticleDepthRenderer(options)","createParticleDepthDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)","setParticleDepthParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create particle depth pass renderer Create data bind group for depth pass Update depth pass parameters <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1edeead1506425e1a63a27b96c973e47f0c4551b4bf61aafcb371eec49dbeb4b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleDistortionRenderer.md::0000","path":"engine/reference/render/particles/ParticleDistortionRenderer.md","title":"render/particles/ParticleDistortionRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleDistortionRenderer.js","updated":"","headings":["render/particles/ParticleDistortionRenderer.js","Functions","createParticleDistortionRenderer(device, sceneFormat, width, height)","initDistortionBindGroups(renderer, particleWorld, sceneColorView)","setDistortionParams(renderer, params = {})","renderDistortionPass(encoder, renderer, instanceCount, frameData)","compositeDistortion(pass, renderer)","resizeDistortionRenderer(renderer, width, height)","destroyDistortionRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create the particle distortion rendering system Parameters: (GPUDevice) — No description in source JSDoc. (string) — Scene color format (e.g. 'bgra8unorm') (number) — Render target width (number) — Render target height Create bind groups for the distortion pass (call once when particle buffers are ready) Update distortion params Parameters: (Object) — No description in source JSDoc. (Object) — { strength, temperatureThreshold, falloffPower } Render distortion pass: accumulate UV offsets from hot particles Parameters: (GPUCommandEncoder) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — Number of particles to render (Float32Array) — Frame uniforms data (viewProj, viewRight, viewUp, cameraPos) Composite distortion onto scene (fullscreen triangle) Parameters: (GPURenderPassEncoder) — Active render pass targeting the scene framebuffer (Object) — No description in source JSDoc. Resize distortion texture when viewport changes Destroy distortion renderer resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss","contentHash":"e846c075ec47efb1c3bc8a7a5e23907289a47b3e324e9db4b6f78095bbac980e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleDistortionRenderer.md::0001","path":"engine/reference/render/particles/ParticleDistortionRenderer.md","title":"render/particles/ParticleDistortionRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleDistortionRenderer.js","updated":"","headings":["render/particles/ParticleDistortionRenderer.js","Functions","createParticleDistortionRenderer(device, sceneFormat, width, height)","initDistortionBindGroups(renderer, particleWorld, sceneColorView)","setDistortionParams(renderer, params = {})","renderDistortionPass(encoder, renderer, instanceCount, frameData)","compositeDistortion(pass, renderer)","resizeDistortionRenderer(renderer, width, height)","destroyDistortionRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"edf052d395bed671efb5a2af14427106bbe0b8b26a6e840bc4899b5e668eb322"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleEffectRegistry.md::0000","path":"engine/reference/render/particles/ParticleEffectRegistry.md","title":"render/particles/ParticleEffectRegistry.js","description":"","kind":"reference","source":"engine/render/particles/ParticleEffectRegistry.js","updated":"","headings":["render/particles/ParticleEffectRegistry.js","Classes","class ParticleEffectRegistry","Functions","particleEffectCurrentId(effectId)","prepareParticleEffectRecord(record)","getParticleEffectRegistry()","async initParticleEffectRegistry()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Initialize the registry (opens IndexedDB) Load all effects from IndexedDB to cache Get all effects (built in + custom) Get built in presets only Get custom (user created) effects only Get effect by ID Check if effect exists Save effect to registry Save to IndexedDB Delete from IndexedDB Create a new effect from scratch Clone an existing effect Export effect as JSON Export all custom effects as JSON Import effect from JSON Reset effect to built in default Clear all custom effects Subscribe to registry changes Notify listeners of changes Search effects by name or description Get effects by category (based on name/description keywords) Functions Validate one exact v1/v2 record; no lossy upcasts are attempted. Get the global registry instance Initialize the global registry Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device","contentHash":"fe4a89cc6d57d17308d0a49a166882d3f8ce88c36fd7deffe55ac7ea43b8c402"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleEffectRegistry.md::0001","path":"engine/reference/render/particles/ParticleEffectRegistry.md","title":"render/particles/ParticleEffectRegistry.js","description":"","kind":"reference","source":"engine/render/particles/ParticleEffectRegistry.js","updated":"","headings":["render/particles/ParticleEffectRegistry.js","Classes","class ParticleEffectRegistry","Functions","particleEffectCurrentId(effectId)","prepareParticleEffectRecord(record)","getParticleEffectRegistry()","async initParticleEffectRegistry()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0bacce3c684a704dd6ea16baf26f1c43d7e48645791157e6889022bab4a8b5c2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleEmissiveRenderer.md::0000","path":"engine/reference/render/particles/ParticleEmissiveRenderer.md","title":"render/particles/ParticleEmissiveRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleEmissiveRenderer.js","updated":"","headings":["render/particles/ParticleEmissiveRenderer.js","Functions","async createParticleEmissiveRenderer(options)","createParticleEmissiveDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)","setParticleEmissiveParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleFieldRenderer.md::0000","path":"engine/reference/render/particles/ParticleFieldRenderer.md","title":"render/particles/ParticleFieldRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleFieldRenderer.js","updated":"","headings":["render/particles/ParticleFieldRenderer.js","Functions","createFieldRenderer(device, format)","initFieldRendererBindGroups(renderer, device)","updateFieldProbes(renderer, device, chargedParticles, gridConfig)","renderFieldArrows(pass, renderer, viewProj, cameraPos, viewRight, viewUp)","destroyFieldRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the field renderer. Initialize bind groups. Generate field probes from charged particle positions (CPU side). Creates a 3D grid of probe points and computes the E field at each. Parameters: (Object) — { min, max, resolution } Render field arrows in the given render pass. Destroy. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device","contentHash":"30e337592a1ab2b78867ab3fea549a3148d4e0f36bdb296729976788eb46807b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleFieldRenderer.md::0001","path":"engine/reference/render/particles/ParticleFieldRenderer.md","title":"render/particles/ParticleFieldRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleFieldRenderer.js","updated":"","headings":["render/particles/ParticleFieldRenderer.js","Functions","createFieldRenderer(device, format)","initFieldRendererBindGroups(renderer, device)","updateFieldProbes(renderer, device, chargedParticles, gridConfig)","renderFieldArrows(pass, renderer, viewProj, cameraPos, viewRight, viewUp)","destroyFieldRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6cdb63a16c9e031f6a9046ad5f4f8586f1c23a4f644f503f153338cf49d6d9a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleHalfResComposite.md::0000","path":"engine/reference/render/particles/ParticleHalfResComposite.md","title":"render/particles/ParticleHalfResComposite.js","description":"","kind":"reference","source":"engine/render/particles/ParticleHalfResComposite.js","updated":"","headings":["render/particles/ParticleHalfResComposite.js","Functions","createHalfResCompositeSystem(device, format, fullWidth, fullHeight)","resizeHalfResTargets(system, fullWidth, fullHeight)","getHalfResPassDescriptor(system)","executeComposite(system, encoder, mainTextureView)","destroyHalfResCompositeSystem(system)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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.","contentHash":"e5d58d03f0d305e11488632b82f7e261abf30554b3285c2f6c7765ecbf7209f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleHalfResComposite.md::0001","path":"engine/reference/render/particles/ParticleHalfResComposite.md","title":"render/particles/ParticleHalfResComposite.js","description":"","kind":"reference","source":"engine/render/particles/ParticleHalfResComposite.js","updated":"","headings":["render/particles/ParticleHalfResComposite.js","Functions","createHalfResCompositeSystem(device, format, fullWidth, fullHeight)","resizeHalfResTargets(system, fullWidth, fullHeight)","getHalfResPassDescriptor(system)","executeComposite(system, encoder, mainTextureView)","destroyHalfResCompositeSystem(system)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":3,"text":"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\" Functions Create the half resolution particle rendering + composite system. Parameters: (GPUDevice) — No description in source JSDoc. (GPUTextureFormat) — Main framebuffer format (e.g. 'bgra8unorm') (number) — Full resolution width (number) — Full resolution height Resize half res render targets. Call when the window/canvas resizes. 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. Execute the composite pass: upsample half res particles onto main framebuffer. Parameters: (Object) — Half res composite system (GPUCommandEncoder) — Command encoder (GPUTextureView) — Main framebuffer texture view Destroy half res composite system resources. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas:","contentHash":"ce3b45ec15d2843bb33980b2b3b65dc099523b6b4f7c6cacb6792eb37deb5fb2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleHalfResComposite.md::0002","path":"engine/reference/render/particles/ParticleHalfResComposite.md","title":"render/particles/ParticleHalfResComposite.js","description":"","kind":"reference","source":"engine/render/particles/ParticleHalfResComposite.js","updated":"","headings":["render/particles/ParticleHalfResComposite.js","Functions","createHalfResCompositeSystem(device, format, fullWidth, fullHeight)","resizeHalfResTargets(system, fullWidth, fullHeight)","getHalfResPassDescriptor(system)","executeComposite(system, encoder, mainTextureView)","destroyHalfResCompositeSystem(system)","Notes & Examples","Shared GPU device"],"chunkIndex":2,"chunkCount":3,"text":"requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"10289e2bceb9d60440123d849ed983aebe8e212830af040610d8775fece5a974"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleLightingRenderer.md::0000","path":"engine/reference/render/particles/ParticleLightingRenderer.md","title":"render/particles/ParticleLightingRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleLightingRenderer.js","updated":"","headings":["render/particles/ParticleLightingRenderer.js","Functions","async createParticleLightingRenderer(options)","createParticleLightingDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)","setParticleLightingParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create particle lighting pass renderer Create data bind group for lighting pass Update lighting pass parameters <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"72f2089d01de5a0127f0c16c1ce4b163432de52d50c77b18302b1c216d320881"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleMeshRenderer.md::0000","path":"engine/reference/render/particles/ParticleMeshRenderer.md","title":"render/particles/ParticleMeshRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleMeshRenderer.js","updated":"","headings":["render/particles/ParticleMeshRenderer.js","Functions","async createParticleMeshRenderer(device, options = {})","setParticleMesh(renderer, mesh)","bindParticleData(renderer, world)","renderMeshParticles(pass, renderer, options = {})","setMeshParticleParams(renderer, params = {})","initShadowPipeline(renderer)","flushShadowDepth(pass, renderer, lightViewProj, instanceCount)","destroyParticleMeshRenderer(renderer)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 }); Functions Create a particle mesh renderer. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. (string) — Canvas format (e.g. 'bgra8unorm') (Object) — { vertexBuffer, indexBuffer, indexCount, indexFormat } (boolean) — true to use compact u32 voxel vertex format (number) — MESH ALIGN VELOCITY, MESH ALIGN BILLBOARD, MESH ALIGN WORLD Set the mesh to render per particle. Parameters: (Object) — No description in source JSDoc. (Object) — { vertexBuffer, indexBuffer, indexCount, indexFormat? } Bind particle data buffers from a particle world. Parameters: (Object) — No description in source JSDoc. (Object) — Particle world Render mesh particles into a render pass. Parameters: (GPURenderPassEncoder) — No description in source JSDoc. (Object) — No description in source JSDoc. (Object) — { viewProj, cameraPos, time, instanceCount } Update mesh particle renderer params. Lazily initialize the shadow depth pipeline for particle mesh shadow casting. Call once before the first flushShadowDepth. Requires dataBindGroup","contentHash":"186855d87fd6cb4862fddb834c4d46b1e49b56b8ad968de0efe3241725907a96"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleMeshRenderer.md::0001","path":"engine/reference/render/particles/ParticleMeshRenderer.md","title":"render/particles/ParticleMeshRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleMeshRenderer.js","updated":"","headings":["render/particles/ParticleMeshRenderer.js","Functions","async createParticleMeshRenderer(device, options = {})","setParticleMesh(renderer, mesh)","bindParticleData(renderer, world)","renderMeshParticles(pass, renderer, options = {})","setMeshParticleParams(renderer, params = {})","initShadowPipeline(renderer)","flushShadowDepth(pass, renderer, lightViewProj, instanceCount)","destroyParticleMeshRenderer(renderer)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"params. Lazily initialize the shadow depth pipeline for particle mesh shadow casting. Call once before the first flushShadowDepth. Requires dataBindGroup to be set. Parameters: (Object) — No description in source JSDoc. Render mesh particles into a shadow depth pass (depth only, no color). Compatible with ShadowMapPass.renderShadowDepth(). Parameters: (GPURenderPassEncoder) — Depth only render pass (Object) — Particle mesh renderer (Float32Array) — 4x4 light view projection matrix (16 floats) (number) — Number of particle instances to draw Destroy the renderer. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"25e6c5ba9da5f93fb2cee3a47ffbdcf84efd0ce0891006df360f7d0071433af9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleNormalsRenderer.md::0000","path":"engine/reference/render/particles/ParticleNormalsRenderer.md","title":"render/particles/ParticleNormalsRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleNormalsRenderer.js","updated":"","headings":["render/particles/ParticleNormalsRenderer.js","Functions","async createParticleNormalsRenderer(options)","createParticleNormalsDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)","setParticleNormalsParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create particle normals pass renderer Create data bind group for normals pass Update normals pass parameters <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"32ef1c11423b46a21fbf11cc92f0ef8bc4d08a1d96f686648683112eea06ff6c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleOrbitalRenderer.md::0000","path":"engine/reference/render/particles/ParticleOrbitalRenderer.md","title":"render/particles/ParticleOrbitalRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleOrbitalRenderer.js","updated":"","headings":["render/particles/ParticleOrbitalRenderer.js","Functions","createOrbitalRenderer(device, format)","initOrbitalBindGroups(renderer, device, positionBuffer, velocityBuffer, elementBuffer, lutBuffer, colorLutBuffer)","renderOrbitals(pass, renderer, viewProj, cameraPos, viewRight, viewUp, instanceCount)","destroyOrbitalRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 }); Functions Create the orbital renderer. Initialize bind groups for orbital rendering. Render orbital clouds in the given render pass. Destroy. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"5487df6d3c214a02da92ff847ca9819f8dc0b6f663c22934b25a33b5334d97e0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticlePhaseVFX.md::0000","path":"engine/reference/render/particles/ParticlePhaseVFX.md","title":"render/particles/ParticlePhaseVFX.js","description":"","kind":"reference","source":"engine/render/particles/ParticlePhaseVFX.js","updated":"","headings":["render/particles/ParticlePhaseVFX.js","Functions","createPhaseVFXConfig(overrides = {})","getPhaseVFXShader()","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Create a phase VFX configuration object. Parameters: (Object) — No description in source JSDoc. Get the WGSL snippet for phase VFX. Include this in particle fragment shaders to enable phase transition effects. Returns: WGSL code Constants — Phase VFX configuration. These values are passed to shaders via existing particle uniform buffers. Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition","contentHash":"5745006beaffa50443632962e4433b044de4fcf2f68fd90b051e769e13b153fd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticlePhaseVFX.md::0001","path":"engine/reference/render/particles/ParticlePhaseVFX.md","title":"render/particles/ParticlePhaseVFX.js","description":"","kind":"reference","source":"engine/render/particles/ParticlePhaseVFX.js","updated":"","headings":["render/particles/ParticlePhaseVFX.js","Functions","createPhaseVFXConfig(overrides = {})","getPhaseVFXShader()","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b20ecba7256072c1bf2a53a50ff9da18048c44075dca46259fe003d2f7be5a33"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleQualityManager.md::0000","path":"engine/reference/render/particles/ParticleQualityManager.md","title":"render/particles/ParticleQualityManager.js","description":"","kind":"reference","source":"engine/render/particles/ParticleQualityManager.js","updated":"","headings":["render/particles/ParticleQualityManager.js","Functions","createParticleQualityManager(options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a particle quality manager Parameters: (Object) — No description in source JSDoc. (number) — Target render FPS to maintain (default: 60) (number) — Target sim FPS to maintain (default: 60) (number) — FPS threshold for emergency culling (default: 20) (number) — Sim FPS threshold for throttling (default: 50) (number) — Maximum particle count (for cullThreshold) (Function) — Callback when quality changes significantly (Function) — Callback when sim rate drops below threshold Constants — Default quality presets <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"063d1b249456001f325c580b2f77a1bbe85fad7344a60ad33155f69c71749346"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleSPHSurfaceRenderer.md::0000","path":"engine/reference/render/particles/ParticleSPHSurfaceRenderer.md","title":"render/particles/ParticleSPHSurfaceRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleSPHSurfaceRenderer.js","updated":"","headings":["render/particles/ParticleSPHSurfaceRenderer.js","Functions","createSPHSurfaceRenderer(device, format, width, height)","initSPHSurfaceBindGroups(renderer, device, positionBuffer, velocityBuffer, thermalBuffer)","initSPHCompositeBindGroup(renderer, device, sceneColorView)","setSPHSurfaceTint(renderer, r, g, b)","renderSPHSurface(renderer, encoder, options)","compositeSPHSurface(pass, renderer)","destroySPHSurfaceRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 }); Functions Create the SPH surface renderer. Full SSFR pipeline: depth → bilateral blur (H+V) → thickness → normals + composite. Initialize bind groups for all SSFR passes. Create composite bind group (needs scene color texture view). Reads smoothed depth (blurTextureB) + thickness for full SSFR composite. Set fluid tint color (e.g., from element). 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) Parameters: (GPUCommandEncoder) — No description in source JSDoc. (Object) — { particleCount, viewProj, view, proj, cameraPos, viewRight, viewUp } Composite SPH surface onto the scene in a render pass. Destroy. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one","contentHash":"7f5cbb999c04909d82cea9cff92469172e52a900bd1c1190ba555f9c12583698"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleSPHSurfaceRenderer.md::0001","path":"engine/reference/render/particles/ParticleSPHSurfaceRenderer.md","title":"render/particles/ParticleSPHSurfaceRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleSPHSurfaceRenderer.js","updated":"","headings":["render/particles/ParticleSPHSurfaceRenderer.js","Functions","createSPHSurfaceRenderer(device, format, width, height)","initSPHSurfaceBindGroups(renderer, device, positionBuffer, velocityBuffer, thermalBuffer)","initSPHCompositeBindGroup(renderer, device, sceneColorView)","setSPHSurfaceTint(renderer, r, g, b)","renderSPHSurface(renderer, encoder, options)","compositeSPHSurface(pass, renderer)","destroySPHSurfaceRenderer(renderer)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ce32ffffbbda0824e94f2e10bae8bbccdd8e5858e977ce5de006c7261b9861a6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleSdfRenderer.md::0000","path":"engine/reference/render/particles/ParticleSdfRenderer.md","title":"render/particles/ParticleSdfRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleSdfRenderer.js","updated":"","headings":["render/particles/ParticleSdfRenderer.js","Functions","async createParticleSdfRenderer(options)","createParticleSdfDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer, thermalBuffer, sphDensityBuffer, classBuffer)","createParticleSdfDepthBindGroup(renderer, depthTextureView)","createParticleSdfLutSixWayBindGroup(renderer, colorGradientView, colorGradientSampler, lifetimeCurvesView, lifetimeCurvesSampler, sixWaySystem)","setParticleSdfParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create volumetric SDF particle renderer 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. 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. 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. Parameters: (Object) — SDF renderer (GPUTextureView) — Color gradient RGBA8 texture view (GPUSampler) — Linear sampler for gradient (GPUTextureView) — Lifetime curves RGBA32float texture view (GPUSampler) — Sampler for curves (non filtering for rgba32float) (Object) — Six way lighting system from ParticleSixWayLighting.js Update SDF particle rendering parameters Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper","contentHash":"ec5b3e437377b43c31255f8a921b085e788b0f201d1c582fc3f8709793785a23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleSdfRenderer.md::0001","path":"engine/reference/render/particles/ParticleSdfRenderer.md","title":"render/particles/ParticleSdfRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleSdfRenderer.js","updated":"","headings":["render/particles/ParticleSdfRenderer.js","Functions","async createParticleSdfRenderer(options)","createParticleSdfDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer, thermalBuffer, sphDensityBuffer, classBuffer)","createParticleSdfDepthBindGroup(renderer, depthTextureView)","createParticleSdfLutSixWayBindGroup(renderer, colorGradientView, colorGradientSampler, lifetimeCurvesView, lifetimeCurvesSampler, sixWaySystem)","setParticleSdfParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":", its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"8242350fe6beba0b04c02afc34ce2c3430c19b99569312d4fbf93dbbbbff63d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleShadowCaster.md::0000","path":"engine/reference/render/particles/ParticleShadowCaster.md","title":"render/particles/ParticleShadowCaster.js","description":"","kind":"reference","source":"engine/render/particles/ParticleShadowCaster.js","updated":"","headings":["render/particles/ParticleShadowCaster.js","Functions","async createParticleShadowCaster(device)","registerCaster(caster, id, flushFn)","unregisterCaster(caster, id)","bindShadowParticleData(caster, world)","flushBillboardShadowDepth(pass, caster, lightViewProj, sunDir, instanceCount)","flushAllParticleShadows(pass, caster, lightViewProj, sunDir, billboardInstanceCount)","async createRopeShadowCaster(device, ropeRenderer)","destroyParticleShadowCaster(caster)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleSixWayLighting.md::0000","path":"engine/reference/render/particles/ParticleSixWayLighting.md","title":"render/particles/ParticleSixWayLighting.js","description":"","kind":"reference","source":"engine/render/particles/ParticleSixWayLighting.js","updated":"","headings":["render/particles/ParticleSixWayLighting.js","Functions","createSixWayLightingSystem(device, config = {})","generateProceduralSixWay(system, device, preset = 'smoke')","async loadSixWayTextures(system, device, images)","setSixWayLightDirection(system, lightDir, intensity = 1.0)","destroySixWayLightingSystem(system)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create a six way lighting system. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — { resolution } Generate procedural six way lightmaps. Parameters: (Object) — No description in source JSDoc. (GPUDevice) — No description in source JSDoc. (string) — 'smoke', 'fog', 'cloud', 'fire' Load six way textures from external image data. Parameters: (Object) — No description in source JSDoc. (GPUDevice) — No description in source JSDoc. (Object) — { right, left, top, bottom, front, back } ImageBitmap or source Update the dominant light direction. Parameters: (Object) — No description in source JSDoc. (number[]) — Normalized light direction [x, y, z] (number) — Light intensity multiplier Destroy the system. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by","contentHash":"18fc784070deeb399a7ade97dbb383cc6d65087fb6aecbfdf2bb5df652274a5a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleSixWayLighting.md::0001","path":"engine/reference/render/particles/ParticleSixWayLighting.md","title":"render/particles/ParticleSixWayLighting.js","description":"","kind":"reference","source":"engine/render/particles/ParticleSixWayLighting.js","updated":"","headings":["render/particles/ParticleSixWayLighting.js","Functions","createSixWayLightingSystem(device, config = {})","generateProceduralSixWay(system, device, preset = 'smoke')","async loadSixWayTextures(system, device, images)","setSixWayLightDirection(system, lightDir, intensity = 1.0)","destroySixWayLightingSystem(system)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"multiplier Destroy the system. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ba8fc3a2d354617dabfe1ffff1f05c62154112b4142c249c91b90cbcedfcd4fb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleSizeRenderer.md::0000","path":"engine/reference/render/particles/ParticleSizeRenderer.md","title":"render/particles/ParticleSizeRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleSizeRenderer.js","updated":"","headings":["render/particles/ParticleSizeRenderer.js","Functions","async createParticleSizeRenderer(options)","createParticleSizeDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)","setParticleSizeParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleThermalRenderer.md::0000","path":"engine/reference/render/particles/ParticleThermalRenderer.md","title":"render/particles/ParticleThermalRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleThermalRenderer.js","updated":"","headings":["render/particles/ParticleThermalRenderer.js","Functions","async createParticleThermalRenderer(options)","createParticleThermalDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer, thermalBuffer)","setParticleThermalParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"72bbc9417f431ed75a1b452d19a0281a9f2f59be35e38c3226a59f4273515e27"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleTrailHistory.md::0000","path":"engine/reference/render/particles/ParticleTrailHistory.md","title":"render/particles/ParticleTrailHistory.js","description":"","kind":"reference","source":"engine/render/particles/ParticleTrailHistory.js","updated":"","headings":["render/particles/ParticleTrailHistory.js","Functions","createTrailHistorySystem(device, maxParticles, config = {})","initTrailHistoryBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer)","updateTrailHistories(system, device, particleCount, dt = 1/60)","renderTrailHistories(pass, system, frameBindGroup, particleCount)","destroyTrailHistorySystem(system)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create a per particle trail history system. Parameters: (GPUDevice) — No description in source JSDoc. (number) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — Number of position snapshots per particle (default 16) (number) — Base trail point width (default 0.05) (number) — Fade curve exponent (default 2.0) (number[]) — Trail color [r, g, b] (default [1, 1, 1]) (string) — Render target format (default 'bgra8unorm') Initialize bind groups. Update trail histories (GPU compute pass). Call once per frame before rendering trails. Render trail histories as additive fading billboards. Parameters: (GPURenderPassEncoder) — Active render pass (Object) — Trail history system (GPUBindGroup) — Frame uniform bind group (group 0) (number) — Active particle count Destroy the system.","contentHash":"da80ffbe756aee458ed77dd8328edd583072f94540dfb06d1b3730a8b1c16220"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleTrailHistory.md::0001","path":"engine/reference/render/particles/ParticleTrailHistory.md","title":"render/particles/ParticleTrailHistory.js","description":"","kind":"reference","source":"engine/render/particles/ParticleTrailHistory.js","updated":"","headings":["render/particles/ParticleTrailHistory.js","Functions","createTrailHistorySystem(device, maxParticles, config = {})","initTrailHistoryBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer)","updateTrailHistories(system, device, particleCount, dt = 1/60)","renderTrailHistories(pass, system, frameBindGroup, particleCount)","destroyTrailHistorySystem(system)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"— Active render pass (Object) — Trail history system (GPUBindGroup) — Frame uniform bind group (group 0) (number) — Active particle count Destroy the system. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"804b58997b037fe8dae042b329e9477f831cd240cce392888dffc214bf3ff3d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/ParticleVelocityRenderer.md::0000","path":"engine/reference/render/particles/ParticleVelocityRenderer.md","title":"render/particles/ParticleVelocityRenderer.js","description":"","kind":"reference","source":"engine/render/particles/ParticleVelocityRenderer.js","updated":"","headings":["render/particles/ParticleVelocityRenderer.js","Functions","async createParticleVelocityRenderer(options)","createParticleVelocityDataBindGroup(renderer, positionBuffer, metaBuffer, velocityBuffer)","setParticleVelocityParams(renderer, { size = 1, quality = 1.0, lodBias = 1.0, cullThreshold = 0 })","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/RopeGPURenderer.md::0000","path":"engine/reference/render/particles/RopeGPURenderer.md","title":"render/particles/RopeGPURenderer.js","description":"","kind":"reference","source":"engine/render/particles/RopeGPURenderer.js","updated":"","headings":["render/particles/RopeGPURenderer.js","Classes","class RopeGPURenderer","Functions","createRopeGPURenderer(device, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Create a compute bind group for a specific rope using particle position buffer Generate tube mesh for a rope on the GPU Render the generated rope mesh Functions Create a rope GPU renderer instance Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but","contentHash":"3170be2accd4ba94533694639463f5f217b12f106df54353cd19526c8c6a6591"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/RopeGPURenderer.md::0001","path":"engine/reference/render/particles/RopeGPURenderer.md","title":"render/particles/RopeGPURenderer.js","description":"","kind":"reference","source":"engine/render/particles/RopeGPURenderer.js","updated":"","headings":["render/particles/RopeGPURenderer.js","Classes","class RopeGPURenderer","Functions","createRopeGPURenderer(device, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2e987331ffc297d4e416a523df433feb1ca979521359778f792163c9d95e7008"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/RopeRenderSystem.md::0000","path":"engine/reference/render/particles/RopeRenderSystem.md","title":"render/particles/RopeRenderSystem.js","description":"","kind":"reference","source":"engine/render/particles/RopeRenderSystem.js","updated":"","headings":["render/particles/RopeRenderSystem.js","Classes","class RopeRenderSystem","Functions","createRopeRenderSystem(device, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Update rope bind groups based on particle world state Generate tube meshes for all ropes Render all rope meshes Full update cycle: update bind groups, generate meshes, prepare for render Functions Create a rope render system Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6ba6dfef2fc2968b62aa9143f06ae3968c7d3db2c184499d311dd0125277039e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/billboard/index.md::0000","path":"engine/reference/render/particles/billboard/index.md","title":"render/particles/billboard/index.js","description":"","kind":"reference","source":"engine/render/particles/billboard/index.js","updated":"","headings":["render/particles/billboard/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: billboard/index.js — Re exports for billboard particle rendering. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6194da61f96abce2e09651dc6a6740fad4f338a0d4d893376df83d3dfb630491"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/custom/index.md::0000","path":"engine/reference/render/particles/custom/index.md","title":"render/particles/custom/index.js","description":"","kind":"reference","source":"engine/render/particles/custom/index.js","updated":"","headings":["render/particles/custom/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: custom/index.js — Re exports for custom particle effects. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"915c5c4c16c1683f17f019471d635913532da2380066153b541d4be0601e7686"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/debug/index.md::0000","path":"engine/reference/render/particles/debug/index.md","title":"render/particles/debug/index.js","description":"","kind":"reference","source":"engine/render/particles/debug/index.js","updated":"","headings":["render/particles/debug/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: debug/index.js — Re exports for debug visualization renderers. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"74c118e4033d2513890960942143d1015ae4e392ec6cda80634d393f0f791e41"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/distortion/index.md::0000","path":"engine/reference/render/particles/distortion/index.md","title":"render/particles/distortion/index.js","description":"","kind":"reference","source":"engine/render/particles/distortion/index.js","updated":"","headings":["render/particles/distortion/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: distortion/index.js — Re exports for distortion and phase VFX rendering. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1d00ce3b744562612ec2de6d2af98408e639c024147ab575a0383340cd1148c5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/index.md::0000","path":"engine/reference/render/particles/index.md","title":"render/particles/index.js","description":"","kind":"reference","source":"engine/render/particles/index.js","updated":"","headings":["render/particles/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Particle System Exports Barrel file for easy importing of all particle related modules. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2858ac7a4de4662a0d9f5c0e75c165d112183cf4d7809e1bc6882be433215909"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/mesh/index.md::0000","path":"engine/reference/render/particles/mesh/index.md","title":"render/particles/mesh/index.js","description":"","kind":"reference","source":"engine/render/particles/mesh/index.js","updated":"","headings":["render/particles/mesh/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: mesh/index.js — Re exports for mesh particle rendering. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"db54a68f11286f3a6429e1c095e2b3ca606a499a1d752aee0bd3c5f87b35d144"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/rope/index.md::0000","path":"engine/reference/render/particles/rope/index.md","title":"render/particles/rope/index.js","description":"","kind":"reference","source":"engine/render/particles/rope/index.js","updated":"","headings":["render/particles/rope/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: rope/index.js — Re exports for rope/wire rendering. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"14086cd5acc7eaaa5763568be856124e188a624cee6db0c3ec40d9a8ba3290a2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/sdf/index.md::0000","path":"engine/reference/render/particles/sdf/index.md","title":"render/particles/sdf/index.js","description":"","kind":"reference","source":"engine/render/particles/sdf/index.js","updated":"","headings":["render/particles/sdf/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: sdf/index.js — Re exports for SDF volumetric particle rendering. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0b717c8a5d8db4729b785a7c09303fbecd9a146c0eac8b1d6b3916290ef563fb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/surface/index.md::0000","path":"engine/reference/render/particles/surface/index.md","title":"render/particles/surface/index.js","description":"","kind":"reference","source":"engine/render/particles/surface/index.js","updated":"","headings":["render/particles/surface/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: surface/index.js — Re exports for SSFR surface rendering pipeline. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e22da4053f271fd4bb676159291cd0ef1e530db50ec9951cd59241781e90183b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/particles/trail/index.md::0000","path":"engine/reference/render/particles/trail/index.md","title":"render/particles/trail/index.js","description":"","kind":"reference","source":"engine/render/particles/trail/index.js","updated":"","headings":["render/particles/trail/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: trail/index.js — Re exports for trail and beam rendering. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"cc1409d6bc3ac77df65da5501d7294fd6216da6d4819d8f8c4403a0197719b95"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AbyssalCameraRig.md::0000","path":"engine/reference/render/passes/AbyssalCameraRig.md","title":"render/passes/AbyssalCameraRig.js","description":"","kind":"reference","source":"engine/render/passes/AbyssalCameraRig.js","updated":"","headings":["render/passes/AbyssalCameraRig.js","Classes","class AbyssalCameraRig","Functions","startAbyssalCameraRig(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"17e670d1ae3d480dd370225963d249bea1004d8774d7a192ed639799322e6eab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AbyssalDiveTeam.md::0000","path":"engine/reference/render/passes/AbyssalDiveTeam.md","title":"render/passes/AbyssalDiveTeam.js","description":"","kind":"reference","source":"engine/render/passes/AbyssalDiveTeam.js","updated":"","headings":["render/passes/AbyssalDiveTeam.js","Classes","class AbyssalDiveTeam","Functions","startAbyssalDiveTeam(layers, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Keeps the survey formation descending with the reader, even while paused. Viewport space regulator exhaust anchors consumed by the shared water pass. The full body cels are painted in a 2:1 band inside a square stage, so the forward quarter of that stage tracks the face/regulator across every role. Viewport space bodies used for local bubble entrainment and fin wakes. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module","contentHash":"87f70ba01eda4a2224d33de138c9b3a22a209de4a8b60e5b5f30aecd8faaff74"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AbyssalDiveTeam.md::0001","path":"engine/reference/render/passes/AbyssalDiveTeam.md","title":"render/passes/AbyssalDiveTeam.js","description":"","kind":"reference","source":"engine/render/passes/AbyssalDiveTeam.js","updated":"","headings":["render/passes/AbyssalDiveTeam.js","Classes","class AbyssalDiveTeam","Functions","startAbyssalDiveTeam(layers, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c5b19900be272b48cf68505e0f3f8a40dd494ad59c4742bd848d4c8a81715746"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AbyssalFaunaField.md::0000","path":"engine/reference/render/passes/AbyssalFaunaField.md","title":"render/passes/AbyssalFaunaField.js","description":"","kind":"reference","source":"engine/render/passes/AbyssalFaunaField.js","updated":"","headings":["render/passes/AbyssalFaunaField.js","Classes","class AbyssalFaunaField","Functions","startAbyssalFaunaField(layers, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Small DOM fauna field for the authored abyssal landing scene. Local flock rules are deliberately limited to fish on the same depth plane. Method Signature Summary Directs the fixed fauna layers through the page's scroll story. Upper swimmers dissolve continuously through the hero descent; two small sculpin remain solid and re enter beside the lower rock shelves with the benthic ecosystem near the page bottom. Read only viewport space wakes for lightweight effects that share this scene. Only swimming fish participate; grounded habitat actors do not. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU","contentHash":"48f3135ff71c46efd84a5888f874b6ca53187aa87f0835619b9ad7b80da67c9e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AbyssalFaunaField.md::0001","path":"engine/reference/render/passes/AbyssalFaunaField.md","title":"render/passes/AbyssalFaunaField.js","description":"","kind":"reference","source":"engine/render/passes/AbyssalFaunaField.js","updated":"","headings":["render/passes/AbyssalFaunaField.js","Classes","class AbyssalFaunaField","Functions","startAbyssalFaunaField(layers, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f40d84bbabdbbfa6c3a967a6f48c7e8cab2a95ff7cf732007791771eb21313be"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AbyssalSmokeAnimator.md::0000","path":"engine/reference/render/passes/AbyssalSmokeAnimator.md","title":"render/passes/AbyssalSmokeAnimator.js","description":"","kind":"reference","source":"engine/render/passes/AbyssalSmokeAnimator.js","updated":"","headings":["render/passes/AbyssalSmokeAnimator.js","Classes","class AbyssalSmokeAnimator","Functions","startAbyssalSmokeAnimator(stage, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"cc7e6ac528ca15a9bb73abb17bcdb0ac2c340f6b171f4ef14eaeea07240d3894"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AreaResamplePass.md::0000","path":"engine/reference/render/passes/AreaResamplePass.md","title":"render/passes/AreaResamplePass.js","description":"","kind":"reference","source":"engine/render/passes/AreaResamplePass.js","updated":"","headings":["render/passes/AreaResamplePass.js","Classes","class AreaResamplePass","Functions","areaResampleCPU(input, outputWidth, outputHeight)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes AreaResamplePass GPU accelerated area weighted resampling Better quality than bilinear for arbitrary scale factors. Especially useful for upscaling low res renders. Method Signature Summary Initialize the resample pass Get or create an intermediate texture of the specified size Resample input texture to output texture using area weighted averaging Resample and blit to a render target (convenience method) Cleanup GPU resources Functions CPU area weighted resample for ImageData (fallback or small images) Parameters: (ImageData) — Source image data (number) — Output width (number) — Output height Returns: Resampled image data Re exports , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together.","contentHash":"b6268381ddda9855050ad7bab3c1aaa446a036dc06f2293ec0a06312deaa2540"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AreaResamplePass.md::0001","path":"engine/reference/render/passes/AreaResamplePass.md","title":"render/passes/AreaResamplePass.js","description":"","kind":"reference","source":"engine/render/passes/AreaResamplePass.js","updated":"","headings":["render/passes/AreaResamplePass.js","Classes","class AreaResamplePass","Functions","areaResampleCPU(input, outputWidth, outputHeight)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2189cb58cd6d6152677f92d1bf7ee91434c8fe8ffb4eef3ce56a3cdde44b70de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/AutoExposurePass.md::0000","path":"engine/reference/render/passes/AutoExposurePass.md","title":"render/passes/AutoExposurePass.js","description":"","kind":"reference","source":"engine/render/passes/AutoExposurePass.js","updated":"","headings":["render/passes/AutoExposurePass.js","Classes","class AutoExposurePass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/BloomPass.md::0000","path":"engine/reference/render/passes/BloomPass.md","title":"render/passes/BloomPass.js","description":"","kind":"reference","source":"engine/render/passes/BloomPass.js","updated":"","headings":["render/passes/BloomPass.js","Classes","class BloomPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Render bloom effect <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"be3fcbde4dfaba0a277c0092aaeed4898258bb643252e7842e6ee8d0a5139fc4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/CascadeMetrics.md::0000","path":"engine/reference/render/passes/CascadeMetrics.md","title":"render/passes/CascadeMetrics.js","description":"","kind":"reference","source":"engine/render/passes/CascadeMetrics.js","updated":"","headings":["render/passes/CascadeMetrics.js","Classes","class CascadeMetrics","Functions","getMetrics()","resetMetrics()","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes CascadeMetrics Central metrics collection for cascaded chunk system Method Signature Summary Get summary statistics Get full metrics as JSON Get compact display string Reset all metrics Functions Get global metrics instance Reset global metrics Re exports , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"49abd40df90c03ee0783edf139563c2932a6e27ba06d458d93b3ede60d3cb75c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/CascadedShadows.md::0000","path":"engine/reference/render/passes/CascadedShadows.md","title":"render/passes/CascadedShadows.js","description":"","kind":"reference","source":"engine/render/passes/CascadedShadows.js","updated":"","headings":["render/passes/CascadedShadows.js","Classes","class CascadedShadowMap","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes CascadedShadowMap Multi cascade shadow mapping system Method Signature Summary Initialize the cascaded shadow map system Calculate cascade frustum split distances using PSSM Update cascade matrices for current camera Update the main uniform buffer with all cascade data Render shadow maps for all cascades Update uniforms from config (called by ConfigLoader) Load configuration from engine.cfg section Get bind group for shadow sampling Get WGSL code for shadow sampling <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3a1b73016aeb5e140bdc2955de5cc064afa289fbd09e3b3f0d5079dc998a8cb5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ChromaticAberrationPass.md::0000","path":"engine/reference/render/passes/ChromaticAberrationPass.md","title":"render/passes/ChromaticAberrationPass.js","description":"","kind":"reference","source":"engine/render/passes/ChromaticAberrationPass.js","updated":"","headings":["render/passes/ChromaticAberrationPass.js","Classes","class ChromaticAberrationPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ClearPass.md::0000","path":"engine/reference/render/passes/ClearPass.md","title":"render/passes/ClearPass.js","description":"","kind":"reference","source":"engine/render/passes/ClearPass.js","updated":"","headings":["render/passes/ClearPass.js","Functions","ensureColorAttachmentResource(frameGraph, name, descriptor)","addCanvasClearPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ClothDebugController.md::0000","path":"engine/reference/render/passes/ClothDebugController.md","title":"render/passes/ClothDebugController.js","description":"","kind":"reference","source":"engine/render/passes/ClothDebugController.js","updated":"","headings":["render/passes/ClothDebugController.js","Functions","createClothDebugController(options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ClothDebugPass.md::0000","path":"engine/reference/render/passes/ClothDebugPass.md","title":"render/passes/ClothDebugPass.js","description":"","kind":"reference","source":"engine/render/passes/ClothDebugPass.js","updated":"","headings":["render/passes/ClothDebugPass.js","Functions","addClothDebugPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ColorGradingPass.md::0000","path":"engine/reference/render/passes/ColorGradingPass.md","title":"render/passes/ColorGradingPass.js","description":"","kind":"reference","source":"engine/render/passes/ColorGradingPass.js","updated":"","headings":["render/passes/ColorGradingPass.js","Classes","class ColorGradingPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ContactShadowsPass.md::0000","path":"engine/reference/render/passes/ContactShadowsPass.md","title":"render/passes/ContactShadowsPass.js","description":"","kind":"reference","source":"engine/render/passes/ContactShadowsPass.js","updated":"","headings":["render/passes/ContactShadowsPass.js","Classes","class ContactShadowsPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize GPU resources Update uniform buffer Set screen dimensions Update light direction from sun Render the pass Load configuration from engine.cfg [contact shadows] section Get current config Destroy GPU resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"73de7c7f11ffec3abc79110ecd40fc4cf4faf7766c34dcf9f4433791c3815028"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/DepthOfFieldPass.md::0000","path":"engine/reference/render/passes/DepthOfFieldPass.md","title":"render/passes/DepthOfFieldPass.js","description":"","kind":"reference","source":"engine/render/passes/DepthOfFieldPass.js","updated":"","headings":["render/passes/DepthOfFieldPass.js","Classes","class DepthOfFieldPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/DepthVisualizerPass.md::0000","path":"engine/reference/render/passes/DepthVisualizerPass.md","title":"render/passes/DepthVisualizerPass.js","description":"","kind":"reference","source":"engine/render/passes/DepthVisualizerPass.js","updated":"","headings":["render/passes/DepthVisualizerPass.js","Functions","async createDepthVisualizerPass(device, outputFormat)","executeDepthVisualizerPass(pass, visualizer, depthTexture, params = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Execute depth visualizer pass <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"76e7d4063efeecabe227d31c322ae2fff9b5de01ad3affc63adf03a0e028617a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/FSRPass.md::0000","path":"engine/reference/render/passes/FSRPass.md","title":"render/passes/FSRPass.js","description":"","kind":"reference","source":"engine/render/passes/FSRPass.js","updated":"","headings":["render/passes/FSRPass.js","Classes","class FSRPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Initialize FSR pass Resize for new dimensions Execute FSR upscaling Execute EASU only (no sharpening) Execute RCAS only (sharpening on already upscaled image) Load configuration <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while","contentHash":"1d7869f9d137dbb0488b081f1e252634e8bdbcd017f295eeea0a32e97e4f8c64"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/FSRPass.md::0001","path":"engine/reference/render/passes/FSRPass.md","title":"render/passes/FSRPass.js","description":"","kind":"reference","source":"engine/render/passes/FSRPass.js","updated":"","headings":["render/passes/FSRPass.js","Classes","class FSRPass","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"501cfd8e71ff797306b043b64e29e268d5bb9faffb64e18501160fb7589c5a5a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/FXAAPass.md::0000","path":"engine/reference/render/passes/FXAAPass.md","title":"render/passes/FXAAPass.js","description":"","kind":"reference","source":"engine/render/passes/FXAAPass.js","updated":"","headings":["render/passes/FXAAPass.js","Classes","class FXAAPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/FilmGrainPass.md::0000","path":"engine/reference/render/passes/FilmGrainPass.md","title":"render/passes/FilmGrainPass.js","description":"","kind":"reference","source":"engine/render/passes/FilmGrainPass.js","updated":"","headings":["render/passes/FilmGrainPass.js","Classes","class FilmGrainPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/FluidDebugController.md::0000","path":"engine/reference/render/passes/FluidDebugController.md","title":"render/passes/FluidDebugController.js","description":"","kind":"reference","source":"engine/render/passes/FluidDebugController.js","updated":"","headings":["render/passes/FluidDebugController.js","Functions","createFluidDebugController(options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/FluidDebugPass.md::0000","path":"engine/reference/render/passes/FluidDebugPass.md","title":"render/passes/FluidDebugPass.js","description":"","kind":"reference","source":"engine/render/passes/FluidDebugPass.js","updated":"","headings":["render/passes/FluidDebugPass.js","Functions","addFluidDebugPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/FluidWaterPass.md::0000","path":"engine/reference/render/passes/FluidWaterPass.md","title":"render/passes/FluidWaterPass.js","description":"","kind":"reference","source":"engine/render/passes/FluidWaterPass.js","updated":"","headings":["render/passes/FluidWaterPass.js","Functions","createFluidWaterPass(device, options = {})","renderFluidWater(pass, encoder, options = {})","resizeFluidWaterPass(pass, width, height)","destroyFluidWaterPass(pass)","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create resources for the fluid water rendering pass Render water/metaball surfaces from particles Resize the fluid water pass textures Destroy the fluid water pass resources Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3bb5ee605117c21e7b53fe98fb180f0ce4da078337d27fdab104f00dfe46080e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/GeometryPass.md::0000","path":"engine/reference/render/passes/GeometryPass.md","title":"render/passes/GeometryPass.js","description":"","kind":"reference","source":"engine/render/passes/GeometryPass.js","updated":"","headings":["render/passes/GeometryPass.js","Functions","addMainGeometryPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/GodRays.md::0000","path":"engine/reference/render/passes/GodRays.md","title":"render/passes/GodRays.js","description":"","kind":"reference","source":"engine/render/passes/GodRays.js","updated":"","headings":["render/passes/GodRays.js","Classes","class GodRays","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GodRays Volumetric light scattering effect WebGPU implementation with fixed 32 sample radial blur Method Signature Summary Initialize god rays Update uniform buffer with current settings Layout matches GodRaysUniforms struct (48 bytes) Render god rays to the target texture Update from sun/moon position and apply to uniforms Update from LightManager + combined viewProj matrix. Projects sun position to screen space using the viewProj directly. Scales god ray intensity by environment sun intensity × globalBrightness. Update light screen position from world position Set light world position Set light color Set effect intensity Check if light is visible on screen Apply preset Resize update internal dimensions Load configuration from engine.cfg [god rays] section Get current config for saving Get WGSL shader code Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the","contentHash":"8ce18dfc1a6e8ef8dce45aff3da2b28c7da8ae75948e2a1920d72ce242cf9706"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/GodRays.md::0001","path":"engine/reference/render/passes/GodRays.md","title":"render/passes/GodRays.js","description":"","kind":"reference","source":"engine/render/passes/GodRays.js","updated":"","headings":["render/passes/GodRays.js","Classes","class GodRays","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ddbae5d391c987c5fa5ca144d47a39e51852f2397b4b66575f094edeb506932e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/GroundShadowPass.md::0000","path":"engine/reference/render/passes/GroundShadowPass.md","title":"render/passes/GroundShadowPass.js","description":"","kind":"reference","source":"engine/render/passes/GroundShadowPass.js","updated":"","headings":["render/passes/GroundShadowPass.js","Classes","class GroundShadowPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Call once per frame before render() — resets the caster list Add a shadow caster (call during entity iteration) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned","contentHash":"997a32d7c4ad1611f097c0d43bbdc97fc1799959b8f763a5aee21bc31131435e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/GroundShadowPass.md::0001","path":"engine/reference/render/passes/GroundShadowPass.md","title":"render/passes/GroundShadowPass.js","description":"","kind":"reference","source":"engine/render/passes/GroundShadowPass.js","updated":"","headings":["render/passes/GroundShadowPass.js","Classes","class GroundShadowPass","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ded4252e2e83720b5095260c1f591c572a59f783f8aec3cb50f4a753f8daddfc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/HDRPipeline.md::0000","path":"engine/reference/render/passes/HDRPipeline.md","title":"render/passes/HDRPipeline.js","description":"","kind":"reference","source":"engine/render/passes/HDRPipeline.js","updated":"","headings":["render/passes/HDRPipeline.js","Classes","class HDRPipeline","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes HDRPipeline Complete HDR rendering pipeline Method Signature Summary Initialize the HDR pipeline Create HDR and bloom textures Create shader pipelines Update uniform buffer Resize textures Get HDR render target view Set exposure Set tonemapping operator Set bloom parameters Get tonemap operator name Apply auto exposure based on scene luminance Apply preset Load configuration from engine.cfg sections Get WGSL shader code Destroy resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"14d82446bcfa05735b327e48d026ea03801071bf3067055f71ceb6c0eff3fa8f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/HiZPass.md::0000","path":"engine/reference/render/passes/HiZPass.md","title":"render/passes/HiZPass.js","description":"","kind":"reference","source":"engine/render/passes/HiZPass.js","updated":"","headings":["render/passes/HiZPass.js","Classes","class HiZPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize the Hi Z pass Resize Hi Z texture to match new screen size Build the Hi Z mip chain from the depth buffer Call this after rendering all opaque geometry Set the view projection matrix for AABB testing Test if an AABB is potentially visible (not fully occluded) This is a CPU side conservative test using the Hi Z pyramid Note: For true GPU driven culling, you'd do this in a compute shader and use indirect draw. This CPU version is simpler but requires readback. For now, we'll use a simpler heuristic based on screen space size and skip the GPU readback overhead. Get the Hi Z texture for GPU side occlusion testing Get a specific mip level view Load configuration from engine.cfg section Flush pending texture destruction Called after command submission when GPU is done with previous frames Queue pending destruction flush for next frame Call this after submitting commands to defer destruction until GPU is done Destroy GPU resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks","contentHash":"b0c778210629258e4467cb00d5ad038c693ee5480280d7271ee3b98cf557171a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/HiZPass.md::0001","path":"engine/reference/render/passes/HiZPass.md","title":"render/passes/HiZPass.js","description":"","kind":"reference","source":"engine/render/passes/HiZPass.js","updated":"","headings":["render/passes/HiZPass.js","Classes","class HiZPass","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"457e8d96bd267302938589feb1c5cb12a462483844113b501fdebc5da4979cdc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ImageHeatHazePass.md::0000","path":"engine/reference/render/passes/ImageHeatHazePass.md","title":"render/passes/ImageHeatHazePass.js","description":"","kind":"reference","source":"engine/render/passes/ImageHeatHazePass.js","updated":"","headings":["render/passes/ImageHeatHazePass.js","Classes","class ImageHeatHazePass","Functions","projectImagePointToViewport(imageUV, viewportWidth = window.innerWidth, viewportHeight = window.innerHeight, imageAspect = 1.5,)","async startImageHeatHaze(canvas, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Fades scene lighting while preserving refraction, ripples, and heat flow. Functions Project a point in authored image UV space into the backdrop viewport. Keep this in sync with the landing page's background size breakpoints. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2489fcbeb488b546ca3cd345dfdea96369759e0ae8d17451218024c9cb079c9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/LensFlarePass.md::0000","path":"engine/reference/render/passes/LensFlarePass.md","title":"render/passes/LensFlarePass.js","description":"","kind":"reference","source":"engine/render/passes/LensFlarePass.js","updated":"","headings":["render/passes/LensFlarePass.js","Classes","class LensFlarePass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/LightingPass.md::0000","path":"engine/reference/render/passes/LightingPass.md","title":"render/passes/LightingPass.js","description":"","kind":"reference","source":"engine/render/passes/LightingPass.js","updated":"","headings":["render/passes/LightingPass.js","Functions","addLightingPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/MotionBlurPass.md::0000","path":"engine/reference/render/passes/MotionBlurPass.md","title":"render/passes/MotionBlurPass.js","description":"","kind":"reference","source":"engine/render/passes/MotionBlurPass.js","updated":"","headings":["render/passes/MotionBlurPass.js","Classes","class MotionBlurPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Load configuration from engine.cfg section <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"30b90764335694f93f2c11bf65dc798058bb6369ab0c39820d4a1a91129cfebc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/OutlinePass.md::0000","path":"engine/reference/render/passes/OutlinePass.md","title":"render/passes/OutlinePass.js","description":"","kind":"reference","source":"engine/render/passes/OutlinePass.js","updated":"","headings":["render/passes/OutlinePass.js","Classes","class OutlinePass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/PaniniProjectionPass.md::0000","path":"engine/reference/render/passes/PaniniProjectionPass.md","title":"render/passes/PaniniProjectionPass.js","description":"","kind":"reference","source":"engine/render/passes/PaniniProjectionPass.js","updated":"","headings":["render/passes/PaniniProjectionPass.js","Classes","class PaniniProjectionPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Initialize GPU resources Update uniform buffer Set FOV and aspect ratio from camera Render the pass Load configuration from [panini projection] section Get current config Destroy GPU resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0ccedc2a3be23265c6405fbcb2165bfa88d1f6f58767e49c791be6ec04917f06"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ParticlePass.md::0000","path":"engine/reference/render/passes/ParticlePass.md","title":"render/passes/ParticlePass.js","description":"","kind":"reference","source":"engine/render/passes/ParticlePass.js","updated":"","headings":["render/passes/ParticlePass.js","Functions","addParticleBillboardPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/PathTracingPass.md::0000","path":"engine/reference/render/passes/PathTracingPass.md","title":"render/passes/PathTracingPass.js","description":"","kind":"reference","source":"engine/render/passes/PathTracingPass.js","updated":"","headings":["render/passes/PathTracingPass.js","Classes","class PathTracingPass","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"23f247883d23f2e581883c4d6d423aa1699a82fcc0a94a525deb23284792a519"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/PostProcessChainPass.md::0000","path":"engine/reference/render/passes/PostProcessChainPass.md","title":"render/passes/PostProcessChainPass.js","description":"","kind":"reference","source":"engine/render/passes/PostProcessChainPass.js","updated":"","headings":["render/passes/PostProcessChainPass.js","Functions","addPostProcessChainPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/PostProcessController.md::0000","path":"engine/reference/render/passes/PostProcessController.md","title":"render/passes/PostProcessController.js","description":"","kind":"reference","source":"engine/render/passes/PostProcessController.js","updated":"","headings":["render/passes/PostProcessController.js","Functions","createPostProcessController(options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/PurkinjeEffectPass.md::0000","path":"engine/reference/render/passes/PurkinjeEffectPass.md","title":"render/passes/PurkinjeEffectPass.js","description":"","kind":"reference","source":"engine/render/passes/PurkinjeEffectPass.js","updated":"","headings":["render/passes/PurkinjeEffectPass.js","Classes","class PurkinjeEffectPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize GPU resources Update uniform buffer Update eye adaptation based on scene brightness Call this each frame with average scene luminance Set adaptation directly (for time of day integration) Render the pass Load configuration from engine.cfg Get current config Destroy GPU resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3aed8584b620f9e0ca88fa726fb6575fe249c50b9980aa75f7e816485a014446"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ReSTIRGIPass.md::0000","path":"engine/reference/render/passes/ReSTIRGIPass.md","title":"render/passes/ReSTIRGIPass.js","description":"","kind":"reference","source":"engine/render/passes/ReSTIRGIPass.js","updated":"","headings":["render/passes/ReSTIRGIPass.js","Classes","class ReSTIRGIPass","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"23f247883d23f2e581883c4d6d423aa1699a82fcc0a94a525deb23284792a519"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ReconstructionProvider.md::0000","path":"engine/reference/render/passes/ReconstructionProvider.md","title":"render/passes/ReconstructionProvider.js","description":"","kind":"reference","source":"engine/render/passes/ReconstructionProvider.js","updated":"","headings":["render/passes/ReconstructionProvider.js","Classes","class ReconstructionProvider","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Classes Method Signature Summary Initialize all backends Set reconstruction mode Set TSR quality preset Get render dimensions (render your scene at this size) Get display dimensions Get sub pixel jitter for projection matrix Apply jitter to projection matrix (returns jittered copy) Signal camera cut / teleport (resets temporal history) Resize for new display dimensions Execute reconstruction pass For TSR/FSR modes: Execute SVGF denoising (separate from upscaling) Call this on noisy path traced input BEFORE upscaling. Get info about current state Load configuration from engine.cfg Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device","contentHash":"06cb10500dcf6f50ab5fe691865d77990b41e80d62dc4d6c1baa0a43d7c13a58"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ReconstructionProvider.md::0001","path":"engine/reference/render/passes/ReconstructionProvider.md","title":"render/passes/ReconstructionProvider.js","description":"","kind":"reference","source":"engine/render/passes/ReconstructionProvider.js","updated":"","headings":["render/passes/ReconstructionProvider.js","Classes","class ReconstructionProvider","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9843cf3d1e016dccdf54017ff315d236e31c65fd1ece683e4064f39a0e32f687"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/RenderPassManager.md::0000","path":"engine/reference/render/passes/RenderPassManager.md","title":"render/passes/RenderPassManager.js","description":"","kind":"reference","source":"engine/render/passes/RenderPassManager.js","updated":"","headings":["render/passes/RenderPassManager.js","Classes","class RenderPassManager","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Render Pass Manager Manages multi pass rendering pipeline with pass selection and visualization. Handles render target allocation, pass execution, and debug visualization. Method Signature Summary Register a render pass Allocate a render target texture Resize render targets (call on viewport resize) Build pass execution order based on dependencies Execute all passes in dependency order Set active view mode for visualization Get current view mode Get render target for current view mode Get available view modes Enable/disable a pass Destroy all render targets <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU","contentHash":"adc35986e3fd6eabb2d7c49680c1d291c0274fc020b0ddf55efff88b2edc4109"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/RenderPassManager.md::0001","path":"engine/reference/render/passes/RenderPassManager.md","title":"render/passes/RenderPassManager.js","description":"","kind":"reference","source":"engine/render/passes/RenderPassManager.js","updated":"","headings":["render/passes/RenderPassManager.js","Classes","class RenderPassManager","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f40d84bbabdbbfa6c3a967a6f48c7e8cab2a95ff7cf732007791771eb21313be"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SSAOPass.md::0000","path":"engine/reference/render/passes/SSAOPass.md","title":"render/passes/SSAOPass.js","description":"","kind":"reference","source":"engine/render/passes/SSAOPass.js","updated":"","headings":["render/passes/SSAOPass.js","Classes","class SSAOPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes SSAO Pass Manager Method Signature Summary Initialize SSAO pass Resize textures Update uniforms Create or update bind groups Render SSAO pass Load configuration from engine.cfg section Flush pending texture destruction Destroy resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d295ddf659b809700e8928910e3202de54292f531122e4d16fd223528391cb61"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SSGIPass.md::0000","path":"engine/reference/render/passes/SSGIPass.md","title":"render/passes/SSGIPass.js","description":"","kind":"reference","source":"engine/render/passes/SSGIPass.js","updated":"","headings":["render/passes/SSGIPass.js","Classes","class SSGIPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize GPU resources Update uniform buffer Set screen dimensions Render the pass Load configuration from engine.cfg [screen space gi] section Get current config Destroy GPU resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"56117185ec89435a53d8620841671e3246d01ff7c1b370153247ba464b200630"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SSRPass.md::0000","path":"engine/reference/render/passes/SSRPass.md","title":"render/passes/SSRPass.js","description":"","kind":"reference","source":"engine/render/passes/SSRPass.js","updated":"","headings":["render/passes/SSRPass.js","Classes","class SSRPass","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes SSRPass Screen Space Reflections render pass Method Signature Summary Initialize the SSR pass Resize SSR textures Update uniforms Execute SSR pass Get SSR result texture view Simple 4x4 matrix inverse (for projection matrices) Load configuration from engine.cfg section Destroy resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ac81291737462c59edebd5d6e48a94543208b518ca964425826310e59294c46a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SVGFDenoise.md::0000","path":"engine/reference/render/passes/SVGFDenoise.md","title":"render/passes/SVGFDenoise.js","description":"","kind":"reference","source":"engine/render/passes/SVGFDenoise.js","updated":"","headings":["render/passes/SVGFDenoise.js","Classes","class SVGFDenoise","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Initialize SVGF denoiser Resize denoiser Signal camera cut / scene change (resets temporal accumulation) Execute full SVGF denoising pipeline Load configuration Get current accumulated variance texture (for adaptive sampling) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests","contentHash":"63d29419f0c68c457efd6b6805935d06b9d2f1e0673327b4a8c69cc8128f885c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SVGFDenoise.md::0001","path":"engine/reference/render/passes/SVGFDenoise.md","title":"render/passes/SVGFDenoise.js","description":"","kind":"reference","source":"engine/render/passes/SVGFDenoise.js","updated":"","headings":["render/passes/SVGFDenoise.js","Classes","class SVGFDenoise","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ac8fac355a73b3ad1637c76d66272c899267b37aa8520a9ed5b21bae569f1161"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SceneDebugVisualizerPass.md::0000","path":"engine/reference/render/passes/SceneDebugVisualizerPass.md","title":"render/passes/SceneDebugVisualizerPass.js","description":"","kind":"reference","source":"engine/render/passes/SceneDebugVisualizerPass.js","updated":"","headings":["render/passes/SceneDebugVisualizerPass.js","Functions","async createSceneDebugVisualizerPass(device, outputFormat)","executeSceneDebugVisualizerPass(encoder, outputView, depthView, visualizer, opts)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create the scene debug visualizer pass Parameters: (GPUDevice) — No description in source JSDoc. (string) — Swapchain format (e.g. 'bgra8unorm') Returns: Visualizer resources Execute the scene debug visualizer pass Parameters: (GPUCommandEncoder) — No description in source JSDoc. (GPUTextureView) — Swapchain texture view to render into (GPUTextureView) — Scene depth texture view (depth24plus, TEXTURE BINDING) (Object) — Resources from createSceneDebugVisualizerPass (Object) — No description in source JSDoc. (Float32Array) — 4x4 inverse view projection matrix (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — 0=depth, 1=normals (number) — Canvas width (number) — Canvas height (GPUTextureView) — Particle depth color texture (rgba16float) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically","contentHash":"36e049839dfa0a1478c8e317bd14a7181f9c87e7d9ae5bb0879763c5e8a45a92"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SceneDebugVisualizerPass.md::0001","path":"engine/reference/render/passes/SceneDebugVisualizerPass.md","title":"render/passes/SceneDebugVisualizerPass.js","description":"","kind":"reference","source":"engine/render/passes/SceneDebugVisualizerPass.js","updated":"","headings":["render/passes/SceneDebugVisualizerPass.js","Functions","async createSceneDebugVisualizerPass(device, outputFormat)","executeSceneDebugVisualizerPass(encoder, outputView, depthView, visualizer, opts)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f85a0a09efcedae47dd00cc983fe7507e792d257aaa5cf532531a8e74b34043f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ShadowAtlas.md::0000","path":"engine/reference/render/passes/ShadowAtlas.md","title":"render/passes/ShadowAtlas.js","description":"","kind":"reference","source":"engine/render/passes/ShadowAtlas.js","updated":"","headings":["render/passes/ShadowAtlas.js","Functions","createShadowAtlas(device, options = {})","beginFrame(atlas)","addCaster(atlas, x, y, z, radius)","computeLightMatrix(atlas, sunDir, cameraPos)","registerAtlasCaster(atlas, caster)","unregisterAtlasCaster(atlas, caster)","addCategoryCaster(atlas, categoryName, caster)","renderAndCompositeAll(atlas, encoder, outputView, sceneDepthTexture, invViewProj, screenW, screenH, cameraPos)","renderDepth(atlas, encoder, extraCasters)","composite(atlas, encoder, outputView, sceneDepthTexture, invViewProj, screenW, screenH, cameraPos)","destroyShadowAtlas(atlas)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 } Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native","contentHash":"186d2963806fd9ed4bf2ab7e2800831717cd16b92e2697bdd134d206fd30c6e7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ShadowAtlas.md::0001","path":"engine/reference/render/passes/ShadowAtlas.md","title":"render/passes/ShadowAtlas.js","description":"","kind":"reference","source":"engine/render/passes/ShadowAtlas.js","updated":"","headings":["render/passes/ShadowAtlas.js","Functions","createShadowAtlas(device, options = {})","beginFrame(atlas)","addCaster(atlas, x, y, z, radius)","computeLightMatrix(atlas, sunDir, cameraPos)","registerAtlasCaster(atlas, caster)","unregisterAtlasCaster(atlas, caster)","addCategoryCaster(atlas, categoryName, caster)","renderAndCompositeAll(atlas, encoder, outputView, sceneDepthTexture, invViewProj, screenW, screenH, cameraPos)","renderDepth(atlas, encoder, extraCasters)","composite(atlas, encoder, outputView, sceneDepthTexture, invViewProj, screenW, screenH, cameraPos)","destroyShadowAtlas(atlas)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"cdcbf9618c7c875d847b2220727b289bddf0135168e5852f16f357a16d521382"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ShadowMapPass.md::0000","path":"engine/reference/render/passes/ShadowMapPass.md","title":"render/passes/ShadowMapPass.js","description":"","kind":"reference","source":"engine/render/passes/ShadowMapPass.js","updated":"","headings":["render/passes/ShadowMapPass.js","Classes","class ShadowMapPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Reset per frame caster bounds Expand bounding box to include a shadow caster (call during entity loop) Compute the light view projection matrix from sun direction + caster bounds. Returns a Float32Array(16) lightViewProj, or null if no casters. Render shadow depth map. Call AFTER EntityMeshRenderer.flush(). Composite shadows onto the rendered scene. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only","contentHash":"ea48d1f7d3b53a62b0130346b5c10f640c0f081298670b90d17f871e7c10cb21"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ShadowMapPass.md::0001","path":"engine/reference/render/passes/ShadowMapPass.md","title":"render/passes/ShadowMapPass.js","description":"","kind":"reference","source":"engine/render/passes/ShadowMapPass.js","updated":"","headings":["render/passes/ShadowMapPass.js","Classes","class ShadowMapPass","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"28a1d8dc3248f38838fdbbd4e9fbd72c62ffd92f318c7cd89457c5cc10ba0291"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/ShadowPass.md::0000","path":"engine/reference/render/passes/ShadowPass.md","title":"render/passes/ShadowPass.js","description":"","kind":"reference","source":"engine/render/passes/ShadowPass.js","updated":"","headings":["render/passes/ShadowPass.js","Functions","addDirectionalShadowPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SharpeningPass.md::0000","path":"engine/reference/render/passes/SharpeningPass.md","title":"render/passes/SharpeningPass.js","description":"","kind":"reference","source":"engine/render/passes/SharpeningPass.js","updated":"","headings":["render/passes/SharpeningPass.js","Classes","class SharpeningPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SpellEffectPass.md::0000","path":"engine/reference/render/passes/SpellEffectPass.md","title":"render/passes/SpellEffectPass.js","description":"","kind":"reference","source":"engine/render/passes/SpellEffectPass.js","updated":"","headings":["render/passes/SpellEffectPass.js","Functions","createSpellEffectPass(device, options = {})","renderSpellEffects(pass, encoder, targetView, options = {})","spellElementToEffectType(element)","spellConfigToInstance(spellConfig, position, time, phase = 0.5)","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create the spell effect rendering pass Render active spell effects Parameters: (Object) — The spell effect pass object (GPUCommandEncoder) — Command encoder (GPUTextureView) — Render target view (Object) — Render options (Float32Array) — View projection matrix (16 floats) (Float32Array) — Inverse view projection matrix (16 floats) (Array) — Camera position [x, y, z] (number) — Global time (Array) — Screen dimensions [width, height] (Array) — Array of active spell objects Map spell element to effect type Convert a spell config to a renderable spell instance Constants Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source:","contentHash":"160f605640072013be28823e3cd4c7f1375960b71719daf4d00d7be0535ad2c5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/SpellEffectPass.md::0001","path":"engine/reference/render/passes/SpellEffectPass.md","title":"render/passes/SpellEffectPass.js","description":"","kind":"reference","source":"engine/render/passes/SpellEffectPass.js","updated":"","headings":["render/passes/SpellEffectPass.js","Functions","createSpellEffectPass(device, options = {})","renderSpellEffects(pass, encoder, targetView, options = {})","spellElementToEffectType(element)","spellConfigToInstance(spellConfig, position, time, phase = 0.5)","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"44da23d910ba1b334912304923b4de5d78f32a15de03d053df614f73b7927ad1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/TAAPass.md::0000","path":"engine/reference/render/passes/TAAPass.md","title":"render/passes/TAAPass.js","description":"","kind":"reference","source":"engine/render/passes/TAAPass.js","updated":"","headings":["render/passes/TAAPass.js","Classes","class TAAPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes TAAPass Temporal Anti Aliasing render pass Method Signature Summary Initialize the TAA pass Create history textures for ping pong buffering Resize the TAA buffers Get jitter offset for current frame Update settings (called by ConfigLoader) Load configuration from engine.cfg section Apply jitter to projection matrix Execute TAA pass Get motion texture view for writing motion vectors Destroy resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3811537f5fdefa6332bdc94a305437ab2d4060075b7ea18574662991eaaeea6b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/TemporalSuperResolution.md::0000","path":"engine/reference/render/passes/TemporalSuperResolution.md","title":"render/passes/TemporalSuperResolution.js","description":"","kind":"reference","source":"engine/render/passes/TemporalSuperResolution.js","updated":"","headings":["render/passes/TemporalSuperResolution.js","Classes","class TemporalSuperResolution","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Initialize TSR with output dimensions Set quality preset Get render dimensions (use these for your internal render targets) Get sub pixel jitter for current frame's projection matrix Apply jitter to projection matrix Signal a camera cut (teleport, scene change) resets history Resize output dimensions Execute TSR pass Load configuration Get current output texture (latest history) Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the","contentHash":"8f21cfd0b20c01481906dbba54a7e6e22c4981496ec2a94b67ca1788e0ee08ef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/TemporalSuperResolution.md::0001","path":"engine/reference/render/passes/TemporalSuperResolution.md","title":"render/passes/TemporalSuperResolution.js","description":"","kind":"reference","source":"engine/render/passes/TemporalSuperResolution.js","updated":"","headings":["render/passes/TemporalSuperResolution.js","Classes","class TemporalSuperResolution","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"82be4390bbc123ff840d681f3cc32241a02f1f0f75e1eb09f2c95069018c0376"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/TonemapPass.md::0000","path":"engine/reference/render/passes/TonemapPass.md","title":"render/passes/TonemapPass.js","description":"","kind":"reference","source":"engine/render/passes/TonemapPass.js","updated":"","headings":["render/passes/TonemapPass.js","Classes","class TonemapPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Render tonemapping pass. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"df7e51c18fe9893b2ffa0b40f3254ba375cdd25427f17aa9d4b896470301ad88"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/UIHudPass.md::0000","path":"engine/reference/render/passes/UIHudPass.md","title":"render/passes/UIHudPass.js","description":"","kind":"reference","source":"engine/render/passes/UIHudPass.js","updated":"","headings":["render/passes/UIHudPass.js","Functions","addUIHudPass(frameGraph, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"470b5f75c6ba979f783cf46cb04481781015fa5bfa77fe12d9bad65b90ea4d7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/UnderwaterPass.md::0000","path":"engine/reference/render/passes/UnderwaterPass.md","title":"render/passes/UnderwaterPass.js","description":"","kind":"reference","source":"engine/render/passes/UnderwaterPass.js","updated":"","headings":["render/passes/UnderwaterPass.js","Classes","class UnderwaterPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize GPU resources Create/resize textures Resize pass Update underwater state from camera position and voxel data Render underwater effect Load configuration from engine.cfg section Cleanup <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"35469dd2e89d38306617cf88735f1e1153adafda46566f83c748d3d999ec6625"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/UnderwaterSiltField.md::0000","path":"engine/reference/render/passes/UnderwaterSiltField.md","title":"render/passes/UnderwaterSiltField.js","description":"","kind":"reference","source":"engine/render/passes/UnderwaterSiltField.js","updated":"","headings":["render/passes/UnderwaterSiltField.js","Classes","class UnderwaterSiltField","Functions","startUnderwaterSiltField(canvas, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Fades authored illumination without removing water, silt, or active flow. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"902749f0b0cd1d1c29d1039996ceb96c74538bb93a3f398d0b7fa7f26e098e78"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/VignettePass.md::0000","path":"engine/reference/render/passes/VignettePass.md","title":"render/passes/VignettePass.js","description":"","kind":"reference","source":"engine/render/passes/VignettePass.js","updated":"","headings":["render/passes/VignettePass.js","Classes","class VignettePass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize GPU resources Update uniform buffer with current settings Render vignette effect Load configuration from engine.cfg [vignette] section Get current config for saving Apply a preset Destroy GPU resources <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"4c55960bef15d39a4bc357cbe73b138af52fcfbfc5ca18e536f0e7159d2e5296"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/VolumetricCloudsPass.md::0000","path":"engine/reference/render/passes/VolumetricCloudsPass.md","title":"render/passes/VolumetricCloudsPass.js","description":"","kind":"reference","source":"engine/render/passes/VolumetricCloudsPass.js","updated":"","headings":["render/passes/VolumetricCloudsPass.js","Classes","class VolumetricCloudsPass","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Initialize GPU resources Update uniform buffer Set screen dimensions Update sun direction Update time for wind animation Render the pass Load configuration from engine.cfg [volumetric clouds] section Get current config Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place","contentHash":"05f41f8d2a33e17b62120805c9a2a326789b2c87a858e45aafd7d6a1227b3269"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/VolumetricCloudsPass.md::0001","path":"engine/reference/render/passes/VolumetricCloudsPass.md","title":"render/passes/VolumetricCloudsPass.js","description":"","kind":"reference","source":"engine/render/passes/VolumetricCloudsPass.js","updated":"","headings":["render/passes/VolumetricCloudsPass.js","Classes","class VolumetricCloudsPass","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"49524bad0a8a1b8928369052db2ba099038649444ee3ce8f219bf2b5510114e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/index.md::0000","path":"engine/reference/render/passes/index.md","title":"render/passes/index.js","description":"","kind":"reference","source":"engine/render/passes/index.js","updated":"","headings":["render/passes/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"8e08094cd20b5e319537f06cab7cb480391c7f577cc4e006bd068f031c855ee2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/passes/spellpacks/index.md::0000","path":"engine/reference/render/passes/spellpacks/index.md","title":"render/passes/spellpacks/index.js","description":"","kind":"reference","source":"engine/render/passes/spellpacks/index.js","updated":"","headings":["render/passes/spellpacks/index.js","Functions","collectGpuShaders()","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b9633e273b3bfb6f985a40cab6867aeec032feecffe40307e8d9966f34f9d546"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/postprocess/TemporalAA.md::0000","path":"engine/reference/render/postprocess/TemporalAA.md","title":"render/postprocess/TemporalAA.js","description":"","kind":"reference","source":"engine/render/postprocess/TemporalAA.js","updated":"","headings":["render/postprocess/TemporalAA.js","Classes","class TemporalAA","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Create bind group for TAA pass Get jitter offset for current frame (for sub pixel sampling) Get motion vector texture for writing during rendering Get current depth texture for writing Apply TAA to current frame Get the current TAA output (history buffer with latest result) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"df0db3e8201d3f100a2a5ad76e99c2d99a7b93a53c3b60959be2d27470cd22d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyBillboardAlign.md::0000","path":"engine/reference/render/proxy/ProxyBillboardAlign.md","title":"render/proxy/ProxyBillboardAlign.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyBillboardAlign.js","updated":"","headings":["render/proxy/ProxyBillboardAlign.js","Classes","class ProxyBillboardAlign","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Execute the billboard alignment compute pass. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b24d57aa48e4d1dad37253b9c54eb42007d1fadb29bc8227d5a7a7fe2e986891"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyGBufferPass.md::0000","path":"engine/reference/render/proxy/ProxyGBufferPass.md","title":"render/proxy/ProxyGBufferPass.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyGBufferPass.js","updated":"","headings":["render/proxy/ProxyGBufferPass.js","Classes","class ProxyGBufferPass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Render proxy cubes and stamp proxy instance IDs into the GBuffer ID texture. Returns the proxy ID texture for binding in ProxyMaskPass. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs","contentHash":"dfe7af647ba4332b0b6a4e8cf0afd1007a338c88f3e2249287f3deb381da1103"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyGBufferPass.md::0001","path":"engine/reference/render/proxy/ProxyGBufferPass.md","title":"render/proxy/ProxyGBufferPass.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyGBufferPass.js","updated":"","headings":["render/proxy/ProxyGBufferPass.js","Classes","class ProxyGBufferPass","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d70753a4e77c56e6c5fc168e6dc07afb8bdfd1907b7f40c17de870211825fd67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyGeometrySystem.md::0000","path":"engine/reference/render/proxy/ProxyGeometrySystem.md","title":"render/proxy/ProxyGeometrySystem.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyGeometrySystem.js","updated":"","headings":["render/proxy/ProxyGeometrySystem.js","Classes","class ProxyGeometrySystem","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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() Classes Method Signature Summary Register a target asset for proxy rendering. Builds BLAS (BVH), SDF, and Octahedral atlas. Add a proxy instance for a registered asset. Remove a proxy instance. Update the world transform of an existing proxy instance. Set quality mode. Per frame update. Call once per frame. Execute all proxy render passes. Insert into the frame's render graph AFTER the GBuffer pass and BEFORE the tonemap pass. Set GPU instance buffer directly (for compute shader driven instances). Bypasses CPU side instance management. Set GPU TLAS","contentHash":"d90224b66766e4cf5a2427b6b9794db05592fcff57b8be628d43ab361de75fb9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyGeometrySystem.md::0001","path":"engine/reference/render/proxy/ProxyGeometrySystem.md","title":"render/proxy/ProxyGeometrySystem.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyGeometrySystem.js","updated":"","headings":["render/proxy/ProxyGeometrySystem.js","Classes","class ProxyGeometrySystem","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"pass and BEFORE the tonemap pass. Set GPU instance buffer directly (for compute shader driven instances). Bypasses CPU side instance management. Set GPU TLAS buffer directly (for compute shader driven BVH). Set asset half extents buffer for GPU TLAS refit. Constants Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a26456a0a665ee441f950da6d247f082c4443953e394febb480d39024dfafc5a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyMaskPass.md::0000","path":"engine/reference/render/proxy/ProxyMaskPass.md","title":"render/proxy/ProxyMaskPass.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyMaskPass.js","updated":"","headings":["render/proxy/ProxyMaskPass.js","Classes","class ProxyMaskPass","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Select quality tier based on current FPS. Includes 0.5s hysteresis to prevent rapid switching. Set tier directly (overrides auto selection). Execute the mask compute pass. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features","contentHash":"dc780f36d92bdaee7bc8dd4ae4e863e36b9a116d37a5394ac6ee452de7c3d71f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyMaskPass.md::0001","path":"engine/reference/render/proxy/ProxyMaskPass.md","title":"render/proxy/ProxyMaskPass.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyMaskPass.js","updated":"","headings":["render/proxy/ProxyMaskPass.js","Classes","class ProxyMaskPass","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"11dbaecde75e13661854abc78c04c0c36ecfe206d72051049c2dd5d434bfbe47"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyOctahedralCache.md::0000","path":"engine/reference/render/proxy/ProxyOctahedralCache.md","title":"render/proxy/ProxyOctahedralCache.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyOctahedralCache.js","updated":"","headings":["render/proxy/ProxyOctahedralCache.js","Classes","class ProxyOctahedralCache","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Register a target asset for octahedral baking. Immediately marks dirty — call bakeAsync() to generate the atlas. Bake the octahedral atlas for an asset. Renders ATLAS FRAMES×ATLAS FRAMES views by rotating a virtual camera around the asset on an octahedral grid. Mark an asset's atlas as needing a re bake (e.g., material changed). Returns the color atlas texture for an asset (or null if not baked). Returns the normal atlas texture for an asset (or null if not baked). Decode octahedral [0,1]^2 UV to unit sphere direction. Build an orthographic view projection matrix looking from viewDir toward origin. Returns a column major Float32Array(16). Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared","contentHash":"be793ef5870fd980c5e841f871fe624bfe80cd73181418e186ee2315d9cfb753"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyOctahedralCache.md::0001","path":"engine/reference/render/proxy/ProxyOctahedralCache.md","title":"render/proxy/ProxyOctahedralCache.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyOctahedralCache.js","updated":"","headings":["render/proxy/ProxyOctahedralCache.js","Classes","class ProxyOctahedralCache","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"84c677d299a4235f7f21c401e3f634c21cb6ddf68c2ace1ea22ad0f106f9c8d9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxySDF.md::0000","path":"engine/reference/render/proxy/ProxySDF.md","title":"render/proxy/ProxySDF.js","description":"","kind":"reference","source":"engine/render/proxy/ProxySDF.js","updated":"","headings":["render/proxy/ProxySDF.js","Classes","class ProxySDF","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Register a target asset and allocate GPU SDF texture. Bake the SDF for a registered asset onto the GPU. This is done asynchronously using MeshSDFGenerator. Get the SDF texture view for binding in shaders. Get the sdfScale uniform value for this asset. Mark asset SDF as needing re bake (mesh or transform changed). Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it.","contentHash":"20dd6c4bbab27d37f2a78fc7de9eed436630e6d07c7185c0dc560091f9743ea6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxySDF.md::0001","path":"engine/reference/render/proxy/ProxySDF.md","title":"render/proxy/ProxySDF.js","description":"","kind":"reference","source":"engine/render/proxy/ProxySDF.js","updated":"","headings":["render/proxy/ProxySDF.js","Classes","class ProxySDF","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"963c22a5887cb3112c91198dffa1e47f21f8ed7e166502a2ea93a56ccbaddcd4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/ProxyShadePass.md::0000","path":"engine/reference/render/proxy/ProxyShadePass.md","title":"render/proxy/ProxyShadePass.js","description":"","kind":"reference","source":"engine/render/proxy/ProxyShadePass.js","updated":"","headings":["render/proxy/ProxyShadePass.js","Classes","class ProxyShadePass","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Execute the shade composite pass. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"db10206fd05f4493308aece3d11407b6ba74b501887627a85fbb3d38f5844a16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/TLASBuilder.md::0000","path":"engine/reference/render/proxy/TLASBuilder.md","title":"render/proxy/TLASBuilder.js","description":"","kind":"reference","source":"engine/render/proxy/TLASBuilder.js","updated":"","headings":["render/proxy/TLASBuilder.js","Classes","class TLASBuilder","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Register a proxy instance. Update the world transform of an existing instance (no full rebuild needed). Remove a proxy instance. Triggers TLAS rebuild. Build (or refit) the TLAS if dirty, then upload to GPU. Call once per frame before render. Force rebuild on next commit (e.g., after many removals). Set GPU buffers directly for compute shader driven BVH. Bypasses CPU side BVH building. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when","contentHash":"e06cbeddf49970e15ca4c11bc66e792dbca15f42b1738edb70e781b35176920d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/TLASBuilder.md::0001","path":"engine/reference/render/proxy/TLASBuilder.md","title":"render/proxy/TLASBuilder.js","description":"","kind":"reference","source":"engine/render/proxy/TLASBuilder.js","updated":"","headings":["render/proxy/TLASBuilder.js","Classes","class TLASBuilder","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"28a1d8dc3248f38838fdbbd4e9fbd72c62ffd92f318c7cd89457c5cc10ba0291"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/index.md::0000","path":"engine/reference/render/proxy/index.md","title":"render/proxy/index.js","description":"","kind":"reference","source":"engine/render/proxy/index.js","updated":"","headings":["render/proxy/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Re exports , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU ·","contentHash":"349abe5c98c60d76e93a9d79bdd86d687133088161ba2b63d5129efb407097d9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/proxy/index.md::0001","path":"engine/reference/render/proxy/index.md","title":"render/proxy/index.js","description":"","kind":"reference","source":"engine/render/proxy/index.js","updated":"","headings":["render/proxy/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0b87224503d51cdf4dbcce84c621580781c58849becbe60ef2cfde96bac51fe8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/scenes/StandardEntityRenderResources.md::0000","path":"engine/reference/render/scenes/StandardEntityRenderResources.md","title":"render/scenes/StandardEntityRenderResources.js","description":"","kind":"reference","source":"engine/render/scenes/StandardEntityRenderResources.js","updated":"","headings":["render/scenes/StandardEntityRenderResources.js","Functions","createStandardEntityRenderResources(device, renderPipeline, lightsBuffer, entityId, uniformByteLength)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/scenes/StandardRoomRenderer.md::0000","path":"engine/reference/render/scenes/StandardRoomRenderer.md","title":"render/scenes/StandardRoomRenderer.js","description":"","kind":"reference","source":"engine/render/scenes/StandardRoomRenderer.js","updated":"","headings":["render/scenes/StandardRoomRenderer.js","Functions","async createStandardRoomRenderer(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/scenes/StandardUniforms.md::0000","path":"engine/reference/render/scenes/StandardUniforms.md","title":"render/scenes/StandardUniforms.js","description":"","kind":"reference","source":"engine/render/scenes/StandardUniforms.js","updated":"","headings":["render/scenes/StandardUniforms.js","Functions","updateStandardLights(device, lightsBuffer, lightsData, options = {})","updateStandardUniforms(device, targetBuffer, uniformData, uniformDataU32, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/scenes/VoxelWorldRenderer.md::0000","path":"engine/reference/render/scenes/VoxelWorldRenderer.md","title":"render/scenes/VoxelWorldRenderer.js","description":"","kind":"reference","source":"engine/render/scenes/VoxelWorldRenderer.js","updated":"","headings":["render/scenes/VoxelWorldRenderer.js","Functions","async createVoxelWorldRenderer(options)","updateVoxelWorldFrameUniforms(device, frameBuffer, viewProj, view, proj, cameraPos, time,)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a voxel world renderer. Parameters: (Object) — No description in source JSDoc. (GPUDevice) — No description in source JSDoc. (string) — swapchain format (number) — ground size (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c7559ba714207be79537576061e21091d46727c3d59bf590954470204d4a6213"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/sdf/MeshSDFGenerator.md::0000","path":"engine/reference/render/sdf/MeshSDFGenerator.md","title":"render/sdf/MeshSDFGenerator.js","description":"","kind":"reference","source":"engine/render/sdf/MeshSDFGenerator.js","updated":"","headings":["render/sdf/MeshSDFGenerator.js","Functions","validateMesh(positions, indices)","simplifyMesh(positions, indices, targetTriangles = 1000)","analyzeMesh(positions, indices)","computeBounds(positions)","fitPrimitive(positions, indices)","fitCapsules(positions, indices, maxCapsules = 8)","generateTriangleBuffer(positions, indices)","bakeSDF3D(positions, indices, resolution = 32)","async initGPUBaker(device)","hasGPUBaker()","async bakeSDF3DGPU(positions, indices, resolution = 32)","generateMeshSDF(positions, indices, options = {})","getCachedMeshSDF(meshId, positions, indices, options = {})","clearSDFCache()","async generateMeshSDFAsync(positions, indices, options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Validate and repair mesh data removes invalid vertices and degenerate triangles Simplify high poly mesh for faster SDF generation Analyze mesh and determine best SDF approach Compute axis aligned bounding box Auto fit best primitive shape to mesh Fit multiple capsules to a mesh (for ragdoll bodies) Generate triangle buffer data for GPU SDF sampling Bake 3D SDF texture from mesh using BVH acceleration Initialize GPU SDF baker Parameters: (GPUDevice) — WebGPU device Check if GPU baking is available Bake 3D SDF texture using GPU compute ( 100x faster) Falls back to CPU if GPU not available Generate hybrid SDF for a mesh automatically chooses best approach Now with mesh validation, simplification, and voxel acceleration Get or generate cached SDF for a mesh Clear SDF cache Async version of generateMeshSDF with GPU acceleration Use this for high resolution baking (64³+) Constants — WGSL shader code for triangle buffer SDF sampling — WGSL shader code for 3D texture SDF sampling <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and","contentHash":"28425daecd0334a2e940c6fb7b414997347c0ebce9d32769c0ce4804b35d89b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/sdf/MeshSDFGenerator.md::0001","path":"engine/reference/render/sdf/MeshSDFGenerator.md","title":"render/sdf/MeshSDFGenerator.js","description":"","kind":"reference","source":"engine/render/sdf/MeshSDFGenerator.js","updated":"","headings":["render/sdf/MeshSDFGenerator.js","Functions","validateMesh(positions, indices)","simplifyMesh(positions, indices, targetTriangles = 1000)","analyzeMesh(positions, indices)","computeBounds(positions)","fitPrimitive(positions, indices)","fitCapsules(positions, indices, maxCapsules = 8)","generateTriangleBuffer(positions, indices)","bakeSDF3D(positions, indices, resolution = 32)","async initGPUBaker(device)","hasGPUBaker()","async bakeSDF3DGPU(positions, indices, resolution = 32)","generateMeshSDF(positions, indices, options = {})","getCachedMeshSDF(meshId, positions, indices, options = {})","clearSDFCache()","async generateMeshSDFAsync(positions, indices, options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e57ab96186a97ca65ad72323f7f73842169ff4b4bc001ceca3c676c400fb9399"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/sdf/SDFBakeCompute.md::0000","path":"engine/reference/render/sdf/SDFBakeCompute.md","title":"render/sdf/SDFBakeCompute.js","description":"","kind":"reference","source":"engine/render/sdf/SDFBakeCompute.js","updated":"","headings":["render/sdf/SDFBakeCompute.js","Classes","class SDFBakeCompute","Functions","createSDFBaker(device)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes GPU accelerated SDF baker Method Signature Summary Bake SDF texture on GPU Functions Create GPU SDF baker instance <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9046856d9e38040ebe1564f2e730645af5e41a56b49af56b48e2d7c3b9f0f108"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/sdf/index.md::0000","path":"engine/reference/render/sdf/index.md","title":"render/sdf/index.js","description":"","kind":"reference","source":"engine/render/sdf/index.js","updated":"","headings":["render/sdf/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SDF Utilities Signed Distance Field generation and baking Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f2f3b3c60b49e6deee99cecd788934e43f209c7de013a0b2d29761f68d5f8c6e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/ShaderComposer.md::0000","path":"engine/reference/render/shaders/ShaderComposer.md","title":"render/shaders/ShaderComposer.js","description":"","kind":"reference","source":"engine/render/shaders/ShaderComposer.js","updated":"","headings":["render/shaders/ShaderComposer.js","Classes","class ShaderComposer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Compose a shader from library chunks Resolve library dependencies in correct order Create a multi pass shader configuration Get available library chunks Validate library path <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f24f23c57f28966e1052fb6b13335a99fb045bcca0d185b5bfab9f0c63aa40c9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/ShaderLoader.md::0000","path":"engine/reference/render/shaders/ShaderLoader.md","title":"render/shaders/ShaderLoader.js","description":"","kind":"reference","source":"engine/render/shaders/ShaderLoader.js","updated":"","headings":["render/shaders/ShaderLoader.js","Functions","createShaderLoader(options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/ShaderLoaderJS.md::0000","path":"engine/reference/render/shaders/ShaderLoaderJS.md","title":"render/shaders/ShaderLoaderJS.js","description":"","kind":"reference","source":"engine/render/shaders/ShaderLoaderJS.js","updated":"","headings":["render/shaders/ShaderLoaderJS.js","Functions","getShaderSource(name)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/ShaderSchema.md::0000","path":"engine/reference/render/shaders/ShaderSchema.md","title":"render/shaders/ShaderSchema.js","description":"","kind":"reference","source":"engine/render/shaders/ShaderSchema.js","updated":"","headings":["render/shaders/ShaderSchema.js","Functions","generateStructWGSL(schema)","generateBindingsWGSL(groupSchema)","generateVertexInputWGSL(layout)","alignOffset(offset, alignment)","calculateBufferSize(schema)","createUniformBuffer(schema)","writeUniformField(buffer, schema, fieldName, value)","readUniformField(buffer, schema, fieldName)","validateUniformBuffer(buffer, schema)","validateBindingGroup(entries, groupSchema)","createFrameUniformsBuffer()","createModelUniformsBuffer()","createMaterialUniformsBuffer()","createParticleParamsBuffer()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Generate WGSL struct definition from schema Generate WGSL binding declarations from binding group schema Generate WGSL vertex input struct from vertex layout Calculate aligned byte offset for a field Calculate total buffer size from schema (with alignment) Create a typed array buffer matching schema Write a value to a uniform buffer at the field's offset Read a value from a uniform buffer at the field's offset Validate a uniform buffer against schema Validate binding group layout Create frame uniforms buffer with defaults Create model uniforms buffer with defaults Create material uniforms buffer with defaults Create particle params buffer with defaults Constants — WGSL type sizes in bytes (aligned to 16 byte boundaries for uniforms) — Buffer usage types — Texture types — Frame uniforms camera and time data, updated every frame — Model uniforms per object transform data — Light struct for dynamic lighting — PBR material uniforms — Particle render params — Post process common params — Standard binding group layouts — Standard vertex layouts — Common WGSL utility functions — Full screen triangle vertex shader <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it.","contentHash":"de8c7de284ea02c1dac8418c64bf818fa4b6301f4504c95d6e09bf113792a4f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/ShaderSchema.md::0001","path":"engine/reference/render/shaders/ShaderSchema.md","title":"render/shaders/ShaderSchema.js","description":"","kind":"reference","source":"engine/render/shaders/ShaderSchema.js","updated":"","headings":["render/shaders/ShaderSchema.js","Functions","generateStructWGSL(schema)","generateBindingsWGSL(groupSchema)","generateVertexInputWGSL(layout)","alignOffset(offset, alignment)","calculateBufferSize(schema)","createUniformBuffer(schema)","writeUniformField(buffer, schema, fieldName, value)","readUniformField(buffer, schema, fieldName)","validateUniformBuffer(buffer, schema)","validateBindingGroup(entries, groupSchema)","createFrameUniformsBuffer()","createModelUniformsBuffer()","createMaterialUniformsBuffer()","createParticleParamsBuffer()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"963c22a5887cb3112c91198dffa1e47f21f8ed7e166502a2ea93a56ccbaddcd4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/ShaderSources.md::0000","path":"engine/reference/render/shaders/ShaderSources.md","title":"render/shaders/ShaderSources.js","description":"","kind":"reference","source":"engine/render/shaders/ShaderSources.js","updated":"","headings":["render/shaders/ShaderSources.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e4978c03c03e95990629669666cce710284680e9b9248d7e78752491bdd86726"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/WgslPreprocessor.md::0000","path":"engine/reference/render/shaders/WgslPreprocessor.md","title":"render/shaders/WgslPreprocessor.js","description":"","kind":"reference","source":"engine/render/shaders/WgslPreprocessor.js","updated":"","headings":["render/shaders/WgslPreprocessor.js","Functions","wgsl(strings, ...values)","wgslIf(condition, ifTrue, ifFalse = '')","wgslFor(count, template)","wgslVariant(features, variants)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Tagged template literal for WGSL preprocessing Parameters: (TemplateStringsArray) — Template literal strings (...any) — Interpolated values Returns: Processed WGSL code Simple string based conditionals without tagged template Useful for simpler cases Parameters: (boolean) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. Repeat a string N times with index substitution ${i} in the template is replaced with the iteration index Parameters: (number) — No description in source JSDoc. (string) — No description in source JSDoc. Create a shader variant by selecting features Parameters: (Object) — Feature flags { useShadows: true, ... } (Object) — Code blocks for each feature <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module","contentHash":"acacd6696b43132d401c5307573807a1fdceb9f1e99de993ae9f119b22bf5c71"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/WgslPreprocessor.md::0001","path":"engine/reference/render/shaders/WgslPreprocessor.md","title":"render/shaders/WgslPreprocessor.js","description":"","kind":"reference","source":"engine/render/shaders/WgslPreprocessor.js","updated":"","headings":["render/shaders/WgslPreprocessor.js","Functions","wgsl(strings, ...values)","wgslIf(condition, ifTrue, ifFalse = '')","wgslFor(count, template)","wgslVariant(features, variants)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c5b19900be272b48cf68505e0f3f8a40dd494ad59c4742bd848d4c8a81715746"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/clear_color.md::0000","path":"engine/reference/render/shaders/core/clear_color.md","title":"render/shaders/core/clear_color.js","description":"","kind":"reference","source":"engine/render/shaders/core/clear_color.js","updated":"","headings":["render/shaders/core/clearcolor.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Clear Color Shader Full screen clear with uniform color <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f950ff687417ebf69d4eb5b61c91f63d819dc78bb12d4effaaeb87296ddef2ee"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/global_common.md::0000","path":"engine/reference/render/shaders/core/global_common.md","title":"render/shaders/core/global_common.js","description":"","kind":"reference","source":"engine/render/shaders/core/global_common.js","updated":"","headings":["render/shaders/core/globalcommon.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/lighting.md::0000","path":"engine/reference/render/shaders/core/lighting.md","title":"render/shaders/core/lighting.js","description":"","kind":"reference","source":"engine/render/shaders/core/lighting.js","updated":"","headings":["render/shaders/core/lighting.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/monitor_patterns.md::0000","path":"engine/reference/render/shaders/core/monitor_patterns.md","title":"render/shaders/core/monitor_patterns.js","description":"","kind":"reference","source":"engine/render/shaders/core/monitor_patterns.js","updated":"","headings":["render/shaders/core/monitorpatterns.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Monitor Patterns Test patterns for display calibration <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"801265f6ae16f9bd376dd5b6116235ad2421eddc5605575b78aece1957d3893c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/particles_billboard_legacy.md::0000","path":"engine/reference/render/shaders/core/particles_billboard_legacy.md","title":"render/shaders/core/particles_billboard_legacy.js","description":"","kind":"reference","source":"engine/render/shaders/core/particles_billboard_legacy.js","updated":"","headings":["render/shaders/core/particlesbillboardlegacy.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Legacy Particles Billboard Horizontal quad particles with cloud like appearance Note: The main particles billboard shader is in modules/core/particles billboard.js <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"cfc9326295fd1a24c31c6f2c32458b1e91f53de86936aa799e43dc87a6dc95c8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/solid_color.md::0000","path":"engine/reference/render/shaders/core/solid_color.md","title":"render/shaders/core/solid_color.js","description":"","kind":"reference","source":"engine/render/shaders/core/solid_color.js","updated":"","headings":["render/shaders/core/solidcolor.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Solid Color Shader Simple vertex color passthrough <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"66904417a8509cd613b1d24904acb95342f3c63871e8bc3ce7d2ec81fe0fa5e0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/standard.md::0000","path":"engine/reference/render/shaders/core/standard.md","title":"render/shaders/core/standard.js","description":"","kind":"reference","source":"engine/render/shaders/core/standard.js","updated":"","headings":["render/shaders/core/standard.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — ============================================================================ 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) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place","contentHash":"e0e6e28d720824ea7f4ff097c91d5e2ff0a3d773a663b42ecb94e6ce026192d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/standard.md::0001","path":"engine/reference/render/shaders/core/standard.md","title":"render/shaders/core/standard.js","description":"","kind":"reference","source":"engine/render/shaders/core/standard.js","updated":"","headings":["render/shaders/core/standard.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"49524bad0a8a1b8928369052db2ba099038649444ee3ce8f219bf2b5510114e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/core/textured_quad.md::0000","path":"engine/reference/render/shaders/core/textured_quad.md","title":"render/shaders/core/textured_quad.js","description":"","kind":"reference","source":"engine/render/shaders/core/textured_quad.js","updated":"","headings":["render/shaders/core/texturedquad.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Textured Quad Shader Simple texture sampling <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3bf0d398aea4245d90006503ec3efeceb8dfbdc01ee033b368b73f6c4e912afc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/debug/cloth_debug.md::0000","path":"engine/reference/render/shaders/debug/cloth_debug.md","title":"render/shaders/debug/cloth_debug.js","description":"","kind":"reference","source":"engine/render/shaders/debug/cloth_debug.js","updated":"","headings":["render/shaders/debug/clothdebug.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Cloth Debug Shader Visualize cloth mesh with normal based coloring <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c0cb9f2466b17381d64a308e2e5686f05368a2f36bfbf7771d81131dac791136"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/debug/debug_views.md::0000","path":"engine/reference/render/shaders/debug/debug_views.md","title":"render/shaders/debug/debug_views.js","description":"","kind":"reference","source":"engine/render/shaders/debug/debug_views.js","updated":"","headings":["render/shaders/debug/debugviews.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Debug Views Shader Visualize different render targets (color, depth, normals, roughness/metallic) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b387c107cdcc60c93faa6699a990f110f5b5a8078fba8aaa4783ebaf86cd2c00"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/debug/fluid_debug.md::0000","path":"engine/reference/render/shaders/debug/fluid_debug.md","title":"render/shaders/debug/fluid_debug.js","description":"","kind":"reference","source":"engine/render/shaders/debug/fluid_debug.js","updated":"","headings":["render/shaders/debug/fluiddebug.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Fluid Debug Shader Visualize fluid density grid slices or max projection <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"abbf9c34eaa87324d3249c9e100550606c57356c7821e0a6d7ae04a8368e9123"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/effects/spell_effects.wgsl.md::0000","path":"engine/reference/render/shaders/effects/spell_effects.wgsl.md","title":"render/shaders/effects/spell_effects.wgsl.js","description":"","kind":"reference","source":"engine/render/shaders/effects/spell_effects.wgsl.js","updated":"","headings":["render/shaders/effects/spelleffects.wgsl.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"73e97f1a8101fef4bbd42ff2c6c04a919b7fb6d0c58240b6d10e1a498289f15a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/materials/pbr_brdf.md::0000","path":"engine/reference/render/shaders/materials/pbr_brdf.md","title":"render/shaders/materials/pbr_brdf.js","description":"","kind":"reference","source":"engine/render/shaders/materials/pbr_brdf.js","updated":"","headings":["render/shaders/materials/pbrbrdf.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"db53bca0cf86e5b0c4a6e8014225725b1428ba4d9385226abd779de1e3d495b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/materials/pbr_extensions.md::0000","path":"engine/reference/render/shaders/materials/pbr_extensions.md","title":"render/shaders/materials/pbr_extensions.js","description":"","kind":"reference","source":"engine/render/shaders/materials/pbr_extensions.js","updated":"","headings":["render/shaders/materials/pbrextensions.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — PBR Extensions Placeholder hooks for subsurface scattering, fog, and post lighting effects <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"bda6e7664ccc2f99055224787b4166d70b11f8e358eb58fc495758f097173643"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/materials/pbr_ibl.md::0000","path":"engine/reference/render/shaders/materials/pbr_ibl.md","title":"render/shaders/materials/pbr_ibl.js","description":"","kind":"reference","source":"engine/render/shaders/materials/pbr_ibl.js","updated":"","headings":["render/shaders/materials/pbribl.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — PBR IBL Image based lighting for diffuse irradiance and specular reflections <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e512740d9b788c5c4b88dc99ed05b5883cc0eeb4f4ff0c61f90c9329913adfbd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/materials/pbr_material_uniforms.md::0000","path":"engine/reference/render/shaders/materials/pbr_material_uniforms.md","title":"render/shaders/materials/pbr_material_uniforms.js","description":"","kind":"reference","source":"engine/render/shaders/materials/pbr_material_uniforms.js","updated":"","headings":["render/shaders/materials/pbrmaterialuniforms.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — PBR Material Uniforms Standard material parameter bindings <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"19f3571a1263d25ab1cf2ab67ddf63ca7a926341e6c4c61b551488c69fa82d0d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/materials/shadow_pcf.md::0000","path":"engine/reference/render/shaders/materials/shadow_pcf.md","title":"render/shaders/materials/shadow_pcf.js","description":"","kind":"reference","source":"engine/render/shaders/materials/shadow_pcf.js","updated":"","headings":["render/shaders/materials/shadowpcf.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Shadow PCF Percentage closer filtering for soft shadows <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"d289be6895df2904a672f5828727c9dd874da5c2676d401700c529cf47284a02"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/materials/unlit_world.md::0000","path":"engine/reference/render/shaders/materials/unlit_world.md","title":"render/shaders/materials/unlit_world.js","description":"","kind":"reference","source":"engine/render/shaders/materials/unlit_world.js","updated":"","headings":["render/shaders/materials/unlitworld.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Unlit World Shader Simple unlit rendering with checkerboard floor <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"99467092ce0fd803a85ee04ccc77ab71ae8f58f6fccc2719774fffdc3da0b556"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/materials/voxel_world.md::0000","path":"engine/reference/render/shaders/materials/voxel_world.md","title":"render/shaders/materials/voxel_world.js","description":"","kind":"reference","source":"engine/render/shaders/materials/voxel_world.js","updated":"","headings":["render/shaders/materials/voxelworld.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/anime_explosion.md::0000","path":"engine/reference/render/shaders/modules/chunks/anime_explosion.md","title":"render/shaders/modules/chunks/anime_explosion.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/anime_explosion.js","updated":"","headings":["render/shaders/modules/chunks/animeexplosion.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device","contentHash":"8dcbb905f42401e34e78e58b1619085e667cb24e73ff18ca669b66e6fe31baad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/anime_explosion.md::0001","path":"engine/reference/render/shaders/modules/chunks/anime_explosion.md","title":"render/shaders/modules/chunks/anime_explosion.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/anime_explosion.js","updated":"","headings":["render/shaders/modules/chunks/animeexplosion.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"520f7b5bd9bc52d8235eb30d8484f95c97beef8d309095e670fe2dbd7cf4e35e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/anime_toon.md::0000","path":"engine/reference/render/shaders/modules/chunks/anime_toon.md","title":"render/shaders/modules/chunks/anime_toon.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/anime_toon.js","updated":"","headings":["render/shaders/modules/chunks/animetoon.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"19375d6ad1bc7bd7e0a2c23f698f030e025bc6ec62c1364689c82d1146c2f0ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/area_lighting.md::0000","path":"engine/reference/render/shaders/modules/chunks/area_lighting.md","title":"render/shaders/modules/chunks/area_lighting.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/area_lighting.js","updated":"","headings":["render/shaders/modules/chunks/arealighting.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations.","contentHash":"312a699d4eb4193762877fe1e3fbcd8ddec3c6bcd2491fe27654f8fd898f376a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/area_lighting.md::0001","path":"engine/reference/render/shaders/modules/chunks/area_lighting.md","title":"render/shaders/modules/chunks/area_lighting.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/area_lighting.js","updated":"","headings":["render/shaders/modules/chunks/arealighting.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a3e420e0268259fc8f91b864c9bd0543cf595cefb1575df1db131039bb97fec4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/blend_math.md::0000","path":"engine/reference/render/shaders/modules/chunks/blend_math.md","title":"render/shaders/modules/chunks/blend_math.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/blend_math.js","updated":"","headings":["render/shaders/modules/chunks/blendmath.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared alpha compositing, separable blend, coverage, and ordered dither helpers for WGSL. Constants — Shared alpha compositing, separable blend, coverage, and ordered dither helpers for WGSL. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"063a63ccb709f2dc41e1ac978d7d46e7120c68d43874415910b8a36300a7dc53"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/camera_utils.md::0000","path":"engine/reference/render/shaders/modules/chunks/camera_utils.md","title":"render/shaders/modules/chunks/camera_utils.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/camera_utils.js","updated":"","headings":["render/shaders/modules/chunks/camerautils.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"99ccc3591e1e8ce427d7ba977e3192cc1fb287ef162359cf4d7efd85e2df21e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/color_math.md::0000","path":"engine/reference/render/shaders/modules/chunks/color_math.md","title":"render/shaders/modules/chunks/color_math.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/color_math.js","updated":"","headings":["render/shaders/modules/chunks/colormath.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared sRGB, luminance, contrast, YUV/YCbCr, and tone map helpers for WGSL. Constants — Shared sRGB, luminance, contrast, YUV/YCbCr, and tone map helpers for WGSL. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9ba4e09e6df6c626afda5abba302c63272de4b5257914950a91b66bce3781392"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/denoise.md::0000","path":"engine/reference/render/shaders/modules/chunks/denoise.md","title":"render/shaders/modules/chunks/denoise.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/denoise.js","updated":"","headings":["render/shaders/modules/chunks/denoise.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b08f52c61c5255ff216195d8ae37b13ca1b8a6b5a61e06c53462f03212357129"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/electricity.md::0000","path":"engine/reference/render/shaders/modules/chunks/electricity.md","title":"render/shaders/modules/chunks/electricity.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/electricity.js","updated":"","headings":["render/shaders/modules/chunks/electricity.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"793680839ec0fc33a68737bc132e57f493ca1ef881236ad7e64f7dd9b1975e5f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/fire_turbulence.md::0000","path":"engine/reference/render/shaders/modules/chunks/fire_turbulence.md","title":"render/shaders/modules/chunks/fire_turbulence.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/fire_turbulence.js","updated":"","headings":["render/shaders/modules/chunks/fireturbulence.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: )","contentHash":"26ada0612884cbffdbd9d8ca0bd7b70c49a7e1aaba1fb75405642584daf76044"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/fire_turbulence.md::0001","path":"engine/reference/render/shaders/modules/chunks/fire_turbulence.md","title":"render/shaders/modules/chunks/fire_turbulence.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/fire_turbulence.js","updated":"","headings":["render/shaders/modules/chunks/fireturbulence.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"da5704c1f02f69e8b5a187bd3956c375e4c5e226d7ad7982a5c342a6b04a6921"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/fractal_edges.md::0000","path":"engine/reference/render/shaders/modules/chunks/fractal_edges.md","title":"render/shaders/modules/chunks/fractal_edges.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/fractal_edges.js","updated":"","headings":["render/shaders/modules/chunks/fractaledges.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not","contentHash":"1af66739fd64601561006b48d650bfdb3cabe7e568b94dd15fef0cfd2bfb9cf9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/fractal_edges.md::0001","path":"engine/reference/render/shaders/modules/chunks/fractal_edges.md","title":"render/shaders/modules/chunks/fractal_edges.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/fractal_edges.js","updated":"","headings":["render/shaders/modules/chunks/fractaledges.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"99c160fc9c7d3c99511225eb977f48c788130057ffdd86ac8a4f8cf34dcf88fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/fullscreen_quad.md::0000","path":"engine/reference/render/shaders/modules/chunks/fullscreen_quad.md","title":"render/shaders/modules/chunks/fullscreen_quad.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/fullscreen_quad.js","updated":"","headings":["render/shaders/modules/chunks/fullscreenquad.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 = ; <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b3b1532563948da39afc6ecc6343b9f0bb680700a073c7372848a0864649d91d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/lighting_common.md::0000","path":"engine/reference/render/shaders/modules/chunks/lighting_common.md","title":"render/shaders/modules/chunks/lighting_common.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/lighting_common.js","updated":"","headings":["render/shaders/modules/chunks/lightingcommon.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/magic_effects.md::0000","path":"engine/reference/render/shaders/modules/chunks/magic_effects.md","title":"render/shaders/modules/chunks/magic_effects.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/magic_effects.js","updated":"","headings":["render/shaders/modules/chunks/magiceffects.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/math_common.md::0000","path":"engine/reference/render/shaders/modules/chunks/math_common.md","title":"render/shaders/modules/chunks/math_common.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/math_common.js","updated":"","headings":["render/shaders/modules/chunks/mathcommon.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Shared Math Constants & Utilities for WGSL Shaders Usage: Import and concatenate at the beginning of shaders that need these. Example: + yourShaderCode <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"aaab566896b7d617d113e59a15ea5ae734d18678a69811c43a0ad5033a8e4fd2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/noise2d.md::0000","path":"engine/reference/render/shaders/modules/chunks/noise2d.md","title":"render/shaders/modules/chunks/noise2d.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/noise2d.js","updated":"","headings":["render/shaders/modules/chunks/noise2d.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"95603d7a4567a9e7654b3c0573839e958bdfd173b22cfd4f982fb675e3735188"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/noise3d.md::0000","path":"engine/reference/render/shaders/modules/chunks/noise3d.md","title":"render/shaders/modules/chunks/noise3d.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/noise3d.js","updated":"","headings":["render/shaders/modules/chunks/noise3d.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"253f3605a7c720314799d28fd1c7fdc77c1d44ad4d66358ed1f37c7979c5a2a4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/packing.md::0000","path":"engine/reference/render/shaders/modules/chunks/packing.md","title":"render/shaders/modules/chunks/packing.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/packing.js","updated":"","headings":["render/shaders/modules/chunks/packing.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Normalized integer packing helpers mirrored from engine/core/math/MathPacking.js. Constants — Normalized integer packing helpers mirrored from engine/core/math/MathPacking.js. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"abe080c573a8efa5da95785e2b29ce5fffe0276b5e1f1bb5c12f10bbcee72cfd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/pathtracing_gi.md::0000","path":"engine/reference/render/shaders/modules/chunks/pathtracing_gi.md","title":"render/shaders/modules/chunks/pathtracing_gi.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/pathtracing_gi.js","updated":"","headings":["render/shaders/modules/chunks/pathtracinggi.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/pbr_materials.md::0000","path":"engine/reference/render/shaders/modules/chunks/pbr_materials.md","title":"render/shaders/modules/chunks/pbr_materials.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/pbr_materials.js","updated":"","headings":["render/shaders/modules/chunks/pbrmaterials.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"7fe98a9a09c6a7b73d364333a93d8ec10e5bc8e5c6ed8d12fd9955f7bc35b900"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/quadtree.md::0000","path":"engine/reference/render/shaders/modules/chunks/quadtree.md","title":"render/shaders/modules/chunks/quadtree.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/quadtree.js","updated":"","headings":["render/shaders/modules/chunks/quadtree.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"25e1d7a3af2ef226e3985c9dfc7f91778d710fb9dd210a27de9a8c33eefac60e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/quaternion.md::0000","path":"engine/reference/render/shaders/modules/chunks/quaternion.md","title":"render/shaders/modules/chunks/quaternion.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/quaternion.js","updated":"","headings":["render/shaders/modules/chunks/quaternion.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also:","contentHash":"f53b21eb71b9a80f6caba51e2b5b5714ea55ebddd4de3449ae008ce885d1cd53"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/quaternion.md::0001","path":"engine/reference/render/shaders/modules/chunks/quaternion.md","title":"render/shaders/modules/chunks/quaternion.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/quaternion.js","updated":"","headings":["render/shaders/modules/chunks/quaternion.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a009769167d1e9c16ae9e9ff8517fa03a3403171a07c846535bfe9753c30e1f2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/ray_intersect.md::0000","path":"engine/reference/render/shaders/modules/chunks/ray_intersect.md","title":"render/shaders/modules/chunks/ray_intersect.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/ray_intersect.js","updated":"","headings":["render/shaders/modules/chunks/rayintersect.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3ffaf396487e14ec18674637573e24c61f9ebc2a3ed4ededb3a1a83d5fb43091"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/ray_termination.md::0000","path":"engine/reference/render/shaders/modules/chunks/ray_termination.md","title":"render/shaders/modules/chunks/ray_termination.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/ray_termination.js","updated":"","headings":["render/shaders/modules/chunks/raytermination.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/ray_tracing.md::0000","path":"engine/reference/render/shaders/modules/chunks/ray_tracing.md","title":"render/shaders/modules/chunks/ray_tracing.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/ray_tracing.js","updated":"","headings":["render/shaders/modules/chunks/raytracing.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"39ea53e84d394e2f3edb8fad9b316e468a77a00fe73206622441e555e6b36e7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/raymarching.md::0000","path":"engine/reference/render/shaders/modules/chunks/raymarching.md","title":"render/shaders/modules/chunks/raymarching.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/raymarching.js","updated":"","headings":["render/shaders/modules/chunks/raymarching.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/restir_guide_policy.md::0000","path":"engine/reference/render/shaders/modules/chunks/restir_guide_policy.md","title":"render/shaders/modules/chunks/restir_guide_policy.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/restir_guide_policy.js","updated":"","headings":["render/shaders/modules/chunks/restirguidepolicy.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/sdf_primitives.md::0000","path":"engine/reference/render/shaders/modules/chunks/sdf_primitives.md","title":"render/shaders/modules/chunks/sdf_primitives.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/sdf_primitives.js","updated":"","headings":["render/shaders/modules/chunks/sdfprimitives.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"edd97d8c60a81ef0621247d2f09b1f827c374b2d69f7035a34df7ac54a6f06e0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/shadows_ao.md::0000","path":"engine/reference/render/shaders/modules/chunks/shadows_ao.md","title":"render/shaders/modules/chunks/shadows_ao.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/shadows_ao.js","updated":"","headings":["render/shaders/modules/chunks/shadowsao.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0b6344c0cac5d9443fcc06f6093a4a9a56ede62825be06eaa07f06a838826828"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/spell_particles.md::0000","path":"engine/reference/render/shaders/modules/chunks/spell_particles.md","title":"render/shaders/modules/chunks/spell_particles.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/spell_particles.js","updated":"","headings":["render/shaders/modules/chunks/spellparticles.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Spell Particle Effects WGSL Shader Chunk Particle behaviors for spell effects including projectiles, shields, auras, and various magical effects. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1815703ad2b6e65f5b2915bb234428fa9a657eac0a80d35f470a13a93b265a08"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/structs_common.md::0000","path":"engine/reference/render/shaders/modules/chunks/structs_common.md","title":"render/shaders/modules/chunks/structs_common.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/structs_common.js","updated":"","headings":["render/shaders/modules/chunks/structscommon.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/temporal_aa.md::0000","path":"engine/reference/render/shaders/modules/chunks/temporal_aa.md","title":"render/shaders/modules/chunks/temporal_aa.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/temporal_aa.js","updated":"","headings":["render/shaders/modules/chunks/temporalaa.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f816b2b4506d410a20da25395b72d38f2b8c559f508204e106da74cc63f34efb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/texture_math.md::0000","path":"engine/reference/render/shaders/modules/chunks/texture_math.md","title":"render/shaders/modules/chunks/texture_math.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/texture_math.js","updated":"","headings":["render/shaders/modules/chunks/texturemath.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared texture coordinate, mip, atlas, and virtual texture helpers for WGSL. Constants — Shared texture coordinate, mip, atlas, and virtual texture helpers for WGSL. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"56ed1f63968b910906ccc32acbe8579d4fc8b1c3d30d05270fec5c77a817049f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/volumetric_clouds.md::0000","path":"engine/reference/render/shaders/modules/chunks/volumetric_clouds.md","title":"render/shaders/modules/chunks/volumetric_clouds.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/volumetric_clouds.js","updated":"","headings":["render/shaders/modules/chunks/volumetricclouds.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"fe75685dffaee72d3d2abbbde780818daafd2a598de8f97913c39899057b387e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/voronoi.md::0000","path":"engine/reference/render/shaders/modules/chunks/voronoi.md","title":"render/shaders/modules/chunks/voronoi.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/voronoi.js","updated":"","headings":["render/shaders/modules/chunks/voronoi.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"3fa9882ab7f90888932c11bffa9ab84dfdd0002bf17efc5913d004f6020dfe9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/chunks/voxel_world.md::0000","path":"engine/reference/render/shaders/modules/chunks/voxel_world.md","title":"render/shaders/modules/chunks/voxel_world.js","description":"","kind":"reference","source":"engine/render/shaders/modules/chunks/voxel_world.js","updated":"","headings":["render/shaders/modules/chunks/voxelworld.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e2a3b49a41f14da12cd128c5b45cfe60611a180f4ea883632c93e035e0e58157"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/compute/gpu_tile.md::0000","path":"engine/reference/render/shaders/modules/compute/gpu_tile.md","title":"render/shaders/modules/compute/gpu_tile.js","description":"","kind":"reference","source":"engine/render/shaders/modules/compute/gpu_tile.js","updated":"","headings":["render/shaders/modules/compute/gputile.js","Classes","class GpuTile","Functions","gpuTile(opts)","TILEDNBODYEXAMPLEWGSL()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 = 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 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()} Classes 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","contentHash":"90852b902d41a2a9157f178213a0053cc92d96176edfbdaee59a2f68547d6f6c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/compute/gpu_tile.md::0001","path":"engine/reference/render/shaders/modules/compute/gpu_tile.md","title":"render/shaders/modules/compute/gpu_tile.js","description":"","kind":"reference","source":"engine/render/shaders/modules/compute/gpu_tile.js","updated":"","headings":["render/shaders/modules/compute/gputile.js","Classes","class GpuTile","Functions","gpuTile(opts)","TILEDNBODYEXAMPLEWGSL()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":3,"text":"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 = 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 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()} Method Signature Summary Module scope workgroup shared memory declaration. Paste this once, outside any function, at the top of your compute shader. Cooperative single element load + barrier. Each invocation loads one element; call this inside a tile loop before processing. Inserts so the tile is fully populated before any thread reads it. Expression to read element from the tile. Trailing workgroupBarrier() to protect the tile from being overwritten before all threads finish reading. Call after the inner processing loop. Generate a","contentHash":"1cdcb77470e83f2c53b947e67a06361e07e2349dabe3b3271b98252385128628"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/compute/gpu_tile.md::0002","path":"engine/reference/render/shaders/modules/compute/gpu_tile.md","title":"render/shaders/modules/compute/gpu_tile.js","description":"","kind":"reference","source":"engine/render/shaders/modules/compute/gpu_tile.js","updated":"","headings":["render/shaders/modules/compute/gputile.js","Classes","class GpuTile","Functions","gpuTile(opts)","TILEDNBODYEXAMPLEWGSL()","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":2,"chunkCount":3,"text":"Trailing workgroupBarrier() to protect the tile from being overwritten before all threads finish reading. Call after the inner processing loop. Generate a complete outer tiled loop that: 1. Iterates over the buffer in tiles of elements 2. Cooperatively loads each tile into workgroup memory 3. Executes your inner with access to the tile 4. Emits the trailing barrier before moving to the next tile Inside you have access to: <name base tile start index in the global buffer <name len number of valid elements in this tile (≤ tileSize) Use to read element k from the tile. Return a summary string useful for shader comments / debugging. Functions Convenience factory — same as . Parameters: (object) — No description in","contentHash":"873cf81eba375b0bad1505d34f6e63ead079e209ba6f3b6836b09416ab6d4b4e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/compute/grid_splat.md::0000","path":"engine/reference/render/shaders/modules/compute/grid_splat.md","title":"render/shaders/modules/compute/grid_splat.js","description":"","kind":"reference","source":"engine/render/shaders/modules/compute/grid_splat.js","updated":"","headings":["render/shaders/modules/compute/gridsplat.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"04b7b31e2dcb4dc7c45d1ccc3e3c2699071b13e327ad37b29c37e71a5cdd9766"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_billboard.md::0000","path":"engine/reference/render/shaders/modules/core/particles_billboard.md","title":"render/shaders/modules/core/particles_billboard.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_billboard.js","updated":"","headings":["render/shaders/modules/core/particlesbillboard.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_billboard_fragment.md::0000","path":"engine/reference/render/shaders/modules/core/particles_billboard_fragment.md","title":"render/shaders/modules/core/particles_billboard_fragment.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_billboard_fragment.js","updated":"","headings":["render/shaders/modules/core/particlesbillboardfragment.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — ============================================================================ 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another,","contentHash":"3c5782e641647119f4eb4c52ba70d899c339436bd5ecb0609aa2912e1b98d539"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_billboard_fragment.md::0001","path":"engine/reference/render/shaders/modules/core/particles_billboard_fragment.md","title":"render/shaders/modules/core/particles_billboard_fragment.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_billboard_fragment.js","updated":"","headings":["render/shaders/modules/core/particlesbillboardfragment.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a94182e1ab92787acf76e2b5915f97c766937933cba54ec4d0b60dcb420a3924"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_billboard_vertex.md::0000","path":"engine/reference/render/shaders/modules/core/particles_billboard_vertex.md","title":"render/shaders/modules/core/particles_billboard_vertex.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_billboard_vertex.js","updated":"","headings":["render/shaders/modules/core/particlesbillboardvertex.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — ============================================================================ 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue,","contentHash":"77f7a4e5aea54c00e0d61e0adce1069afaff013cc077f5f4ef7500545c558471"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_billboard_vertex.md::0001","path":"engine/reference/render/shaders/modules/core/particles_billboard_vertex.md","title":"render/shaders/modules/core/particles_billboard_vertex.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_billboard_vertex.js","updated":"","headings":["render/shaders/modules/core/particlesbillboardvertex.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"2 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f35504cc5536ea67e6bb14dad7d7f4204695dbc81b857a3ae8d9fe85747ba342"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_blackbody.md::0000","path":"engine/reference/render/shaders/modules/core/particles_blackbody.md","title":"render/shaders/modules/core/particles_blackbody.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_blackbody.js","updated":"","headings":["render/shaders/modules/core/particlesblackbody.js","Functions","generateBlackbodyLUT(minTemp = 300, maxTemp = 30000)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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). Returns: } Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"94ef2d68c9ac82afcca66b1d1264fddb2714d51173c2452f5315eb1938ee8bb8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_bond_line.md::0000","path":"engine/reference/render/shaders/modules/core/particles_bond_line.md","title":"render/shaders/modules/core/particles_bond_line.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_bond_line.js","updated":"","headings":["render/shaders/modules/core/particlesbondline.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"c4648af0b3f11efe2bda42ae29501c4e802120047c57ca5c5d64b3977c261255"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_field_lines.md::0000","path":"engine/reference/render/shaders/modules/core/particles_field_lines.md","title":"render/shaders/modules/core/particles_field_lines.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_field_lines.js","updated":"","headings":["render/shaders/modules/core/particlesfieldlines.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1aef8743c7731ff1ea325de77839351d2b2c67cac87d68c81dfb56f5fb2e055d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_orbital.md::0000","path":"engine/reference/render/shaders/modules/core/particles_orbital.md","title":"render/shaders/modules/core/particles_orbital.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_orbital.js","updated":"","headings":["render/shaders/modules/core/particlesorbital.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU","contentHash":"868a005434ab0cf17964d2c42c4b2981581e6e8e7b91eb8cbd43565bd40e2db9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_orbital.md::0001","path":"engine/reference/render/shaders/modules/core/particles_orbital.md","title":"render/shaders/modules/core/particles_orbital.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_orbital.js","updated":"","headings":["render/shaders/modules/core/particlesorbital.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0b87224503d51cdf4dbcce84c621580781c58849becbe60ef2cfde96bac51fe8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_phase_vfx.md::0000","path":"engine/reference/render/shaders/modules/core/particles_phase_vfx.md","title":"render/shaders/modules/core/particles_phase_vfx.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_phase_vfx.js","updated":"","headings":["render/shaders/modules/core/particlesphasevfx.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"13df6d5ea08fff47515c8822d223c2de49287097a170121a914977a3aa11c5de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_point.md::0000","path":"engine/reference/render/shaders/modules/core/particles_point.md","title":"render/shaders/modules/core/particles_point.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_point.js","updated":"","headings":["render/shaders/modules/core/particlespoint.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_point_fragment.md::0000","path":"engine/reference/render/shaders/modules/core/particles_point_fragment.md","title":"render/shaders/modules/core/particles_point_fragment.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_point_fragment.js","updated":"","headings":["render/shaders/modules/core/particlespointfragment.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_point_vertex.md::0000","path":"engine/reference/render/shaders/modules/core/particles_point_vertex.md","title":"render/shaders/modules/core/particles_point_vertex.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_point_vertex.js","updated":"","headings":["render/shaders/modules/core/particlespointvertex.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_sdf_billboard.md::0000","path":"engine/reference/render/shaders/modules/core/particles_sdf_billboard.md","title":"render/shaders/modules/core/particles_sdf_billboard.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_sdf_billboard.js","updated":"","headings":["render/shaders/modules/core/particlessdfbillboard.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_sdf_fragment.md::0000","path":"engine/reference/render/shaders/modules/core/particles_sdf_fragment.md","title":"render/shaders/modules/core/particles_sdf_fragment.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_sdf_fragment.js","updated":"","headings":["render/shaders/modules/core/particlessdffragment.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_shared.md::0000","path":"engine/reference/render/shaders/modules/core/particles_shared.md","title":"render/shaders/modules/core/particles_shared.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_shared.js","updated":"","headings":["render/shaders/modules/core/particlesshared.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — ============================================================================ 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 <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss","contentHash":"933031cd6f5a0beb197a7d284b7cb52be89be3255b1ac47486e2d62fd52cc86c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/core/particles_shared.md::0001","path":"engine/reference/render/shaders/modules/core/particles_shared.md","title":"render/shaders/modules/core/particles_shared.js","description":"","kind":"reference","source":"engine/render/shaders/modules/core/particles_shared.js","updated":"","headings":["render/shaders/modules/core/particlesshared.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"2e987331ffc297d4e416a523df433feb1ca979521359778f792163c9d95e7008"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/color/blend.md::0000","path":"engine/reference/render/shaders/modules/lib/color/blend.md","title":"render/shaders/modules/lib/color/blend.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/color/blend.js","updated":"","headings":["render/shaders/modules/lib/color/blend.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Color Blending Functions Various blend modes for compositing colors. Photoshop style blend modes and custom game specific blending. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"848dd5116c6305e758cb386d89bcae5078765e8f7958e01ff8738a72ce188bf3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/color/index.md::0000","path":"engine/reference/render/shaders/modules/lib/color/index.md","title":"render/shaders/modules/lib/color/index.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/color/index.js","updated":"","headings":["render/shaders/modules/lib/color/index.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"37a3e5983bd8ca58f47ca1be8302e58efd657c2a9e25af4a56d33dde8df57e6b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/density/falloff.md::0000","path":"engine/reference/render/shaders/modules/lib/density/falloff.md","title":"render/shaders/modules/lib/density/falloff.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/density/falloff.js","updated":"","headings":["render/shaders/modules/lib/density/falloff.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Density Falloff Functions Various falloff curves for volumetric density, particle opacity, etc. Controls how density/opacity decreases with distance. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"75cf263af46516597caeba389856a70df210168177605e5d7307cb9b1539e18e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/density/index.md::0000","path":"engine/reference/render/shaders/modules/lib/density/index.md","title":"render/shaders/modules/lib/density/index.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/density/index.js","updated":"","headings":["render/shaders/modules/lib/density/index.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"37a3e5983bd8ca58f47ca1be8302e58efd657c2a9e25af4a56d33dde8df57e6b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/depth/index.md::0000","path":"engine/reference/render/shaders/modules/lib/depth/index.md","title":"render/shaders/modules/lib/depth/index.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/depth/index.js","updated":"","headings":["render/shaders/modules/lib/depth/index.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"8d501629f12afdde2361eb34d7b4a0803446dce05640865747dde099d50825fd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/depth/linearize.md::0000","path":"engine/reference/render/shaders/modules/lib/depth/linearize.md","title":"render/shaders/modules/lib/depth/linearize.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/depth/linearize.js","updated":"","headings":["render/shaders/modules/lib/depth/linearize.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Depth Buffer Utilities Linearization Functions for linearizing depth values from perspective projection. WebGPU uses [0,1] depth range with perspective non linearity. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"045026537a7fe32127a72e29c55f921533cb26d62e5e9a3476c7a9ee36ec41a2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/depth/reconstruct.md::0000","path":"engine/reference/render/shaders/modules/lib/depth/reconstruct.md","title":"render/shaders/modules/lib/depth/reconstruct.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/depth/reconstruct.js","updated":"","headings":["render/shaders/modules/lib/depth/reconstruct.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/distortion/domain_warp.md::0000","path":"engine/reference/render/shaders/modules/lib/distortion/domain_warp.md","title":"render/shaders/modules/lib/distortion/domain_warp.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/distortion/domain_warp.js","updated":"","headings":["render/shaders/modules/lib/distortion/domainwarp.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/distortion/index.md::0000","path":"engine/reference/render/shaders/modules/lib/distortion/index.md","title":"render/shaders/modules/lib/distortion/index.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/distortion/index.js","updated":"","headings":["render/shaders/modules/lib/distortion/index.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"37a3e5983bd8ca58f47ca1be8302e58efd657c2a9e25af4a56d33dde8df57e6b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/index.md::0000","path":"engine/reference/render/shaders/modules/lib/index.md","title":"render/shaders/modules/lib/index.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/index.js","updated":"","headings":["render/shaders/modules/lib/index.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/lighting/index.md::0000","path":"engine/reference/render/shaders/modules/lib/lighting/index.md","title":"render/shaders/modules/lib/lighting/index.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/lighting/index.js","updated":"","headings":["render/shaders/modules/lib/lighting/index.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"37a3e5983bd8ca58f47ca1be8302e58efd657c2a9e25af4a56d33dde8df57e6b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/lighting/scatter.md::0000","path":"engine/reference/render/shaders/modules/lib/lighting/scatter.md","title":"render/shaders/modules/lib/lighting/scatter.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/lighting/scatter.js","updated":"","headings":["render/shaders/modules/lib/lighting/scatter.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Light Scattering Functions Physical and approximated scattering models for volumetric lighting. Includes phase functions and multiple scattering approximations. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"86e87fa62126956116e2ceeee6ec5715463ac42c450a041824f94db55d1d7c86"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/math/index.md::0000","path":"engine/reference/render/shaders/modules/lib/math/index.md","title":"render/shaders/modules/lib/math/index.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/math/index.js","updated":"","headings":["render/shaders/modules/lib/math/index.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"37a3e5983bd8ca58f47ca1be8302e58efd657c2a9e25af4a56d33dde8df57e6b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/math/interpolation.md::0000","path":"engine/reference/render/shaders/modules/lib/math/interpolation.md","title":"render/shaders/modules/lib/math/interpolation.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/math/interpolation.js","updated":"","headings":["render/shaders/modules/lib/math/interpolation.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — Interpolation Functions Various interpolation curves and easing functions. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"869ad60216e2ae5c7e67e117cf90184825c7768701534f82cb8828d128c87a2c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/noise/curl.md::0000","path":"engine/reference/render/shaders/modules/lib/noise/curl.md","title":"render/shaders/modules/lib/noise/curl.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/noise/curl.js","updated":"","headings":["render/shaders/modules/lib/noise/curl.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/noise/fbm.md::0000","path":"engine/reference/render/shaders/modules/lib/noise/fbm.md","title":"render/shaders/modules/lib/noise/fbm.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/noise/fbm.js","updated":"","headings":["render/shaders/modules/lib/noise/fbm.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/noise/hash.md::0000","path":"engine/reference/render/shaders/modules/lib/noise/hash.md","title":"render/shaders/modules/lib/noise/hash.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/noise/hash.js","updated":"","headings":["render/shaders/modules/lib/noise/hash.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"5432cb0668cfc1f7ef62b4bdf9346b074d9f53b3dea756675004b21633b4e65e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/noise/index.md::0000","path":"engine/reference/render/shaders/modules/lib/noise/index.md","title":"render/shaders/modules/lib/noise/index.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/noise/index.js","updated":"","headings":["render/shaders/modules/lib/noise/index.js","Constants","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"ae2bdfc649826d5efe2a40f0b2e775ea9c198fb75b449fc13c35cea5ed8a5190"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/noise/noise3d.md::0000","path":"engine/reference/render/shaders/modules/lib/noise/noise3d.md","title":"render/shaders/modules/lib/noise/noise3d.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/noise/noise3d.js","updated":"","headings":["render/shaders/modules/lib/noise/noise3d.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — 3D Noise Functions for Volumetric Effects Used for smoke turbulence, wispy distortion, and organic blending <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"cb25c62e75418e1c27195e8034a851fbc5b3c9446b2af19cd5559d1442672288"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/noise/value.md::0000","path":"engine/reference/render/shaders/modules/lib/noise/value.md","title":"render/shaders/modules/lib/noise/value.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/noise/value.js","updated":"","headings":["render/shaders/modules/lib/noise/value.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/lib/sdf/shapes.md::0000","path":"engine/reference/render/shaders/modules/lib/sdf/shapes.md","title":"render/shaders/modules/lib/sdf/shapes.js","description":"","kind":"reference","source":"engine/render/shaders/modules/lib/sdf/shapes.js","updated":"","headings":["render/shaders/modules/lib/sdf/shapes.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants — SDF Shape Library Signed Distance Field functions for volumetric particle rendering. Based on Inigo Quilez's distance functions: https://iquilezles.org/articles/distfunctions/ <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6c972b06836e45111523adc6e949d570068366a5032d10d10b2111b0594f92d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/depth_visualizer.md::0000","path":"engine/reference/render/shaders/modules/passes/depth_visualizer.md","title":"render/shaders/modules/passes/depth_visualizer.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/depth_visualizer.js","updated":"","headings":["render/shaders/modules/passes/depthvisualizer.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_age.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_age.md","title":"render/shaders/modules/passes/particle_age.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_age.js","updated":"","headings":["render/shaders/modules/passes/particleage.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_albedo.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_albedo.md","title":"render/shaders/modules/passes/particle_albedo.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_albedo.js","updated":"","headings":["render/shaders/modules/passes/particlealbedo.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_depth.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_depth.md","title":"render/shaders/modules/passes/particle_depth.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_depth.js","updated":"","headings":["render/shaders/modules/passes/particledepth.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_emissive.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_emissive.md","title":"render/shaders/modules/passes/particle_emissive.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_emissive.js","updated":"","headings":["render/shaders/modules/passes/particleemissive.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_lighting.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_lighting.md","title":"render/shaders/modules/passes/particle_lighting.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_lighting.js","updated":"","headings":["render/shaders/modules/passes/particlelighting.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_normals.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_normals.md","title":"render/shaders/modules/passes/particle_normals.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_normals.js","updated":"","headings":["render/shaders/modules/passes/particlenormals.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_size.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_size.md","title":"render/shaders/modules/passes/particle_size.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_size.js","updated":"","headings":["render/shaders/modules/passes/particlesize.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_thermal.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_thermal.md","title":"render/shaders/modules/passes/particle_thermal.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_thermal.js","updated":"","headings":["render/shaders/modules/passes/particlethermal.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0a38f371e4c1db074169793b760155f53b603a20720316669a3ba8f7ceff56fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/particle_velocity.md::0000","path":"engine/reference/render/shaders/modules/passes/particle_velocity.md","title":"render/shaders/modules/passes/particle_velocity.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/particle_velocity.js","updated":"","headings":["render/shaders/modules/passes/particlevelocity.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/passes/scene_debug_visualizer.md::0000","path":"engine/reference/render/shaders/modules/passes/scene_debug_visualizer.md","title":"render/shaders/modules/passes/scene_debug_visualizer.js","description":"","kind":"reference","source":"engine/render/shaders/modules/passes/scene_debug_visualizer.js","updated":"","headings":["render/shaders/modules/passes/scenedebugvisualizer.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 . Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"44009fb20f61cefb629937ea787f4402ffef2a92390bf08531cfbaef920fe9b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/postfx/bloom.md::0000","path":"engine/reference/render/shaders/modules/postfx/bloom.md","title":"render/shaders/modules/postfx/bloom.js","description":"","kind":"reference","source":"engine/render/shaders/modules/postfx/bloom.js","updated":"","headings":["render/shaders/modules/postfx/bloom.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/postfx/fluid_water_blur.md::0000","path":"engine/reference/render/shaders/modules/postfx/fluid_water_blur.md","title":"render/shaders/modules/postfx/fluid_water_blur.js","description":"","kind":"reference","source":"engine/render/shaders/modules/postfx/fluid_water_blur.js","updated":"","headings":["render/shaders/modules/postfx/fluidwaterblur.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/postfx/fluid_water_composite.md::0000","path":"engine/reference/render/shaders/modules/postfx/fluid_water_composite.md","title":"render/shaders/modules/postfx/fluid_water_composite.js","description":"","kind":"reference","source":"engine/render/shaders/modules/postfx/fluid_water_composite.js","updated":"","headings":["render/shaders/modules/postfx/fluidwatercomposite.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/postfx/fluid_water_depth.md::0000","path":"engine/reference/render/shaders/modules/postfx/fluid_water_depth.md","title":"render/shaders/modules/postfx/fluid_water_depth.js","description":"","kind":"reference","source":"engine/render/shaders/modules/postfx/fluid_water_depth.js","updated":"","headings":["render/shaders/modules/postfx/fluidwaterdepth.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/postfx/fluid_water_thickness.md::0000","path":"engine/reference/render/shaders/modules/postfx/fluid_water_thickness.md","title":"render/shaders/modules/postfx/fluid_water_thickness.js","description":"","kind":"reference","source":"engine/render/shaders/modules/postfx/fluid_water_thickness.js","updated":"","headings":["render/shaders/modules/postfx/fluidwaterthickness.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/postfx/volume_isosurface.md::0000","path":"engine/reference/render/shaders/modules/postfx/volume_isosurface.md","title":"render/shaders/modules/postfx/volume_isosurface.js","description":"","kind":"reference","source":"engine/render/shaders/modules/postfx/volume_isosurface.js","updated":"","headings":["render/shaders/modules/postfx/volumeisosurface.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/postfx/volume_smoke.md::0000","path":"engine/reference/render/shaders/modules/postfx/volume_smoke.md","title":"render/shaders/modules/postfx/volume_smoke.js","description":"","kind":"reference","source":"engine/render/shaders/modules/postfx/volume_smoke.js","updated":"","headings":["render/shaders/modules/postfx/volumesmoke.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/proxy/ray_portal.md::0000","path":"engine/reference/render/shaders/modules/proxy/ray_portal.md","title":"render/shaders/modules/proxy/ray_portal.js","description":"","kind":"reference","source":"engine/render/shaders/modules/proxy/ray_portal.js","updated":"","headings":["render/shaders/modules/proxy/rayportal.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap","contentHash":"768a40f0b3f7f113e60bb27bf22368d4f267f49b2be7e5281ba2c87398600c6e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/proxy/ray_portal.md::0001","path":"engine/reference/render/shaders/modules/proxy/ray_portal.md","title":"render/shaders/modules/proxy/ray_portal.js","description":"","kind":"reference","source":"engine/render/shaders/modules/proxy/ray_portal.js","updated":"","headings":["render/shaders/modules/proxy/rayportal.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e37bab98e3ebba4b3d47681bac4e0a987f30e1d2d907d98ac2dc2f19951cf3cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/shaders/modules/proxy/tlas_refit.md::0000","path":"engine/reference/render/shaders/modules/proxy/tlas_refit.md","title":"render/shaders/modules/proxy/tlas_refit.js","description":"","kind":"reference","source":"engine/render/shaders/modules/proxy/tlas_refit.js","updated":"","headings":["render/shaders/modules/proxy/tlasrefit.js","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"9a24af900e61a34c8cca1e1b8fc10d9e87e4488b04ef28cbfca8dc31971eb1ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/CoherentWaveOpticsPass.md::0000","path":"engine/reference/render/spectral/CoherentWaveOpticsPass.md","title":"render/spectral/CoherentWaveOpticsPass.js","description":"","kind":"reference","source":"engine/render/spectral/CoherentWaveOpticsPass.js","updated":"","headings":["render/spectral/CoherentWaveOpticsPass.js","Classes","class CoherentWaveOpticsPass","Functions","createCoherentWaveOpticsPass(device, options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6856256ef1889ac76f3115f7215ec0627f47aaad919f3257866d7b4481decf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/SpectralPhotonMapper.md::0000","path":"engine/reference/render/spectral/SpectralPhotonMapper.md","title":"render/spectral/SpectralPhotonMapper.js","description":"","kind":"reference","source":"engine/render/spectral/SpectralPhotonMapper.js","updated":"","headings":["render/spectral/SpectralPhotonMapper.js","Classes","class SpectralPhotonMapper","Functions","createSpectralPhotonMapper(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6856256ef1889ac76f3115f7215ec0627f47aaad919f3257866d7b4481decf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/SpectralPhotonMappingPass.md::0000","path":"engine/reference/render/spectral/SpectralPhotonMappingPass.md","title":"render/spectral/SpectralPhotonMappingPass.js","description":"","kind":"reference","source":"engine/render/spectral/SpectralPhotonMappingPass.js","updated":"","headings":["render/spectral/SpectralPhotonMappingPass.js","Classes","class SpectralPhotonMappingPass","Functions","createSpectralPhotonMappingPass(device, options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6856256ef1889ac76f3115f7215ec0627f47aaad919f3257866d7b4481decf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/SpectralPhotonStore.md::0000","path":"engine/reference/render/spectral/SpectralPhotonStore.md","title":"render/spectral/SpectralPhotonStore.js","description":"","kind":"reference","source":"engine/render/spectral/SpectralPhotonStore.js","updated":"","headings":["render/spectral/SpectralPhotonStore.js","Classes","class SpectralPhotonStore","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a585f7cd8512a33f9cd692c4ce72ac98be8166a343180878d1940bee8d6b4c16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/SpectralScattering.md::0000","path":"engine/reference/render/spectral/SpectralScattering.md","title":"render/spectral/SpectralScattering.js","description":"","kind":"reference","source":"engine/render/spectral/SpectralScattering.js","updated":"","headings":["render/spectral/SpectralScattering.js","Functions","sellmeierIor(lambdaNm, coefficients = null)","fresnelDielectric(cosThetaI, etaI, etaT)","beerLambert(sigmaT, distance)","henyeyGreenstein(cosTheta, g = 0)","lambertBsdf(reflectance)","prismMinimumDeviation(lambdaNm, apexRadians = Math.PI / 3, coefficients = null)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/SpectralSensor.md::0000","path":"engine/reference/render/spectral/SpectralSensor.md","title":"render/spectral/SpectralSensor.js","description":"","kind":"reference","source":"engine/render/spectral/SpectralSensor.js","updated":"","headings":["render/spectral/SpectralSensor.js","Functions","wavelengthToXyz(lambdaNm, value = 1)","xyzToLinearSrgb(xyz)","encodeSrgbChannel(v)","acesToneMap(rgb, exposure = 1)","spectralSamplesToXyz(samples)","spectralSamplesToDisplayRgb(samples, exposure = 1)","normalizeRgb(rgb)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/SpectralTypes.md::0000","path":"engine/reference/render/spectral/SpectralTypes.md","title":"render/spectral/SpectralTypes.js","description":"","kind":"reference","source":"engine/render/spectral/SpectralTypes.js","updated":"","headings":["render/spectral/SpectralTypes.js","Functions","clamp01(value)","clampRange(value, min, max)","createWavelengthPacket(lambda, pdf, activeMask = 1, hero = 0)","createPhotonPacket(position, direction, lambdaNm, flux, flags = 0, normal = null)","createVisiblePoint(position, normal, materialId = 0, radius = SPECTRALDEFAULTS.photonRadius)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"0e5c0bb5489d7b2290952823ad15a3269ae4907e8568e7b581b010abb464066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/SpectrumAsset.md::0000","path":"engine/reference/render/spectral/SpectrumAsset.md","title":"render/spectral/SpectrumAsset.js","description":"","kind":"reference","source":"engine/render/spectral/SpectrumAsset.js","updated":"","headings":["render/spectral/SpectrumAsset.js","Classes","class SpectrumAsset","Functions","createConstantSpectrum(value = 1, scale = 1)","createTabulatedSpectrum(samples, scale = 1)","createBlackbodySpectrum(temperatureK = 6500, scale = 1)","createRgbSpectrum(rgb, scale = 1)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6856256ef1889ac76f3115f7215ec0627f47aaad919f3257866d7b4481decf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/WavelengthSampling.md::0000","path":"engine/reference/render/spectral/WavelengthSampling.md","title":"render/spectral/WavelengthSampling.js","description":"","kind":"reference","source":"engine/render/spectral/WavelengthSampling.js","updated":"","headings":["render/spectral/WavelengthSampling.js","Functions","visibleImportance(lambdaNm)","wavelengthToBand(lambdaNm, bandCount = 18, minNm = SPECTRALRANGE.minNm, maxNm = SPECTRALRANGE.maxNm)","bandCenterWavelength(band, bandCount = 18, minNm = SPECTRALRANGE.minNm, maxNm = SPECTRALRANGE.maxNm)","sampleVisibleWavelength(u = uniformDistribution(0, 1, Math.random)","sampleStratifiedVisiblePacket(seed = 1, count = 4)","samplePhotonWavelength(lightSpectrum, seed = 1, bandCount = 18)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/spectral/index.md::0000","path":"engine/reference/render/spectral/index.md","title":"render/spectral/index.js","description":"","kind":"reference","source":"engine/render/spectral/index.js","updated":"","headings":["render/spectral/index.js","Exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f7bb777cef6c37350ca4ca0c10032fd7892e49fece55e7d058bf6b5424b3b905"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/StateFirstEcsSourceAdapter.md::0000","path":"engine/reference/render/state/StateFirstEcsSourceAdapter.md","title":"render/state/StateFirstEcsSourceAdapter.js","description":"","kind":"reference","source":"engine/render/state/StateFirstEcsSourceAdapter.js","updated":"","headings":["render/state/StateFirstEcsSourceAdapter.js","Classes","class StateFirstEcsSourceAdapter","Functions","createStateFirstEcsSourceAdapter(world, options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 . Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"425b26f5be9c354a818a90f6c795650607538fb583762c70d7276e4a1ec228b9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/StateFirstExecutionBackend.md::0000","path":"engine/reference/render/state/StateFirstExecutionBackend.md","title":"render/state/StateFirstExecutionBackend.js","description":"","kind":"reference","source":"engine/render/state/StateFirstExecutionBackend.js","updated":"","headings":["render/state/StateFirstExecutionBackend.js","Classes","class StateFirstExecutionBackend","Functions","createStateFirstExecutionBackend(options = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Functions Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"dca76f995c5be35a784ee69ed9889f524d08c4a8d30d30aab2a4761238a397f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/StateFirstGpuCuller.md::0000","path":"engine/reference/render/state/StateFirstGpuCuller.md","title":"render/state/StateFirstGpuCuller.js","description":"","kind":"reference","source":"engine/render/state/StateFirstGpuCuller.js","updated":"","headings":["render/state/StateFirstGpuCuller.js","Classes","class StateFirstGpuCuller","Functions","createStateFirstGpuCuller(device, options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6856256ef1889ac76f3115f7215ec0627f47aaad919f3257866d7b4481decf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/StateFirstRasterizer.md::0000","path":"engine/reference/render/state/StateFirstRasterizer.md","title":"render/state/StateFirstRasterizer.js","description":"","kind":"reference","source":"engine/render/state/StateFirstRasterizer.js","updated":"","headings":["render/state/StateFirstRasterizer.js","Classes","class StateFirstRasterizer","Functions","stateFirstModeLabel(mode)","chooseStateFirstRepresentation(pixelRadius, importance = 0, current = STATEFIRSTREPRESENTATION.POINT, holdFrames = 0, thresholds = DEFAULTTHRESHOLDS, policy = null, lodRank = 0.5)","createStateFirstRasterizer(options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"bcebd7aec3758a7717f2bfe0bb0da8324c103baf83ee8af67367e7b2a6ca3569"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/StateFirstRetainedStorage.md::0000","path":"engine/reference/render/state/StateFirstRetainedStorage.md","title":"render/state/StateFirstRetainedStorage.js","description":"","kind":"reference","source":"engine/render/state/StateFirstRetainedStorage.js","updated":"","headings":["render/state/StateFirstRetainedStorage.js","Classes","class StateFirstRetainedStorage","Functions","createStateFirstRetainedStorage(device, options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Functions Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large","contentHash":"c2a12009ed4b0a99456e95d74fe16792da12fcd8d85ad39e407fd7970631a1b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/StateFirstRetainedStorage.md::0001","path":"engine/reference/render/state/StateFirstRetainedStorage.md","title":"render/state/StateFirstRetainedStorage.js","description":"","kind":"reference","source":"engine/render/state/StateFirstRetainedStorage.js","updated":"","headings":["render/state/StateFirstRetainedStorage.js","Classes","class StateFirstRetainedStorage","Functions","createStateFirstRetainedStorage(device, options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b0dd3b689a96fc3d0df1750c6545f6cd64d3634fe9470a0bb198831511db8025"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/StateFirstSourceBridge.md::0000","path":"engine/reference/render/state/StateFirstSourceBridge.md","title":"render/state/StateFirstSourceBridge.js","description":"","kind":"reference","source":"engine/render/state/StateFirstSourceBridge.js","updated":"","headings":["render/state/StateFirstSourceBridge.js","Classes","class StateFirstSourceBridge","Functions","discoverStateFirstSource(candidate)","createStateFirstSourceBridge(rasterizer, options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Functions Constants — 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. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks","contentHash":"1655b667c3623ec7d2fa1dd3a3fd1700740d337a63d8618a36972c76db5fb7cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/StateFirstSourceBridge.md::0001","path":"engine/reference/render/state/StateFirstSourceBridge.md","title":"render/state/StateFirstSourceBridge.js","description":"","kind":"reference","source":"engine/render/state/StateFirstSourceBridge.js","updated":"","headings":["render/state/StateFirstSourceBridge.js","Classes","class StateFirstSourceBridge","Functions","discoverStateFirstSource(candidate)","createStateFirstSourceBridge(rasterizer, options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"457e8d96bd267302938589feb1c5cb12a462483844113b501fdebc5da4979cdc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/state/index.md::0000","path":"engine/reference/render/state/index.md","title":"render/state/index.js","description":"","kind":"reference","source":"engine/render/state/index.js","updated":"","headings":["render/state/index.js","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"f96cc648744a9ddfba8d1136d7ce9df5e7934cc00a00fcf0313cfe4aff7b46b9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/streaming/VirtualTexturingSystem.md::0000","path":"engine/reference/render/streaming/VirtualTexturingSystem.md","title":"render/streaming/VirtualTexturingSystem.js","description":"","kind":"reference","source":"engine/render/streaming/VirtualTexturingSystem.js","updated":"","headings":["render/streaming/VirtualTexturingSystem.js","Classes","class VirtualTexturingSystem","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Sample virtual texture in shader Returns shader code for virtual texture sampling Record feedback readback and clearing into the host owned encoder. No queue submission or mapping happens here. Notify the ring after the host has submitted the command buffer. Consume completed feedback without awaiting a GPU map or page fetch. Compatibility wrapper for callers that still own a self contained job. Clear IndexedDB cache Prefetch pages for a region (call during loading screens) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations.","contentHash":"11da4a9e2a030555ecfc8bc966b7404594c64aafdb97619aa20131763f89d0ef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/streaming/VirtualTexturingSystem.md::0001","path":"engine/reference/render/streaming/VirtualTexturingSystem.md","title":"render/streaming/VirtualTexturingSystem.js","description":"","kind":"reference","source":"engine/render/streaming/VirtualTexturingSystem.js","updated":"","headings":["render/streaming/VirtualTexturingSystem.js","Classes","class VirtualTexturingSystem","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"a3e420e0268259fc8f91b864c9bd0543cf595cefb1575df1db131039bb97fec4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/HybridVolumeSystem.md::0000","path":"engine/reference/render/volumes/HybridVolumeSystem.md","title":"render/volumes/HybridVolumeSystem.js","description":"","kind":"reference","source":"engine/render/volumes/HybridVolumeSystem.js","updated":"","headings":["render/volumes/HybridVolumeSystem.js","Classes","class HybridVolumeSystem","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize GPU resources Set particle buffers for splatting Bridge a mesh to use as particles Mesh vertices become particle positions Remove a mesh bridge Mark a region as dirty (needs update) Mark entire volume as dirty Update volume bounds to follow camera (Frostbite/UE style froxel approach) Centers volume around camera position with configurable range Update the volume grid from particle data Get current density buffer for rendering Get current color buffer for rendering Get volume bounds Set volume bounds Set render mode Get render mode Update configuration Get statistics Cleanup Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the","contentHash":"900380d0df5f18197b70222a928f5084176a2180ff3a5e1bef4b1d8d440e4f8a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/HybridVolumeSystem.md::0001","path":"engine/reference/render/volumes/HybridVolumeSystem.md","title":"render/volumes/HybridVolumeSystem.js","description":"","kind":"reference","source":"engine/render/volumes/HybridVolumeSystem.js","updated":"","headings":["render/volumes/HybridVolumeSystem.js","Classes","class HybridVolumeSystem","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"07c92cf05bebccc5fa0e5446d466abc44a31a990b7c5339b3c71fcf553ddacdb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/IsoSurfaceVolumeRenderer.md::0000","path":"engine/reference/render/volumes/IsoSurfaceVolumeRenderer.md","title":"render/volumes/IsoSurfaceVolumeRenderer.js","description":"","kind":"reference","source":"engine/render/volumes/IsoSurfaceVolumeRenderer.js","updated":"","headings":["render/volumes/IsoSurfaceVolumeRenderer.js","Functions","async createIsoSurfaceVolumeRenderer(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/ParticleVolumeConnector.md::0000","path":"engine/reference/render/volumes/ParticleVolumeConnector.md","title":"render/volumes/ParticleVolumeConnector.js","description":"","kind":"reference","source":"engine/render/volumes/ParticleVolumeConnector.js","updated":"","headings":["render/volumes/ParticleVolumeConnector.js","Classes","class ParticleVolumeConnector","Functions","async createParticleVolumeConnector(device, options = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize the volume system Connect a particle renderer Automatically detects buffer names Manually set buffer accessors for a renderer Disconnect a renderer Update the volume system with current particle data Set scene textures for compositing Render the volume Set render mode Configure for smoke Configure for water Set volume bounds Enable/disable Get statistics Resize Cleanup Functions Quick factory to create a connector and initialize it <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"5d7b52ca5d073c88234219f5c7eaa7a7b1e75ed20c3a9421b95c364134a8b815"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/SmokeVolumeRenderer.md::0000","path":"engine/reference/render/volumes/SmokeVolumeRenderer.md","title":"render/volumes/SmokeVolumeRenderer.js","description":"","kind":"reference","source":"engine/render/volumes/SmokeVolumeRenderer.js","updated":"","headings":["render/volumes/SmokeVolumeRenderer.js","Functions","async createSmokeVolumeRenderer(options)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b569db0021f13435b09f9e53d58d9c51c1438362a926cf9c94051a67dc6eb1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/UnifiedVolumeRenderer.md::0000","path":"engine/reference/render/volumes/UnifiedVolumeRenderer.md","title":"render/volumes/UnifiedVolumeRenderer.js","description":"","kind":"reference","source":"engine/render/volumes/UnifiedVolumeRenderer.js","updated":"","headings":["render/volumes/UnifiedVolumeRenderer.js","Classes","class UnifiedVolumeRenderer","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Set volume data from HybridVolumeSystem Set scene textures for compositing Update frame uniforms Render volume Set render mode Configure smoke rendering Configure water rendering Resize Cleanup <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e7fabe00c82468b357f8c839b2c18ef9e4176ff04d96f4e6ac2d69dfa9fe67d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/VolumeIntegration.md::0000","path":"engine/reference/render/volumes/VolumeIntegration.md","title":"render/volumes/VolumeIntegration.js","description":"","kind":"reference","source":"engine/render/volumes/VolumeIntegration.js","updated":"","headings":["render/volumes/VolumeIntegration.js","Classes","class VolumeIntegration","Functions","createVolumeIntegration(device, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize both systems Connect an existing particle system The particle system should have: positionBuffer, metaBuffer, velocityBuffer, count Disconnect a particle system Add a mesh to be rendered as volumetric particles Remove a mesh Set volume bounds Auto fit volume bounds to particle positions Set render mode Configure for smoke rendering Configure for water rendering Enable debug density visualization Disable debug mode Update the volume system (call before render) Set scene textures for compositing Render the volume (call during render pass) Get statistics Enable/disable the volume system Toggle enabled state Resize Cleanup Functions Re exports <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap","contentHash":"915aef03f50a640339003030f67e6ed12a23588690969d27f32df75b05f71e06"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/VolumeIntegration.md::0001","path":"engine/reference/render/volumes/VolumeIntegration.md","title":"render/volumes/VolumeIntegration.js","description":"","kind":"reference","source":"engine/render/volumes/VolumeIntegration.js","updated":"","headings":["render/volumes/VolumeIntegration.js","Classes","class VolumeIntegration","Functions","createVolumeIntegration(device, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"e37bab98e3ebba4b3d47681bac4e0a987f30e1d2d907d98ac2dc2f19951cf3cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/render/volumes/index.md::0000","path":"engine/reference/render/volumes/index.md","title":"render/volumes/index.js","description":"","kind":"reference","source":"engine/render/volumes/index.js","updated":"","headings":["render/volumes/index.js","Functions","async createVolumetricSystem(device, options = {})","Re-exports","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Quick factory to create a complete volumetric setup Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. Re exports , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1901e989f871bb298c7735fb42966c1df09e92a3c15e01ad5d17d1546005db83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/scenes/PhysicsSandboxScene.md::0000","path":"engine/reference/scenes/PhysicsSandboxScene.md","title":"scenes/PhysicsSandboxScene.js","description":"","kind":"reference","source":"engine/scenes/PhysicsSandboxScene.js","updated":"","headings":["scenes/PhysicsSandboxScene.js","Functions","configurePhysicsSandboxScene(world, options = {})","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"26a9d9390cf2f042fa1d743c94c19ace52ce7a1ba8c5bf06c2378492ed193d64"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/SimulationUpdate.md::0000","path":"engine/reference/sim/SimulationUpdate.md","title":"sim/SimulationUpdate.js","description":"","kind":"reference","source":"engine/sim/SimulationUpdate.js","updated":"","headings":["sim/SimulationUpdate.js","Functions","stepParticles(particles, options)","stepFluid(smoke, particles, gpuDevice, delta, options = {})","stepAllSimulations(state, delta, entities, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Step the particle simulation (emission, colliders, physics). Parameters: (Object) — Particle state object (Object) — Configuration options (number) — Time delta (Array) — Spawned entities for collision (Function) — Function to get entity transform (Object) — Physics state { gravity, gravityScale } (number) — Half size of room for bounds (number) — Strength of particle coupling to fluid Returns: Updated particle state info Step the fluid simulation (density splatting, advection). Parameters: (Object) — Smoke/fluid state object (Object) — Particle state for emitter sources (Object) — GPU device wrapper (number) — Time delta (Object) — Additional options (number) — Minimum ms between splats (default 200) (number) — Warmup delay before splatting (default 2000) (Function) — Error callback (number) — Room bounds for clamping volume (number) — Approximate current FPS (number) — Minimum FPS for splats (default 0) (number) — Bounds smoothing factor [0,1] (default 0.2) (Object) — Optional debug logger (boolean) — Optional debug log sources (number) — Optional debug max sources (Array) — Optional precomputed fluid sources Returns: Whether fluid was stepped Step all simulations in one call. Parameters: (Object) — Combined state { particles, smoke, gpu, physics, config, ecs } (number) — Time delta (Array) — Spawned entities (Object) — Additional options <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics","contentHash":"6982d89d6d8c8bb1f74359ba2b44c20c1e60dfb9ad058fdf542700d2ecb461c9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/SimulationUpdate.md::0001","path":"engine/reference/sim/SimulationUpdate.md","title":"sim/SimulationUpdate.js","description":"","kind":"reference","source":"engine/sim/SimulationUpdate.js","updated":"","headings":["sim/SimulationUpdate.js","Functions","stepParticles(particles, options)","stepFluid(smoke, particles, gpuDevice, delta, options = {})","stepAllSimulations(state, delta, entities, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6ce82d0f0c3ded4779c190a5023d33d30bdc78731be3eee65afa1467ba2d3a8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIAiming.md::0000","path":"engine/reference/sim/ai/AIAiming.md","title":"sim/ai/AIAiming.js","description":"","kind":"reference","source":"engine/sim/ai/AIAiming.js","updated":"","headings":["sim/ai/AIAiming.js","Functions","createRay(origin, direction)","rayAABBIntersect(ray, aabbMin, aabbMax)","raySphereIntersect(rayOrigin, rayDir, sphereCenter, radius)","hasLineOfSight(from, to, obstacles, options = {})","hasLineOfSightSpheres(from, to, spheres, ignoreIds = [])","predictiveAim(shooterPos, projectileSpeed, targetPos, targetVel)","predictiveAimWithAcceleration(shooterPos, projectileSpeed, targetPos, targetVel, targetAccel, iterations = 4)","gaussianRandom(mean = 0, stdDev = 1, rng = null)","applyAccuracySpread2D(aimDirection, spreadAngleRad)","applyAccuracySpread3D(aimDirection, spreadAngleRad)","calculateThreatScore(npc, target, options = {})","selectTarget(npc, candidates, options = {})","createTargetMemory()","updateTargetMemory(memory, visibleTarget, now)","getAimPointFromMemory(memory, visibleTarget, now)","calculateAccuracyModifier(params)","degToRad(deg)","radToDeg(rad)","distanceSquared(a, b)","distance(a, b)","isWithinRange(a, b, range)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a ray with pre computed inverse direction for fast intersection tests Parameters: (number[]) — [x, y, z] ray origin (number[]) — [x, y, z] normalized direction Returns: Ray object with origin, direction, and invDir Ray AABB intersection using the slab method Used by NVIDIA OptiX and other professional engines Parameters: (Object) — Ray with origin, direction, invDir (number[]) — [x, y, z] minimum corner (number[]) — [x, y, z] maximum corner Returns: Distance to intersection, or 1 if no hit Ray sphere intersection using quadratic formula Good for character hitboxes and bounding spheres Parameters: (number[]) — [x, y, z] (number[]) — [x, y, z] normalized direction (number[]) — [x, y, z] (number) — Sphere radius Returns: Distance to intersection, or null if no hit Check line of sight between two points against obstacle list Parameters: (number[]) — [x, y, z] start position (number[]) — [x, y, z] end position (Object) — Optional settings (Function) — (x,y,z) = material ID for voxel terrain checks Returns: True if line of sight is clear Check line of sight with sphere obstacles (characters) Parameters: (number[]) — [x, y, z] (number[]) — [x, y, z] (number[]) — Entity IDs to ignore (self, target) Returns: True if clear Calculate aim point to intercept a moving target Solves: P + V×t ² = (S×t)² (quadratic intercept equation) Parameters: (number[]) — [x, y, z] shooter position (number) — Speed of projectile (m/s) (number[]) — [x, y, z] current target position (number[]) — [x, y, z] target velocity Returns: {aimPoint: [x,y,z], timeToHit: number} or null if impossible","contentHash":"233ffc47aa703fd77e2d48f65e68cee610016055faff164dcd73ad726b3f8672"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIAiming.md::0001","path":"engine/reference/sim/ai/AIAiming.md","title":"sim/ai/AIAiming.js","description":"","kind":"reference","source":"engine/sim/ai/AIAiming.js","updated":"","headings":["sim/ai/AIAiming.js","Functions","createRay(origin, direction)","rayAABBIntersect(ray, aabbMin, aabbMax)","raySphereIntersect(rayOrigin, rayDir, sphereCenter, radius)","hasLineOfSight(from, to, obstacles, options = {})","hasLineOfSightSpheres(from, to, spheres, ignoreIds = [])","predictiveAim(shooterPos, projectileSpeed, targetPos, targetVel)","predictiveAimWithAcceleration(shooterPos, projectileSpeed, targetPos, targetVel, targetAccel, iterations = 4)","gaussianRandom(mean = 0, stdDev = 1, rng = null)","applyAccuracySpread2D(aimDirection, spreadAngleRad)","applyAccuracySpread3D(aimDirection, spreadAngleRad)","calculateThreatScore(npc, target, options = {})","selectTarget(npc, candidates, options = {})","createTargetMemory()","updateTargetMemory(memory, visibleTarget, now)","getAimPointFromMemory(memory, visibleTarget, now)","calculateAccuracyModifier(params)","degToRad(deg)","radToDeg(rad)","distanceSquared(a, b)","distance(a, b)","isWithinRange(a, b, range)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"(number[]) — [x, y, z] current target position (number[]) — [x, y, z] target velocity Returns: {aimPoint: [x,y,z], timeToHit: number} or null if impossible Iterative predictive aim for accelerating targets Parameters: (number[]) — [x, y, z] (number) — m/s (number[]) — [x, y, z] (number[]) — [x, y, z] (number[]) — [x, y, z] acceleration (number) — Number of refinement iterations (default 4) Returns: {aimPoint, timeToHit} or null Generate Gaussian distributed random number using Box Muller transform Parameters: (number) — Mean of distribution (default 0) (number) — Standard deviation (default 1) Returns: Gaussian distributed value Apply accuracy spread to aim direction (2D version) Parameters: (number[]) — [x, y] normalized 2D direction (number) — Spread angle in radians Returns: [x, y] spread direction Apply accuracy spread to aim direction (3D version) Generates a cone of spread around the aim direction Parameters: (number[]) — [x, y, z] normalized 3D direction (number) — Spread angle in radians Returns: [x, y, z] spread direction Calculate threat score for a potential target Parameters: (Object) — NPC data {position, recentDamageFrom, currentTarget} (Object) — Target data {id, position, dps, currentTarget} (Object) — Options {maxRange, maxDps, obstacles, weights} Returns: Threat score 0 1 Select best target from candidates with hysteresis Parameters: (Object) — NPC data (Array<Object ) — Potential targets (Object) — Scoring options Returns: Best target or null Create a target memory tracker for an NPC Remembers lost targets for a duration Returns: Target memory manager Update target memory with current perception Parameters: (Object) — Target memory object (Object null) — Currently visible target or null (number) — Current timestamp (ms) Get aim point considering","contentHash":"13509e2aa24c50b0c713f08deb0d579279237de160891a87445a643df772f231"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIAiming.md::0002","path":"engine/reference/sim/ai/AIAiming.md","title":"sim/ai/AIAiming.js","description":"","kind":"reference","source":"engine/sim/ai/AIAiming.js","updated":"","headings":["sim/ai/AIAiming.js","Functions","createRay(origin, direction)","rayAABBIntersect(ray, aabbMin, aabbMax)","raySphereIntersect(rayOrigin, rayDir, sphereCenter, radius)","hasLineOfSight(from, to, obstacles, options = {})","hasLineOfSightSpheres(from, to, spheres, ignoreIds = [])","predictiveAim(shooterPos, projectileSpeed, targetPos, targetVel)","predictiveAimWithAcceleration(shooterPos, projectileSpeed, targetPos, targetVel, targetAccel, iterations = 4)","gaussianRandom(mean = 0, stdDev = 1, rng = null)","applyAccuracySpread2D(aimDirection, spreadAngleRad)","applyAccuracySpread3D(aimDirection, spreadAngleRad)","calculateThreatScore(npc, target, options = {})","selectTarget(npc, candidates, options = {})","createTargetMemory()","updateTargetMemory(memory, visibleTarget, now)","getAimPointFromMemory(memory, visibleTarget, now)","calculateAccuracyModifier(params)","degToRad(deg)","radToDeg(rad)","distanceSquared(a, b)","distance(a, b)","isWithinRange(a, b, range)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"Parameters: (Object) — Target memory object (Object null) — Currently visible target or null (number) — Current timestamp (ms) Get aim point considering target memory Parameters: (Object) — Target memory (Object null) — Currently visible target (number) — Current timestamp (ms) Returns: Aim point [x, y, z] or null Calculate accuracy modifier based on combat conditions Parameters: (Object) — Combat parameters (number) — Distance to target (number) — Range at which accuracy starts degrading (number) — Shooter movement speed (number) — Target movement speed (number) — Accumulated recoil from sustained fire (degrees) (number) — Recoil recovery rate (degrees/second) (number) — Time since last shot (seconds) Returns","contentHash":"d779ca345e51378eaacc2860f4c2189722b812f50cb1c2b6c5af8f0daec1d28c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIAimingSystem.md::0000","path":"engine/reference/sim/ai/AIAimingSystem.md","title":"sim/ai/AIAimingSystem.js","description":"","kind":"reference","source":"engine/sim/ai/AIAimingSystem.js","updated":"","headings":["sim/ai/AIAimingSystem.js","Functions","createNPCCombatController(config = {})","initNPCWeapons(npc, weaponList)","initNPCMelee(npc, config = {})","createAIAimingSystem(config = {})","registerNPC(system, npc)","unregisterNPC(system, npcId)","updatePlayerPosition(system, position)","updateAIAimingSystem(system, deltaTimeMs, potentialTargets, obstacles)","npcFireWeapon(system, npc, targets, obstacles)","npcMeleeAttack(npc, targets)","applyDamageToNPC(npc, damage, attackerId)","decayDamageMemory(npc, deltaTimeMs, decayRate = 10)","getBatchRays(system)","applyBatchRayResults(system, results)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create an NPC combat controller Parameters: (Object) — NPC configuration Returns: NPC combat controller Initialize weapons for an NPC Parameters: (Object) — NPC combat controller Initialize melee for an NPC Parameters: (Object) — NPC combat controller (Object) — Melee configuration Create the main AI aiming system Parameters: (Object) — System configuration Returns: AI aiming system Register an NPC with the aiming system Parameters: (Object) — AI aiming system (Object) — NPC combat controller Unregister an NPC from the aiming system Parameters: (Object) — AI aiming system (number) — NPC ID Update player position for LOD calculations Parameters: (Object) — AI aiming system (number[]) — [x, y, z] player position Main update function for the AI aiming system Parameters: (Object) — AI aiming system (number) — Delta time in milliseconds (Array<Object ) — All potential targets {id, position, velocity, team, dps} (Array<Object ) — Obstacle AABBs {min, max} Command NPC to fire current weapon Parameters: (Object) — AI aiming system (Object) — NPC combat controller (Array<Object ) — Target colliders (Array<Object ) — Obstacle colliders Returns: Fire result or null Command NPC to perform melee attack Parameters: (Object) — NPC combat controller (Array<Object ) — Nearby targets Returns: Hit results Apply damage to NPC Parameters: (Object) — NPC combat controller (number) — Damage amount (number) — Attacker ID Decay recent damage memory over time Parameters: (Object) — NPC combat controller (number) — Delta time in ms (number) — Decay per second (default 10) Get all rays for GPU","contentHash":"09fb7499c4f27590c6c602a3344b61db687ee413afb43209d8bc7848edfa273b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIAimingSystem.md::0001","path":"engine/reference/sim/ai/AIAimingSystem.md","title":"sim/ai/AIAimingSystem.js","description":"","kind":"reference","source":"engine/sim/ai/AIAimingSystem.js","updated":"","headings":["sim/ai/AIAimingSystem.js","Functions","createNPCCombatController(config = {})","initNPCWeapons(npc, weaponList)","initNPCMelee(npc, config = {})","createAIAimingSystem(config = {})","registerNPC(system, npc)","unregisterNPC(system, npcId)","updatePlayerPosition(system, position)","updateAIAimingSystem(system, deltaTimeMs, potentialTargets, obstacles)","npcFireWeapon(system, npc, targets, obstacles)","npcMeleeAttack(npc, targets)","applyDamageToNPC(npc, damage, attackerId)","decayDamageMemory(npc, deltaTimeMs, decayRate = 10)","getBatchRays(system)","applyBatchRayResults(system, results)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"damage memory over time Parameters: (Object) — NPC combat controller (number) — Delta time in ms (number) — Decay per second (default 10) Get all rays for GPU batch processing Parameters: (Object) — AI aiming system Returns: } Ray data Apply batch ray results from GPU Parameters: (Object) — AI aiming system Constants — NPC combat states — LOD update frequencies (frame intervals) Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"ec32f62fd1c7ead7c181c42525e370ffed7c078a5d0200cdf61ad534f0c68451"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIBehaviorTree.md::0000","path":"engine/reference/sim/ai/AIBehaviorTree.md","title":"sim/ai/AIBehaviorTree.js","description":"","kind":"reference","source":"engine/sim/ai/AIBehaviorTree.js","updated":"","headings":["sim/ai/AIBehaviorTree.js","Functions","createSelector(name, children = [])","createSequence(name, children = [])","createParallel(name, children = [], successThreshold = -1, failureThreshold = 1)","createRandomSelector(name, children = [])","createInverter(name, child)","createRepeater(name, child, times = -1)","createUntilFail(name, child)","createUntilSuccess(name, child)","createSucceeder(name, child)","createFailer(name, child)","createCooldown(name, child, cooldownMs)","createConditionGuard(name, child, condition)","createAction(name, action)","createCondition(name, condition)","createWait(name, durationMs)","createLog(name, message)","tickNode(node, blackboard, deltaTime)","resetNode(node)","createTreeRunner(rootNode, blackboard)","tickTree(runner, deltaTime)","createCombatTree(actions)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a Selector node (OR logic) Runs children left to right, succeeds if ANY child succeeds Parameters: (string) — Node name (Array<Object ) — Child nodes Returns: Selector node Create a Sequence node (AND logic) Runs children left to right, fails if ANY child fails Parameters: (string) — Node name (Array<Object ) — Child nodes Returns: Sequence node Create a Parallel node Runs all children simultaneously Parameters: (string) — Node name (Array<Object ) — Child nodes (number) — Number of successes needed (default: all) (number) — Number of failures to fail (default: 1) Returns: Parallel node Create a Random Selector (picks random child) Parameters: (string) — Node name (Array<Object ) — Child nodes Returns: Random selector node Create an Inverter decorator Inverts child result: SUCCESS ↔ FAILURE Parameters: (string) — Node name (Object) — Child node Returns: Inverter node Create a Repeater decorator Repeats child N times or until failure Parameters: (string) — Node name (Object) — Child node (number) — Times to repeat ( 1 for infinite) Returns: Repeater node Create an UntilFail decorator Repeats child until it fails Parameters: (string) — Node name (Object) — Child node Returns: UntilFail node Create an UntilSuccess decorator Repeats child until it succeeds Parameters: (string) — Node name (Object) — Child node Returns: UntilSuccess node Create a Succeeder decorator Always returns SUCCESS Parameters: (string) — Node name (Object) — Child node Returns: Succeeder node Create a Failer decorator Always returns FAILURE Parameters: (string) — Node name (Object) — Child node","contentHash":"37775bc438a1b7afc43308542dc0e3161523ada2e09f1463370bcc49b3c90a83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIBehaviorTree.md::0001","path":"engine/reference/sim/ai/AIBehaviorTree.md","title":"sim/ai/AIBehaviorTree.js","description":"","kind":"reference","source":"engine/sim/ai/AIBehaviorTree.js","updated":"","headings":["sim/ai/AIBehaviorTree.js","Functions","createSelector(name, children = [])","createSequence(name, children = [])","createParallel(name, children = [], successThreshold = -1, failureThreshold = 1)","createRandomSelector(name, children = [])","createInverter(name, child)","createRepeater(name, child, times = -1)","createUntilFail(name, child)","createUntilSuccess(name, child)","createSucceeder(name, child)","createFailer(name, child)","createCooldown(name, child, cooldownMs)","createConditionGuard(name, child, condition)","createAction(name, action)","createCondition(name, condition)","createWait(name, durationMs)","createLog(name, message)","tickNode(node, blackboard, deltaTime)","resetNode(node)","createTreeRunner(rootNode, blackboard)","tickTree(runner, deltaTime)","createCombatTree(actions)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"Node name (Object) — Child node Returns: Succeeder node Create a Failer decorator Always returns FAILURE Parameters: (string) — Node name (Object) — Child node Returns: Failer node Create a Cooldown decorator Prevents child from running until cooldown expires Parameters: (string) — Node name (Object) — Child node (number) — Cooldown in milliseconds Returns: Cooldown node Create a Condition Guard decorator Only runs child if condition is met Parameters: (string) — Node name (Object) — Child node (Function) — Condition function (blackboard) = boolean Returns: Condition guard node Create an Action leaf node Parameters: (string) — Action name (Function) — Action function (blackboard, deltaTime) = NODE STATUS Returns: Action node Create a Condition leaf node Parameters: (string) — Condition name (Function) — Condition function (blackboard) = boolean Returns: Condition node Create a Wait leaf node Parameters: (string) — Node name (number) — Wait duration in milliseconds Returns: Wait node Create a Log leaf node (for debugging) Parameters: (string) — Node name (string) — Message to log Returns: Log node Tick a behavior tree node Parameters: (Object) — Node to tick (Object) — Blackboard data (number) — Delta time in ms Returns: NODE STATUS Reset a behavior tree node and all children Parameters: (Object) — Node to reset Create a behavior tree runner Parameters: (Object) — Root node of tree (Object) — Blackboard data Returns: Tree runner Tick the behavior tree Parameters: (Object) — Tree runner (number) — Delta time in ms Returns: NODE STATUS Create a common combat behavior tree Parameters: (Object) — Action implementations Returns: Root node Constants Re exports , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics,","contentHash":"bec1610b2a1d007756362e9582837f54b76bb63a6e37206303275aa79898f9d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIBehaviorTree.md::0002","path":"engine/reference/sim/ai/AIBehaviorTree.md","title":"sim/ai/AIBehaviorTree.js","description":"","kind":"reference","source":"engine/sim/ai/AIBehaviorTree.js","updated":"","headings":["sim/ai/AIBehaviorTree.js","Functions","createSelector(name, children = [])","createSequence(name, children = [])","createParallel(name, children = [], successThreshold = -1, failureThreshold = 1)","createRandomSelector(name, children = [])","createInverter(name, child)","createRepeater(name, child, times = -1)","createUntilFail(name, child)","createUntilSuccess(name, child)","createSucceeder(name, child)","createFailer(name, child)","createCooldown(name, child, cooldownMs)","createConditionGuard(name, child, condition)","createAction(name, action)","createCondition(name, condition)","createWait(name, durationMs)","createLog(name, message)","tickNode(node, blackboard, deltaTime)","resetNode(node)","createTreeRunner(rootNode, blackboard)","tickTree(runner, deltaTime)","createCombatTree(actions)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"Returns: Root node Constants Re exports , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision ma","contentHash":"1730467ba77c770dbe8075010be3ec6b44dd39f4808f7c825f147a30dddc7c83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AICover.md::0000","path":"engine/reference/sim/ai/AICover.md","title":"sim/ai/AICover.js","description":"","kind":"reference","source":"engine/sim/ai/AICover.js","updated":"","headings":["sim/ai/AICover.js","Functions","createCoverPoint(position, normal, options = {})","computePeekPositions(cover)","detectCoverPoints(obstacles, sampleSpacing = 2)","scoreCoverPoint(cover, npcPos, threatPos, obstacles, options = {})","findBestCover(coverPoints, npcPos, threatPos, obstacles, options = {})","createCoverState()","enterCover(state, cover, npcId)","exitCover(state)","startPeek(state, action, now)","updateCoverState(state, now)","getCoverShootPosition(state, basePos)","canShootFromCover(state)","applySuppression(state, duration, now)","isSuppressed(state, now)","damageCover(cover, damage)","findFlankingPositions(targetPos, targetFacing, flankDistance, coverPoints, obstacles)","findRetreatCover(npcPos, threatPos, coverPoints, obstacles, minRetreatDist = 10)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a cover point definition Parameters: (number[]) — [x, y, z] cover position (number[]) — [x, y, z] direction cover faces (away from threat) (Object) — Cover options Returns: Cover point Pre compute peek positions for a cover point Parameters: (Object) — Cover point Find cover points from obstacle geometry Parameters: (number) — Distance between sample points Returns: Cover points Score a cover point for a given tactical situation Parameters: (Object) — Cover point (number[]) — NPC current position (number[]) — Threat position (Object) — Scoring options Returns: Cover score (higher = better) Find best cover point from available options Parameters: (Array<Object ) — Available cover points (number[]) — NPC position (number[]) — Threat position (Array) — Obstacles (Object) — Options Returns: Best cover point or null Create NPC cover state tracker Returns: Cover state Enter cover at a cover point Parameters: (Object) — Cover state (Object) — Cover point to enter (number) — NPC ID Exit current cover Parameters: (Object) — Cover state Start peek action from cover Parameters: (Object) — Cover state (number) — COVER ACTION type (number) — Current time Returns: True if peek started Update cover state Parameters: (Object) — Cover state (number) — Current time Get current shoot position based on cover action Parameters: (Object) — Cover state (number[]) — Base NPC position Returns: Shoot position Check if NPC can shoot from current cover state Parameters: (Object) — Cover state Returns: } Apply suppression to an NPC Parameters: (Object) — Cover state (number) — Suppression","contentHash":"1a0bad4c544932f7f6999ab494049f15489d19fddd6c9937632e402245b4c73c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AICover.md::0001","path":"engine/reference/sim/ai/AICover.md","title":"sim/ai/AICover.js","description":"","kind":"reference","source":"engine/sim/ai/AICover.js","updated":"","headings":["sim/ai/AICover.js","Functions","createCoverPoint(position, normal, options = {})","computePeekPositions(cover)","detectCoverPoints(obstacles, sampleSpacing = 2)","scoreCoverPoint(cover, npcPos, threatPos, obstacles, options = {})","findBestCover(coverPoints, npcPos, threatPos, obstacles, options = {})","createCoverState()","enterCover(state, cover, npcId)","exitCover(state)","startPeek(state, action, now)","updateCoverState(state, now)","getCoverShootPosition(state, basePos)","canShootFromCover(state)","applySuppression(state, duration, now)","isSuppressed(state, now)","damageCover(cover, damage)","findFlankingPositions(targetPos, targetFacing, flankDistance, coverPoints, obstacles)","findRetreatCover(npcPos, threatPos, coverPoints, obstacles, minRetreatDist = 10)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"from current cover state Parameters: (Object) — Cover state Returns: } Apply suppression to an NPC Parameters: (Object) — Cover state (number) — Suppression duration in ms (number) — Current time Check if NPC is suppressed Parameters: (Object) — Cover state (number) — Current time Returns: True if suppressed Apply damage to cover point Parameters: (Object) — Cover point (number) — Damage amount Returns: True if cover was destroyed Find flanking positions around a target Parameters: (number[]) — Target position (number[]) — Target facing direction (number) — Distance to flank from (Array<Object ) — Available cover points (Array) — Obstacles Returns: } Flank positions Find retreat positions away from threat Parameters: (number[]) — NPC position (number[]) — Threat position (Array<Object ) — Available cover (Array) — Obstacles (number) — Minimum retreat distance Returns: Retreat cover points sorted by safety Constants — Cover quality thresholds — Cover action types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See","contentHash":"e46d62ae78124f5fdcddc3b1fda1911d5c992cdba7194123372974042be7e076"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AICover.md::0002","path":"engine/reference/sim/ai/AICover.md","title":"sim/ai/AICover.js","description":"","kind":"reference","source":"engine/sim/ai/AICover.js","updated":"","headings":["sim/ai/AICover.js","Functions","createCoverPoint(position, normal, options = {})","computePeekPositions(cover)","detectCoverPoints(obstacles, sampleSpacing = 2)","scoreCoverPoint(cover, npcPos, threatPos, obstacles, options = {})","findBestCover(coverPoints, npcPos, threatPos, obstacles, options = {})","createCoverState()","enterCover(state, cover, npcId)","exitCover(state)","startPeek(state, action, now)","updateCoverState(state, now)","getCoverShootPosition(state, basePos)","canShootFromCover(state)","applySuppression(state, duration, now)","isSuppressed(state, now)","damageCover(cover, damage)","findFlankingPositions(targetPos, targetFacing, flankDistance, coverPoints, obstacles)","findRetreatCover(npcPos, threatPos, coverPoints, obstacles, minRetreatDist = 10)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"dcb0de51eb851c021991d8506fb88d946be137f3c8abf884f3173607a6b31dc0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AICrowd.md::0000","path":"engine/reference/sim/ai/AICrowd.md","title":"sim/ai/AICrowd.js","description":"","kind":"reference","source":"engine/sim/ai/AICrowd.js","updated":"","headings":["sim/ai/AICrowd.js","Functions","calculateSocialForce(agent, neighbors, walls, goal)","createCrowdAgent(position, config = {})","createCrowdSystem(config = {})","addCrowdAgent(crowd, agent)","removeCrowdAgent(crowd, agentId)","addCrowdWall(crowd, start, end)","addAttractor(crowd, position, strength, radius)","triggerPanic(crowd, source, radius, intensity = 1)","triggerEvacuation(crowd)","updateCrowd(crowd, deltaTime)","getCrowdStats(crowd)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Calculate social force (Helbing model) Parameters: (Object) — Agent (Array) — Nearby agents (Array) — Wall segments (number[]) — Goal position Returns: Force vector Create crowd agent Parameters: (number[]) — Position (Object) — Config Returns: Agent Create crowd system Parameters: (Object) — Config Returns: Crowd system Add agent to crowd Parameters: (Object) — Crowd system (Object) — Agent Remove agent from crowd Parameters: (Object) — Crowd system (string) — Agent ID Add wall to crowd system Parameters: (Object) — Crowd system (number[]) — Wall start (number[]) — Wall end Add attractor (draws crowd) Parameters: (Object) — Crowd system (number[]) — Position (number) — Pull strength (number) — Effect radius Trigger panic Parameters: (Object) — Crowd system (number[]) — Panic source position (number) — Panic radius (number) — Panic intensity 0 1 Set evacuation mode Parameters: (Object) — Crowd system Update crowd simulation Parameters: (Object) — Crowd system (number) — Seconds Get crowd statistics Parameters: (Object) — Crowd system Returns: Stats Constants — Crowd behavior modes — Individual agent states <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD)","contentHash":"e5b79c1fc96728c8ef704d6c05b133f8a72558dbe9e1058ff21e0241e60893ba"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AICrowd.md::0001","path":"engine/reference/sim/ai/AICrowd.md","title":"sim/ai/AICrowd.js","description":"","kind":"reference","source":"engine/sim/ai/AICrowd.js","updated":"","headings":["sim/ai/AICrowd.js","Functions","calculateSocialForce(agent, neighbors, walls, goal)","createCrowdAgent(position, config = {})","createCrowdSystem(config = {})","addCrowdAgent(crowd, agent)","removeCrowdAgent(crowd, agentId)","addCrowdWall(crowd, start, end)","addAttractor(crowd, position, strength, radius)","triggerPanic(crowd, source, radius, intensity = 1)","triggerEvacuation(crowd)","updateCrowd(crowd, deltaTime)","getCrowdStats(crowd)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d78aa8807aab6f9b7dfeadcecf94f120cd43b11a908e7498f48ca9030d011d2a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIDialogue.md::0000","path":"engine/reference/sim/ai/AIDialogue.md","title":"sim/ai/AIDialogue.js","description":"","kind":"reference","source":"engine/sim/ai/AIDialogue.js","updated":"","headings":["sim/ai/AIDialogue.js","Functions","createDialogueTree(id, config = {})","createDialogueNode(config)","addDialogueNode(tree, node)","createDialogueState()","addDialogueTree(state, tree)","setDialogueFlag(state, flag, value)","getDialogueFlag(state, flag, defaultValue = null)","startConversation(state, context = {})","processCurrentNode(state, context = {})","selectChoice(state, choiceIndex, context = {})","continueDialogue(state, context = {})","dialogueBuilder(id)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a dialogue tree Parameters: (string) — Tree ID (Object) — Tree config Returns: Dialogue tree Create a dialogue node Parameters: (Object) — Node config Returns: Dialogue node Add node to dialogue tree Parameters: (Object) — Dialogue tree (Object) — Node to add Create dialogue state for an NPC Returns: Dialogue state Add dialogue tree to NPC Parameters: (Object) — Dialogue state (Object) — Dialogue tree Set dialogue flag Parameters: (Object) — Dialogue state (string) — Flag name ( ) — Flag value Get dialogue flag Parameters: (Object) — Dialogue state (string) — Flag name ( ) — Default if not set Returns: Flag value Start conversation with NPC Parameters: (Object) — Dialogue state (Object) — Conversation context {playerId, relationship, etc.} Returns: First dialogue result Process current dialogue node Parameters: (Object) — Dialogue state (Object) — Context Returns: Dialogue result Select player choice Parameters: (Object) — Dialogue state (number) — Choice index (Object) — Context Returns: Next dialogue result Continue to next dialogue (for NPC lines) Parameters: (Object) — Dialogue state (Object) — Context Returns: Next dialogue result Fluent dialogue tree builder Parameters: (string) — Tree ID Returns: Builder Constants — Node types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics","contentHash":"1557286d49fe269cab41b10c7d9caf5f6af641ff8915021a71cacba68e9536c8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIDialogue.md::0001","path":"engine/reference/sim/ai/AIDialogue.md","title":"sim/ai/AIDialogue.js","description":"","kind":"reference","source":"engine/sim/ai/AIDialogue.js","updated":"","headings":["sim/ai/AIDialogue.js","Functions","createDialogueTree(id, config = {})","createDialogueNode(config)","addDialogueNode(tree, node)","createDialogueState()","addDialogueTree(state, tree)","setDialogueFlag(state, flag, value)","getDialogueFlag(state, flag, defaultValue = null)","startConversation(state, context = {})","processCurrentNode(state, context = {})","selectChoice(state, choiceIndex, context = {})","continueDialogue(state, context = {})","dialogueBuilder(id)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"6a1b78dfe998beba16c7c2a3a0376dab6a9db4ab9c77a1c4c100edca1af281ae"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIDirector.md::0000","path":"engine/reference/sim/ai/AIDirector.md","title":"sim/ai/AIDirector.js","description":"","kind":"reference","source":"engine/sim/ai/AIDirector.js","updated":"","headings":["sim/ai/AIDirector.js","Functions","createPlayerState()","updatePlayerState(state, data, deltaTime)","createPacingController(config = {})","updatePacing(pacing, playerState, deltaTime)","createSpawnDirector(config = {})","registerSpawnType(director, intensity, spawnType)","addSpawnPoint(director, point)","updateSpawnDirector(director, pacing, playerPosition, deltaTime)","reportSpawnKilled(director, spawnId)","createDifficultyScaler(config = {})","updateDifficulty(scaler, playerState, deltaTime)","createAIDirector(config = {})","updateAIDirector(director, gameData, deltaTime)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create player state tracker Returns: Player state Update player state metrics Parameters: (Object) — Player state (Object) — Raw gameplay data (number) — Time elapsed Create pacing controller Parameters: (Object) — Pacing config Returns: Pacing controller Update pacing state Parameters: (Object) — Pacing controller (Object) — Player state (number) — Seconds elapsed Returns: } Create spawn director Parameters: (Object) — Spawn config Returns: Spawn director Register spawn type Parameters: (Object) — Spawn director (number) — Intensity level (Object) — {type, weight, cost, count} Add spawn point Parameters: (Object) — Spawn director (Object) — {position, types, active} Update spawn director Parameters: (Object) — Spawn director (Object) — Pacing controller (number[]) — Player position (number) — Seconds elapsed Returns: Spawns to create Report spawn killed Parameters: (Object) — Spawn director (string) — Spawn ID Create difficulty scaler Parameters: (Object) — Config Returns: Difficulty scaler Update difficulty based on player performance Parameters: (Object) — Difficulty scaler (Object) — Player state (number) — Seconds elapsed Create complete AI Director Parameters: (Object) — Configuration Returns: AI Director Update AI Director Parameters: (Object) — AI Director (Object) — Current game state (number) — Seconds elapsed Returns: } Constants — Pacing states — Intensity levels <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass","contentHash":"c4d3d6565f974e4a31448df78638ce94a1bc75fd87fe1f804f4a93a22d7d1d6d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIDirector.md::0001","path":"engine/reference/sim/ai/AIDirector.md","title":"sim/ai/AIDirector.js","description":"","kind":"reference","source":"engine/sim/ai/AIDirector.js","updated":"","headings":["sim/ai/AIDirector.js","Functions","createPlayerState()","updatePlayerState(state, data, deltaTime)","createPacingController(config = {})","updatePacing(pacing, playerState, deltaTime)","createSpawnDirector(config = {})","registerSpawnType(director, intensity, spawnType)","addSpawnPoint(director, point)","updateSpawnDirector(director, pacing, playerPosition, deltaTime)","reportSpawnKilled(director, spawnId)","createDifficultyScaler(config = {})","updateDifficulty(scaler, playerState, deltaTime)","createAIDirector(config = {})","updateAIDirector(director, gameData, deltaTime)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"ec92fc58c43c49e112600f0ba9f7e089fd68d332815557211d78978993560d3e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIEcology.md::0000","path":"engine/reference/sim/ai/AIEcology.md","title":"sim/ai/AIEcology.js","description":"","kind":"reference","source":"engine/sim/ai/AIEcology.js","updated":"","headings":["sim/ai/AIEcology.js","Functions","createSpecies(config)","createCreature(species, position)","createEcosystem(config = {})","registerSpecies(eco, species)","spawnCreature(eco, speciesId, position)","removeCreature(eco, creatureId, cause = \"natural\")","createFoodSource(eco, position, type, nutrition)","consumeFood(eco, foodId, amount)","createPack(eco, speciesId, leaderId)","addToPack(eco, packId, creatureId)","updateCreature(eco, creature, deltaHours)","updateEcosystem(eco, deltaHours)","getEcosystemStats(eco)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create species definition Parameters: (Object) — Species config Returns: Species definition Create creature instance Parameters: (Object) — Species definition (number[]) — Starting position Returns: Creature instance Create ecosystem manager Parameters: (Object) — Ecosystem config Returns: Ecosystem Register species in ecosystem Parameters: (Object) — Ecosystem (Object) — Species to register Spawn creature in ecosystem Parameters: (Object) — Ecosystem (string) — Species ID (number[]) — Position Returns: Created creature Remove creature from ecosystem Parameters: (Object) — Ecosystem (string) — Creature ID (string) — Death cause Create food source Parameters: (Object) — Ecosystem (number[]) — Position (string) — \"plant\", \"carcass\", \"fruit\" (number) — Nutritional value Consume food source Parameters: (Object) — Ecosystem (string) — Food source ID (number) — Amount to consume Returns: Actual amount consumed Create pack/herd Parameters: (Object) — Ecosystem (string) — Species ID (string) — Leader creature ID Returns: Pack Add creature to pack Parameters: (Object) — Ecosystem (string) — Pack ID (string) — Creature ID Update creature behavior Parameters: (Object) — Ecosystem (Object) — Creature to update (number) — Game hours elapsed Update entire ecosystem Parameters: (Object) — Ecosystem (number) — Game hours elapsed Get ecosystem statistics Parameters: (Object) — Ecosystem Returns: Statistics Constants — Species roles in ecosystem — Activity states <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision","contentHash":"1470bf9cf1e5d5c15470eadcb662d2233848f1e599dff1d4ac0a89a1c5835d04"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIEcology.md::0001","path":"engine/reference/sim/ai/AIEcology.md","title":"sim/ai/AIEcology.js","description":"","kind":"reference","source":"engine/sim/ai/AIEcology.js","updated":"","headings":["sim/ai/AIEcology.js","Functions","createSpecies(config)","createCreature(species, position)","createEcosystem(config = {})","registerSpecies(eco, species)","spawnCreature(eco, speciesId, position)","removeCreature(eco, creatureId, cause = \"natural\")","createFoodSource(eco, position, type, nutrition)","consumeFood(eco, foodId, amount)","createPack(eco, speciesId, leaderId)","addToPack(eco, packId, creatureId)","updateCreature(eco, creature, deltaHours)","updateEcosystem(eco, deltaHours)","getEcosystemStats(eco)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"roles in ecosystem — Activity states <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"607cf2c97726072e584d3130665b6e8d8490efeced0b75a09f3241de9f73043c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIEconomy.md::0000","path":"engine/reference/sim/ai/AIEconomy.md","title":"sim/ai/AIEconomy.js","description":"","kind":"reference","source":"engine/sim/ai/AIEconomy.js","updated":"","headings":["sim/ai/AIEconomy.js","Functions","createResource(config)","createMarket(config = {})","initMarketResource(market, resource, initialSupply = 100, baseDemand = 10)","calculatePrice(market, resourceId)","updateMarketPrices(market, deltaHours)","buyFromMarket(market, resourceId, quantity, buyer)","sellToMarket(market, resourceId, quantity, seller)","createInventory(capacity = 100)","addToInventory(inventory, resourceId, quantity, resourceDef)","removeFromInventory(inventory, resourceId, quantity, resourceDef)","createRecipe(config)","canCraft(recipe, inventory, skills = {})","craft(recipe, inventory, resourceDefs, skills = {})","createProductionBuilding(config)","updateProductionBuilding(building, recipes, resourceDefs, deltaHours)","createEconomyManager()","registerResource(manager, resource)","registerRecipe(manager, recipe)","updateEconomy(manager, deltaHours)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create resource definition Parameters: (Object) — Resource config Returns: Resource definition Create a market (trading location) Parameters: (Object) — Market config Returns: Market Initialize resource in market Parameters: (Object) — Market (Object) — Resource definition (number) — Initial supply (number) — Base demand per day Calculate current price based on supply/demand Parameters: (Object) — Market (string) — Resource ID Returns: Current price Update market prices Parameters: (Object) — Market (number) — Hours elapsed Execute a buy transaction Parameters: (Object) — Market (string) — Resource ID (number) — Quantity to buy (Object) — Buyer {id, gold} Returns: } Execute a sell transaction Parameters: (Object) — Market (string) — Resource ID (number) — Quantity to sell (Object) — Seller {id, gold} Returns: } Create inventory Parameters: (number) — Max weight capacity Returns: Inventory Add items to inventory Parameters: (Object) — Inventory (string) — Resource ID (number) — Quantity to add (Object) — Resource definition Returns: Quantity actually added Remove items from inventory Parameters: (Object) — Inventory (string) — Resource ID (number) — Quantity to remove (Object) — Resource definition Returns: Quantity actually removed Create crafting recipe Parameters: (Object) — Recipe config Returns: Recipe Check if can craft recipe Parameters: (Object) — Recipe (Object) — Crafter's inventory (Object) — Crafter's skills {skillName: level} Returns: } Execute crafting Parameters: (Object) — Recipe (Object) — Crafter's inventory (Object) — Map of resource definitions","contentHash":"af3b990d44cc04760084459b3dcd16c46d154b8dbca960c8f2a51ebd4dae0e59"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIEconomy.md::0001","path":"engine/reference/sim/ai/AIEconomy.md","title":"sim/ai/AIEconomy.js","description":"","kind":"reference","source":"engine/sim/ai/AIEconomy.js","updated":"","headings":["sim/ai/AIEconomy.js","Functions","createResource(config)","createMarket(config = {})","initMarketResource(market, resource, initialSupply = 100, baseDemand = 10)","calculatePrice(market, resourceId)","updateMarketPrices(market, deltaHours)","buyFromMarket(market, resourceId, quantity, buyer)","sellToMarket(market, resourceId, quantity, seller)","createInventory(capacity = 100)","addToInventory(inventory, resourceId, quantity, resourceDef)","removeFromInventory(inventory, resourceId, quantity, resourceDef)","createRecipe(config)","canCraft(recipe, inventory, skills = {})","craft(recipe, inventory, resourceDefs, skills = {})","createProductionBuilding(config)","updateProductionBuilding(building, recipes, resourceDefs, deltaHours)","createEconomyManager()","registerResource(manager, resource)","registerRecipe(manager, recipe)","updateEconomy(manager, deltaHours)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"skills {skillName: level} Returns: } Execute crafting Parameters: (Object) — Recipe (Object) — Crafter's inventory (Object) — Map of resource definitions (Object) — Crafter's skills (will be modified) Returns: } Create production building Parameters: (Object) — Building config Returns: Production building Update production building Parameters: (Object) — Production building (Object) — Map of recipes (Object) — Map of resource definitions (number) — Hours elapsed Returns: } Create economy manager Returns: Economy manager Register resource Parameters: (Object) — Economy manager (Object) — Resource definition Register recipe Parameters: (Object) — Economy manager (Object) — Recipe definition Update entire economy Parameters: (Object) — Economy manager (number) — Hours elapsed Constants — Resource categories — Market trend directions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"5a094217c51dc57e38a1fd3151522f50dd13e52a6df817019f23f6b8dec75c53"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIEvasion.md::0000","path":"engine/reference/sim/ai/AIEvasion.md","title":"sim/ai/AIEvasion.js","description":"","kind":"reference","source":"engine/sim/ai/AIEvasion.js","updated":"","headings":["sim/ai/AIEvasion.js","Functions","createEvasionState(params = {})","startDodge(state, dodgeType, npcPos, npcFacing, now)","updateEvasion(state, now)","isEvading(state)","canDodge(state, now)","updateStrafe(state, npcFacing, deltaTime)","setStrafeDirection(state, direction)","reactToThreat(state, npcPos, npcFacing, threatDir, now, options = {})","checkProjectileThreats(state, npcPos, npcFacing, projectiles, now)","checkGrenadeThreats(state, npcPos, npcFacing, grenades, now)","generateCombatMovement(state, npcPos, targetPos, deltaTimeMs)","circleStrafe(npcPos, targetPos, direction, speed)","getEvasionParamsForSkill(skill)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create evasion state for an NPC Parameters: (Object) — Evasion parameters Returns: Evasion state Attempt to dodge in a direction Parameters: (Object) — Evasion state (number) — EVASION TYPE (number[]) — NPC position (number[]) — NPC facing direction (number) — Current time Returns: True if dodge started Update evasion state Parameters: (Object) — Evasion state (number) — Current time Returns: } Check if NPC is currently evading Parameters: (Object) — Evasion state Returns: True if in evasion action Check if NPC can dodge Parameters: (Object) — Evasion state (number) — Current time Returns: True if dodge is available Update strafe behavior Parameters: (Object) — Evasion state (number[]) — NPC facing direction (number) — Delta time in ms Returns: Strafe velocity [x, y, z] Set explicit strafe direction Parameters: (Object) — Evasion state (number) — 1 (left), 0 (none), 1 (right) React to incoming threat (projectile, attack) Parameters: (Object) — Evasion state (number[]) — NPC position (number[]) — NPC facing (number[]) — Direction threat is coming from (number) — Current time (Object) — Reaction options Returns: True if evasion started Check for incoming projectiles and react Parameters: (Object) — Evasion state (number[]) — NPC position (number[]) — NPC facing (number) — Current time Returns: True if evasion triggered Check for grenades and react Parameters: (Object) — Evasion state (number[]) — NPC position (number[]) — NPC facing (number) — Current time Returns: } Generate unpredictable movement pattern Parameters: (Object) — Evasion state (number[]) — NPC position","contentHash":"a75538379a606aca54515b441b5721294da5f5b97cf26780e93104eda01776ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIEvasion.md::0001","path":"engine/reference/sim/ai/AIEvasion.md","title":"sim/ai/AIEvasion.js","description":"","kind":"reference","source":"engine/sim/ai/AIEvasion.js","updated":"","headings":["sim/ai/AIEvasion.js","Functions","createEvasionState(params = {})","startDodge(state, dodgeType, npcPos, npcFacing, now)","updateEvasion(state, now)","isEvading(state)","canDodge(state, now)","updateStrafe(state, npcFacing, deltaTime)","setStrafeDirection(state, direction)","reactToThreat(state, npcPos, npcFacing, threatDir, now, options = {})","checkProjectileThreats(state, npcPos, npcFacing, projectiles, now)","checkGrenadeThreats(state, npcPos, npcFacing, grenades, now)","generateCombatMovement(state, npcPos, targetPos, deltaTimeMs)","circleStrafe(npcPos, targetPos, direction, speed)","getEvasionParamsForSkill(skill)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— NPC facing (number) — Current time Returns: } Generate unpredictable movement pattern Parameters: (Object) — Evasion state (number[]) — NPC position (number[]) — Target position (number) — Delta time in ms Returns: Movement velocity Calculate circle strafe velocity around target Parameters: (number[]) — NPC position (number[]) — Target position (number) — 1 (counter clockwise) or 1 (clockwise) (number) — Movement speed Returns: Circle strafe velocity Get evasion parameters for skill level Parameters: (string) — \"novice\", \"average\", \"expert\" Returns: Evasion parameters Constants — Evasion action types — Default evasion parameters <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"6299612857ffc97a8b94fd45666a2e73851fd9237282b1ba849e3afd1f9c66d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIFaction.md::0000","path":"engine/reference/sim/ai/AIFaction.md","title":"sim/ai/AIFaction.js","description":"","kind":"reference","source":"engine/sim/ai/AIFaction.js","updated":"","headings":["sim/ai/AIFaction.js","Functions","createFaction(config)","createFactionManager()","registerFaction(manager, faction)","getEntityFaction(manager, entityId)","addToFaction(manager, entityId, factionId)","setDiplomaticStance(manager, factionA, factionB, stance)","getDiplomaticStance(manager, factionA, factionB)","areFactionsHostile(manager, factionA, factionB)","areFactionsAllied(manager, factionA, factionB)","areEntitiesHostile(manager, entityA, entityB)","modifyPlayerReputation(manager, factionId, delta)","getPlayerReputationLevel(manager, factionId)","canAccessFactionService(manager, factionId, service)","createTreaty(config)","proposeTreaty(manager, treaty)","declareWar(manager, aggressor, target)","claimTerritory(manager, factionId, territoryId)","getTerritoryOwner(manager, territoryId)","calculateFactionPower(manager, factionId)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a faction Parameters: (Object) — Faction configuration Returns: Faction Create faction manager Returns: Faction manager Register a faction Parameters: (Object) — Faction manager (Object) — Faction to register Get entity's faction Parameters: (Object) — Faction manager (number) — Entity ID Returns: Faction Add entity to faction Parameters: (Object) — Faction manager (number) — Entity ID (string) — Faction ID Set diplomatic stance between factions Parameters: (Object) — Faction manager (string) — First faction ID (string) — Second faction ID (number) — DIPLOMATIC STANCE value Get diplomatic stance between factions Parameters: (Object) — Faction manager (string) — First faction ID (string) — Second faction ID Returns: DIPLOMATIC STANCE value Check if factions are hostile Parameters: (Object) — Faction manager (string) — First faction ID (string) — Second faction ID Returns: Are hostile Check if factions are allied Parameters: (Object) — Faction manager (string) — First faction ID (string) — Second faction ID Returns: Are allied Check if two entities are hostile to each other Parameters: (Object) — Faction manager (number) — First entity ID (number) — Second entity ID Returns: Are hostile Modify player reputation with faction Parameters: (Object) — Faction manager (string) — Faction ID (number) — Reputation change Get player reputation level with faction Parameters: (Object) — Faction manager (string) — Faction ID Returns: {level: string, value: number} Check if player can access faction services Parameters: (Object) — Faction manager (string) — Faction ID (string) —","contentHash":"623e7b4bd8d1b50f038cb6dba4d17e8eb97d53df8b6c78a1ce3259ec88e2b827"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIFaction.md::0001","path":"engine/reference/sim/ai/AIFaction.md","title":"sim/ai/AIFaction.js","description":"","kind":"reference","source":"engine/sim/ai/AIFaction.js","updated":"","headings":["sim/ai/AIFaction.js","Functions","createFaction(config)","createFactionManager()","registerFaction(manager, faction)","getEntityFaction(manager, entityId)","addToFaction(manager, entityId, factionId)","setDiplomaticStance(manager, factionA, factionB, stance)","getDiplomaticStance(manager, factionA, factionB)","areFactionsHostile(manager, factionA, factionB)","areFactionsAllied(manager, factionA, factionB)","areEntitiesHostile(manager, entityA, entityB)","modifyPlayerReputation(manager, factionId, delta)","getPlayerReputationLevel(manager, factionId)","canAccessFactionService(manager, factionId, service)","createTreaty(config)","proposeTreaty(manager, treaty)","declareWar(manager, aggressor, target)","claimTerritory(manager, factionId, territoryId)","getTerritoryOwner(manager, territoryId)","calculateFactionPower(manager, factionId)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"ID Returns: {level: string, value: number} Check if player can access faction services Parameters: (Object) — Faction manager (string) — Faction ID (string) — Service type Returns: Can access Create a treaty Parameters: (Object) — Treaty config Returns: Treaty Propose treaty Parameters: (Object) — Faction manager (Object) — Treaty to propose Returns: Was accepted Declare war Parameters: (Object) — Faction manager (string) — Aggressor faction ID (string) — Target faction ID Claim territory for faction Parameters: (Object) — Faction manager (string) — Faction ID (string) — Territory ID Get territory owner Parameters: (Object) — Faction manager (string) — Territory ID Returns: Owner faction ID Calculate faction power Parameters: (Object) — Faction manager (string) — Faction ID Returns: Power score Constants — Diplomatic stance — Reputation thresholds from AISchema — Treaty types Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"4fb51262762f39d3a5cd2854f9d1d9f68a6422817955ba5ad98ce24866144284"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIFormation.md::0000","path":"engine/reference/sim/ai/AIFormation.md","title":"sim/ai/AIFormation.js","description":"","kind":"reference","source":"engine/sim/ai/AIFormation.js","updated":"","headings":["sim/ai/AIFormation.js","Functions","createFormation(type, options = {})","generateFormationSlots(formation, unitCount)","createFormationManager(formation)","assignToFormation(manager, unitId, isLeader = false)","removeFromFormation(manager, unitId)","getFormationPosition(manager, unitId)","moveFormation(manager, targetCenter, targetFacing = null)","updateFormationMovement(manager, deltaTime)","changeFormation(manager, newType, options = {})","getAllFormationPositions(manager)","isFormationComplete(manager, currentPositions, threshold = 1)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create formation definition Parameters: (string) — Formation type (Object) — Formation options Returns: Formation definition Generate formation slot positions Parameters: (Object) — Formation (number) — Number of units Returns: } Slot definitions Create formation manager for a group Parameters: (Object) — Formation definition Returns: Formation manager Assign unit to formation slot Parameters: (Object) — Formation manager (number) — Unit ID (boolean) — Is this the leader Returns: Assigned slot index Remove unit from formation Parameters: (Object) — Formation manager (number) — Unit ID Get unit's target position in formation Parameters: (Object) — Formation manager (number) — Unit ID Returns: World position Move formation to target Parameters: (Object) — Formation manager (number[]) — Target center position (number[]) — Target facing direction (optional) Update formation movement Parameters: (Object) — Formation manager (number) — Delta time in seconds Returns: Formation reached destination Change formation type Parameters: (Object) — Formation manager (string) — New formation type (Object) — Formation options Get all unit target positions Parameters: (Object) — Formation manager Returns: Unit ID → target position Check if formation is formed up Parameters: (Object) — Formation manager (Map<number, number[] ) — Current unit positions (number) — Distance threshold Returns: Is formed up Constants — Formation patterns — Create preset formations for common scenarios <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics,","contentHash":"9ad3c1467963b9926edfc1ab9365f74a5485e46633a45ddfd76bc55f976168e3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIFormation.md::0001","path":"engine/reference/sim/ai/AIFormation.md","title":"sim/ai/AIFormation.js","description":"","kind":"reference","source":"engine/sim/ai/AIFormation.js","updated":"","headings":["sim/ai/AIFormation.js","Functions","createFormation(type, options = {})","generateFormationSlots(formation, unitCount)","createFormationManager(formation)","assignToFormation(manager, unitId, isLeader = false)","removeFromFormation(manager, unitId)","getFormationPosition(manager, unitId)","moveFormation(manager, targetCenter, targetFacing = null)","updateFormationMovement(manager, deltaTime)","changeFormation(manager, newType, options = {})","getAllFormationPositions(manager)","isFormationComplete(manager, currentPositions, threshold = 1)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— Create preset formations for common scenarios <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"fa6ee456b2dbfd0e666385097fd23472fad4a91b2f163f82dd0d1953ff1a7afc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIHitDetection.md::0000","path":"engine/reference/sim/ai/AIHitDetection.md","title":"sim/ai/AIHitDetection.js","description":"","kind":"reference","source":"engine/sim/ai/AIHitDetection.js","updated":"","headings":["sim/ai/AIHitDetection.js","Classes","class SpatialHash","Functions","sweptSphereSphere(sphereStart, sphereEnd, sphereRadius, targetCenter, targetRadius)","sweptSphereSphereMoving(sphereA, sphereB)","capsuleSphereIntersect(capsuleStart, capsuleEnd, capsuleRadius, targetCenter, targetRadius)","calculateDamageFalloff(baseDamage, distance, radius, falloffType = FALLOFFTYPE.LINEAR, options = {})","getAoETargets(center, radius, targets, options = {})","getConeTargets(origin, direction, halfAngle, range, targets, options = {})","checkProjectileHit(projectile, targets, options = {})","checkBeamHit(origin, direction, maxRange, targets, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Spatial hash for efficient broad phase collision detection Method Signature Summary Hash a world position to cell key Clear all entries Insert an entity at a position Remove an entity Query all entities within radius of a position Query entities along a ray/path (for swept collision) Functions Swept sphere vs static sphere intersection Finds time t in [0,1] when moving sphere first touches static sphere Parameters: (number[]) — Moving sphere center at t=0 (number[]) — Moving sphere center at t=1 (number) — Moving sphere radius (number[]) — Static sphere center (number) — Static sphere radius Returns: {t, point, normal} or null if no hit Swept sphere vs moving sphere intersection Handles both objects moving (relative velocity approach) Parameters: (Object) — {start, end, radius} (Object) — {start, end, radius} Returns: {t, point, normal} or null Swept capsule collision (projectile path as line segment) Creates a capsule from start to end position with given radius Parameters: (number[]) — Capsule line start (number[]) — Capsule line end (number) — Capsule radius (number[]) — Target sphere center (number) — Target sphere radius Returns: {t, point, normal, distance} or null Calculate damage with distance falloff Parameters: (number) — Maximum damage at center (number) — Distance from effect center (number) — Effect radius (string) — Type of falloff curve (Object) — Additional options Returns: Calculated damage Find all targets within an Area of Effect Parameters: (number[]) — AoE center position (number) — AoE radius (Array) — Array of {id, position, radius} (Object) —","contentHash":"1f87307a162a11a870b53b815fa5264bb658bdcb424a7dd6b0140d8fdaa4308e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIHitDetection.md::0001","path":"engine/reference/sim/ai/AIHitDetection.md","title":"sim/ai/AIHitDetection.js","description":"","kind":"reference","source":"engine/sim/ai/AIHitDetection.js","updated":"","headings":["sim/ai/AIHitDetection.js","Classes","class SpatialHash","Functions","sweptSphereSphere(sphereStart, sphereEnd, sphereRadius, targetCenter, targetRadius)","sweptSphereSphereMoving(sphereA, sphereB)","capsuleSphereIntersect(capsuleStart, capsuleEnd, capsuleRadius, targetCenter, targetRadius)","calculateDamageFalloff(baseDamage, distance, radius, falloffType = FALLOFFTYPE.LINEAR, options = {})","getAoETargets(center, radius, targets, options = {})","getConeTargets(origin, direction, halfAngle, range, targets, options = {})","checkProjectileHit(projectile, targets, options = {})","checkBeamHit(origin, direction, maxRange, targets, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"all targets within an Area of Effect Parameters: (number[]) — AoE center position (number) — AoE radius (Array) — Array of {id, position, radius} (Object) — Detection options Returns: Array of {target, distance, damage} Cone shaped AoE (dragon breath, flamethrower) Parameters: (number[]) — Cone apex (number[]) — Cone direction (normalized) (number) — Half angle in radians (number) — Cone length (Array) — Array of {id, position, radius} (Object) — Detection options Returns: Array of {target, distance, damage, angle} Check projectile hit with swept collision and spatial optimization Parameters: (Object) — {prevPosition, position, radius, velocity, ownerId} (Array) — Array of {id, position, radius} (Object) — Detection options Returns: {target, t, point, normal, damage} or null Check beam/ray hit against multiple targets Parameters: (number[]) — Ray origin (number[]) — Ray direction (normalized) (number) — Maximum ray length (Array) — Array of {id, position, radius} or {id, min, max} for AABB (Object) — Detection options Returns: {target, t, point, normal} Constants — Damage falloff types — Hitbox types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to","contentHash":"9e44a0737ff7aa97a0754ad7a7a5c725944371b24fe0f14c664804316201f48c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIHitDetection.md::0002","path":"engine/reference/sim/ai/AIHitDetection.md","title":"sim/ai/AIHitDetection.js","description":"","kind":"reference","source":"engine/sim/ai/AIHitDetection.js","updated":"","headings":["sim/ai/AIHitDetection.js","Classes","class SpatialHash","Functions","sweptSphereSphere(sphereStart, sphereEnd, sphereRadius, targetCenter, targetRadius)","sweptSphereSphereMoving(sphereA, sphereB)","capsuleSphereIntersect(capsuleStart, capsuleEnd, capsuleRadius, targetCenter, targetRadius)","calculateDamageFalloff(baseDamage, distance, radius, falloffType = FALLOFFTYPE.LINEAR, options = {})","getAoETargets(center, radius, targets, options = {})","getConeTargets(origin, direction, halfAngle, range, targets, options = {})","checkProjectileHit(projectile, targets, options = {})","checkBeamHit(origin, direction, maxRange, targets, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"bbd1233a8772820caad07e7973d8840ea4d8650b3e9aebc2e10550a067dc888c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIInfluenceMap.md::0000","path":"engine/reference/sim/ai/AIInfluenceMap.md","title":"sim/ai/AIInfluenceMap.js","description":"","kind":"reference","source":"engine/sim/ai/AIInfluenceMap.js","updated":"","headings":["sim/ai/AIInfluenceMap.js","Functions","createInfluenceLayer(width, height, cellSize, origin = [0, 0])","createInfluenceMap(width, height, cellSize, origin = [0, 0])","worldToInfluenceCell(map, worldX, worldZ)","influenceCellToWorld(map, cellX, cellY)","getInfluenceAt(layer, worldX, worldZ)","setInfluenceAt(layer, worldX, worldZ, value)","addInfluenceAt(layer, worldX, worldZ, value)","stampInfluence(layer, worldX, worldZ, radius, value, falloff = \"linear\")","propagateInfluence(layer, decayFactor = 0.9)","decayInfluence(layer, decayRate = 0.1)","clearInfluence(layer)","findLowestInfluence(layer, worldX, worldZ, searchRadius)","findHighestInfluence(layer, worldX, worldZ, searchRadius)","sampleCombinedInfluence(map, worldX, worldZ, weights)","findChokePoints(walkabilityGrid, influenceMap)","updateThreatInfluence(map, enemies)","updateAllyInfluence(map, allies)","reservePath(map, path, reserveValue = 1.0)","clearPathReservations(map)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create an influence map layer Parameters: (number) — Grid width (number) — Grid height (number) — World units per cell (number[]) — World origin [x, z] Returns: Influence layer Create a multi layer influence map Parameters: (number) — Grid width (number) — Grid height (number) — World units per cell (number[]) — World origin Returns: Influence map World position to grid cell Parameters: (Object) — Influence map/layer (number) — World X (number) — World Z Returns: } Grid coords Grid cell to world position (center of cell) Parameters: (Object) — Influence map/layer (number) — Cell X (number) — Cell Y Returns: } World position Get influence value at world position Parameters: (Object) — Influence layer (number) — World X (number) — World Z Returns: Influence value Set influence value at world position Parameters: (Object) — Influence layer (number) — World X (number) — World Z (number) — Influence value Add influence at world position Parameters: (Object) — Influence layer (number) — World X (number) — World Z (number) — Value to add Stamp circular influence at position Parameters: (Object) — Influence layer (number) — Center X (number) — Center Z (number) — World radius (number) — Peak value at center (string) — \"linear\", \"quadratic\", \"constant\" Propagate influence to neighboring cells (blur/spread) Parameters: (Object) — Influence layer (number) — Decay per propagation step (0 1) Decay all influence values Parameters: (Object) — Influence layer (number) — Amount to decay per call Clear all influence Parameters: (Object) — Influence layer Find position with lowest","contentHash":"11f64d5a8ab193b7dce5110b457e07836519327716e697f81adf252cf6cb0241"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIInfluenceMap.md::0001","path":"engine/reference/sim/ai/AIInfluenceMap.md","title":"sim/ai/AIInfluenceMap.js","description":"","kind":"reference","source":"engine/sim/ai/AIInfluenceMap.js","updated":"","headings":["sim/ai/AIInfluenceMap.js","Functions","createInfluenceLayer(width, height, cellSize, origin = [0, 0])","createInfluenceMap(width, height, cellSize, origin = [0, 0])","worldToInfluenceCell(map, worldX, worldZ)","influenceCellToWorld(map, cellX, cellY)","getInfluenceAt(layer, worldX, worldZ)","setInfluenceAt(layer, worldX, worldZ, value)","addInfluenceAt(layer, worldX, worldZ, value)","stampInfluence(layer, worldX, worldZ, radius, value, falloff = \"linear\")","propagateInfluence(layer, decayFactor = 0.9)","decayInfluence(layer, decayRate = 0.1)","clearInfluence(layer)","findLowestInfluence(layer, worldX, worldZ, searchRadius)","findHighestInfluence(layer, worldX, worldZ, searchRadius)","sampleCombinedInfluence(map, worldX, worldZ, weights)","findChokePoints(walkabilityGrid, influenceMap)","updateThreatInfluence(map, enemies)","updateAllyInfluence(map, allies)","reservePath(map, path, reserveValue = 1.0)","clearPathReservations(map)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"Parameters: (Object) — Influence layer (number) — Amount to decay per call Clear all influence Parameters: (Object) — Influence layer Find position with lowest influence in radius Parameters: (Object) — Influence layer (number) — Center X (number) — Center Z (number) — Search radius in world units Returns: null} Best position Find position with highest influence in radius Parameters: (Object) — Influence layer (number) — Center X (number) — Center Z (number) — Search radius Returns: null} Best position Sample combined influence from multiple layers Parameters: (Object) — Influence map (number) — World X (number) — World Z (Object) — Layer weights {threat: 1, ally: 1, cover: 0.5} Returns: Combined influence Analyze terrain for choke points Parameters: (Object) — Grid with walkable cells marked (Object) — Influence map to store results Returns: } Choke points Update threat layer from enemy positions Parameters: (Object) — Influence map Update ally layer from friendly positions Parameters: (Object) — Influence map Reserve a path on the influence map Parameters: (Object) — Influence map (number) — Reservation strength Clear path reservation Parameters: (Object) — Influence map <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable","contentHash":"9c144760cc7400a532623f2bf99363617fcb394280ae9fa6997d9f0998378e58"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIInfluenceMap.md::0002","path":"engine/reference/sim/ai/AIInfluenceMap.md","title":"sim/ai/AIInfluenceMap.js","description":"","kind":"reference","source":"engine/sim/ai/AIInfluenceMap.js","updated":"","headings":["sim/ai/AIInfluenceMap.js","Functions","createInfluenceLayer(width, height, cellSize, origin = [0, 0])","createInfluenceMap(width, height, cellSize, origin = [0, 0])","worldToInfluenceCell(map, worldX, worldZ)","influenceCellToWorld(map, cellX, cellY)","getInfluenceAt(layer, worldX, worldZ)","setInfluenceAt(layer, worldX, worldZ, value)","addInfluenceAt(layer, worldX, worldZ, value)","stampInfluence(layer, worldX, worldZ, radius, value, falloff = \"linear\")","propagateInfluence(layer, decayFactor = 0.9)","decayInfluence(layer, decayRate = 0.1)","clearInfluence(layer)","findLowestInfluence(layer, worldX, worldZ, searchRadius)","findHighestInfluence(layer, worldX, worldZ, searchRadius)","sampleCombinedInfluence(map, worldX, worldZ, weights)","findChokePoints(walkabilityGrid, influenceMap)","updateThreatInfluence(map, enemies)","updateAllyInfluence(map, allies)","reservePath(map, path, reserveValue = 1.0)","clearPathReservations(map)","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"14cc2538c8b001714e76948d334920585743d113901e64773a35810439444284"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIKnowledge.md::0000","path":"engine/reference/sim/ai/AIKnowledge.md","title":"sim/ai/AIKnowledge.js","description":"","kind":"reference","source":"engine/sim/ai/AIKnowledge.js","updated":"","headings":["sim/ai/AIKnowledge.js","Functions","createKnowledge(config)","distortKnowledge(knowledge, distortion = 0.1)","createKnowledgeBase()","addKnowledge(kb, knowledge)","queryKnowledge(kb, query)","hasKnowledgeOf(kb, subject)","shareKnowledge(giver, receiver, knowledge, giverNpcId)","spreadKnowledge(network, knowledge, originNpcId, maxHops = 3)","createWorldKnowledgeManager()","registerNPCKnowledge(manager, npcId, config = {})","connectNPCs(manager, npc1, npc2)","announcePublicKnowledge(manager, knowledge)","updateKnowledgePropagation(manager, gameTime)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create knowledge item Parameters: (Object) — Knowledge config Returns: Knowledge item Create a distorted copy (for rumor spreading) Parameters: (Object) — Original knowledge (number) — Distortion amount Returns: Distorted copy Create NPC knowledge base Returns: Knowledge base Add knowledge to NPC's knowledge base Parameters: (Object) — Knowledge base (Object) — Knowledge to add Returns: Whether knowledge was new/updated Query knowledge base Parameters: (Object) — Knowledge base (Object) — {subject?, type?, tag?, minReliability?} Returns: Matching knowledge Check if NPC knows about something Parameters: (Object) — Knowledge base (string) — Subject to check Returns: Has knowledge Share knowledge between NPCs Parameters: (Object) — Giver's knowledge base (Object) — Receiver's knowledge base (Object) — Knowledge to share (Object) — Giver's NPC ID Returns: } Spread knowledge through social network Parameters: (Object) — Social network manager (Object) — Knowledge to spread (string) — Origin NPC ID (number) — Maximum spread distance Create world knowledge manager Returns: Knowledge manager Register NPC with knowledge system Parameters: (Object) — Knowledge manager (string) — NPC ID (Object) — {interests, trustedSources} Connect two NPCs in social network Parameters: (Object) — Knowledge manager (string) — First NPC ID (string) — Second NPC ID Announce public knowledge Parameters: (Object) — Knowledge manager (Object) — Knowledge to announce Update knowledge propagation Parameters: (Object) — Knowledge manager (number) — Current game time Constants — Information types —","contentHash":"3e920810ea2676285ab57a2f251397de971a2c7e0b828e341f0b2be1f5cc5b1b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIKnowledge.md::0001","path":"engine/reference/sim/ai/AIKnowledge.md","title":"sim/ai/AIKnowledge.js","description":"","kind":"reference","source":"engine/sim/ai/AIKnowledge.js","updated":"","headings":["sim/ai/AIKnowledge.js","Functions","createKnowledge(config)","distortKnowledge(knowledge, distortion = 0.1)","createKnowledgeBase()","addKnowledge(kb, knowledge)","queryKnowledge(kb, query)","hasKnowledgeOf(kb, subject)","shareKnowledge(giver, receiver, knowledge, giverNpcId)","spreadKnowledge(network, knowledge, originNpcId, maxHops = 3)","createWorldKnowledgeManager()","registerNPCKnowledge(manager, npcId, config = {})","connectNPCs(manager, npc1, npc2)","announcePublicKnowledge(manager, knowledge)","updateKnowledgePropagation(manager, gameTime)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— Knowledge to announce Update knowledge propagation Parameters: (Object) — Knowledge manager (number) — Current game time Constants — Information types — Information reliability <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"bd497ab8fadec8f65a6acfe3d97e702542967f95c1684fec5e66e9bedbbded4a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AILoot.md::0000","path":"engine/reference/sim/ai/AILoot.md","title":"sim/ai/AILoot.js","description":"","kind":"reference","source":"engine/sim/ai/AILoot.js","updated":"","headings":["sim/ai/AILoot.js","Functions","createItemDef(config)","createItemInstance(itemDef, options = {})","createAffix(config)","applyAffix(item, affix)","generateItemName(item)","createLootEntry(config)","createLootTable(config)","rollLootTable(table, itemDefs, context = {})","rollRarity(luckBonus = 0)","createLootManager()","registerItemDef(manager, itemDef)","registerAffix(manager, affix)","registerLootTable(manager, table)","dropLoot(manager, tableId, position, context = {})","cleanupDrops(manager)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create item definition Parameters: (Object) — Item config Returns: Item definition Create item instance from definition Parameters: (Object) — Item definition (Object) — Instance options Returns: Item instance Create affix definition Parameters: (Object) — Affix config Returns: Affix Apply affix to item Parameters: (Object) — Item instance (Object) — Affix definition Returns: Success Generate item name from affixes Parameters: (Object) — Item instance Returns: Generated name Create loot table entry Parameters: (Object) — Entry config Returns: Loot entry Create loot table Parameters: (Object) — Table config Returns: Loot table Roll loot from table Parameters: (Object) — Loot table (Object) — Map of item definitions (Object) — Context {level, luck, conditions} Returns: Dropped items Roll rarity based on luck Parameters: (number) — Luck bonus Returns: Rarity Create loot manager Returns: Loot manager Register item definition Parameters: (Object) — Loot manager (Object) — Item definition Register affix Parameters: (Object) — Loot manager (Object) — Affix definition Register loot table Parameters: (Object) — Loot manager (Object) — Loot table Drop loot at position Parameters: (Object) — Loot manager (string) — Loot table ID (number[]) — World position (Object) — Drop context Returns: Dropped items Clean up expired drops Parameters: (Object) — Loot manager Constants — Rarity tiers — Rarity color codes — Item categories <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have","contentHash":"6ed711e9af9fb8a941573ca5c28403150bebe8fb5ff9e5d0285e34029a4277d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AILoot.md::0001","path":"engine/reference/sim/ai/AILoot.md","title":"sim/ai/AILoot.js","description":"","kind":"reference","source":"engine/sim/ai/AILoot.js","updated":"","headings":["sim/ai/AILoot.js","Functions","createItemDef(config)","createItemInstance(itemDef, options = {})","createAffix(config)","applyAffix(item, affix)","generateItemName(item)","createLootEntry(config)","createLootTable(config)","rollLootTable(table, itemDefs, context = {})","rollRarity(luckBonus = 0)","createLootManager()","registerItemDef(manager, itemDef)","registerAffix(manager, affix)","registerLootTable(manager, table)","dropLoot(manager, tableId, position, context = {})","cleanupDrops(manager)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"<! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2f0ade704ba14d61ef2e9fabe2e087acb76eb112d93e9b0da805fe2c85a83cef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIMelee.md::0000","path":"engine/reference/sim/ai/AIMelee.md","title":"sim/ai/AIMelee.js","description":"","kind":"reference","source":"engine/sim/ai/AIMelee.js","updated":"","headings":["sim/ai/AIMelee.js","Functions","createMeleeArc(origin, direction, range, arcAngleDeg)","isInMeleeArc(arc, targetPos, targetRadius = 0)","isInMeleeArc3D(arc, targetPos, targetRadius = 0, verticalToleranceRad = Math.PI / 4)","createMeleeAttackState(config)","startMeleeAttack(state, now)","updateMeleeAttack(state, now)","interruptMeleeAttack(state)","checkMeleeHits(state, attackerPos, attackerDir, targets)","chainComboAttack(state, now)","getComboMultiplier(comboStep)","sweepMeleeArc(origin, startDir, endDir, range, targets, sweepSamples = 5)","getPhaseTimeRemaining(state, now)","getPhaseProgress(state, now)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a melee attack arc (pie slice shaped hitbox) Parameters: (number[]) — [x, y, z] attack origin (number[]) — [x, y, z] facing direction (normalized) (number) — Attack range in meters (number) — Total arc angle in degrees (symmetric around direction) Returns: Melee attack arc Check if a point is within the melee arc (2D horizontal check) Uses cosine comparison for efficiency (avoids atan2) Parameters: (Object) — Melee arc from createMeleeArc (number[]) — [x, y, z] target position (number) — Target hitbox radius (default 0) Returns: True if target is hit Check if target is in 3D melee arc (includes vertical angle) Parameters: (Object) — Melee arc (number[]) — [x, y, z] (number) — Target radius (number) — Vertical angle tolerance (default ±45°) Returns: True if hit Create a melee attack state tracker Parameters: (Object) — Attack configuration (number) — Windup duration in ms (number) — Active (damaging) duration in ms (number) — Recovery duration in ms (number) — Attack range (number) — Attack arc in degrees (number) — Base damage Returns: Attack state Start a melee attack Parameters: (Object) — Attack state (number) — Current timestamp (ms) Returns: True if attack started Update melee attack state and check phase transitions Parameters: (Object) — Attack state (number) — Current timestamp (ms) Returns: {phase, justEntered, justExited} Try to interrupt a melee attack (e.g., from stagger) Parameters: (Object) — Attack state Returns: True if interrupted Check for hits during active phase Parameters: (Object) — Attack state (number[]) — [x, y, z] attacker position","contentHash":"9aaa3e04c3c90e66d2942d2fa0ef998afdc95af1b3a2564b59c59a3915e3977a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIMelee.md::0001","path":"engine/reference/sim/ai/AIMelee.md","title":"sim/ai/AIMelee.js","description":"","kind":"reference","source":"engine/sim/ai/AIMelee.js","updated":"","headings":["sim/ai/AIMelee.js","Functions","createMeleeArc(origin, direction, range, arcAngleDeg)","isInMeleeArc(arc, targetPos, targetRadius = 0)","isInMeleeArc3D(arc, targetPos, targetRadius = 0, verticalToleranceRad = Math.PI / 4)","createMeleeAttackState(config)","startMeleeAttack(state, now)","updateMeleeAttack(state, now)","interruptMeleeAttack(state)","checkMeleeHits(state, attackerPos, attackerDir, targets)","chainComboAttack(state, now)","getComboMultiplier(comboStep)","sweepMeleeArc(origin, startDir, endDir, range, targets, sweepSamples = 5)","getPhaseTimeRemaining(state, now)","getPhaseProgress(state, now)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"— Attack state Returns: True if interrupted Check for hits during active phase Parameters: (Object) — Attack state (number[]) — [x, y, z] attacker position (number[]) — [x, y, z] facing direction Returns: } Hits this frame Chain to next combo attack Parameters: (Object) — Attack state (number) — Current timestamp (ms) Returns: True if combo continues Get combo multiplier for current step Parameters: (number) — Current combo step (0 indexed) Returns: Damage multiplier Perform a sweeping melee attack across multiple positions Useful for wide slash attacks Parameters: (number[]) — [x, y, z] (number[]) — [x, y, z] start of sweep (number[]) — [x, y, z] end of sweep (number) — Attack range (number) — Number of arc samples (default 5) Returns: } Targets hit by sweep Get remaining time in current phase Parameters: (Object) — Attack state (number) — Current timestamp (ms) Returns: Remaining time in ms, or 0 if idle Get phase progress (0 1) Parameters: (Object) — Attack state (number) — Current timestamp (ms) Returns: Progress 0 1 Constants — Attack phase types — Default phase durations in milliseconds <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter","contentHash":"24811755e00200cef57d04ac6213385da12ae3f527d2ba58c94f09a7d94b6606"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIMelee.md::0002","path":"engine/reference/sim/ai/AIMelee.md","title":"sim/ai/AIMelee.js","description":"","kind":"reference","source":"engine/sim/ai/AIMelee.js","updated":"","headings":["sim/ai/AIMelee.js","Functions","createMeleeArc(origin, direction, range, arcAngleDeg)","isInMeleeArc(arc, targetPos, targetRadius = 0)","isInMeleeArc3D(arc, targetPos, targetRadius = 0, verticalToleranceRad = Math.PI / 4)","createMeleeAttackState(config)","startMeleeAttack(state, now)","updateMeleeAttack(state, now)","interruptMeleeAttack(state)","checkMeleeHits(state, attackerPos, attackerDir, targets)","chainComboAttack(state, now)","getComboMultiplier(comboStep)","sweepMeleeArc(origin, startDir, endDir, range, targets, sweepSamples = 5)","getPhaseTimeRemaining(state, now)","getPhaseProgress(state, now)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9f70524a4bd1788282aa02f0398d26239624252ccfc7719ed23cbb91a1e0bb7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIMemory.md::0000","path":"engine/reference/sim/ai/AIMemory.md","title":"sim/ai/AIMemory.js","description":"","kind":"reference","source":"engine/sim/ai/AIMemory.js","updated":"","headings":["sim/ai/AIMemory.js","Functions","createWorkingMemory(capacity = 7)","workingMemoryPush(memory, item)","setFocus(memory, type, data)","getWorkingMemoryByType(memory, type)","clearWorkingMemory(memory)","createEpisodicMemory(maxEpisodes = 1000)","createEpisode(data)","storeEpisode(memory, episode)","recallEpisodesWithEntity(memory, entityId, limit = 10)","recallEpisodesWithEmotion(memory, emotion, limit = 10)","recallRecentEpisodes(memory, count = 5)","searchEpisodes(memory, criteria)","createSemanticMemory()","storeFact(memory, key, value, meta = {})","getFact(memory, key)","storeRelationship(memory, subject, predicate, object, confidence = 1.0)","queryRelationships(memory, query)","storeBelief(memory, topic, belief, confidence = 0.5)","challengeBelief(memory, topic, evidenceStrength = 0.1)","createProceduralMemory()","practiceSkill(memory, skill, success = true)","getSkillProficiency(memory, skill)","formHabit(memory, trigger, action, initialStrength = 0.3)","getHabitualResponse(memory, trigger)","createMemorySystem(config = {})","consolidateMemories(memSystem)","getEntityImpression(memSystem, entityId)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create working memory (limited capacity short term) Parameters: (number) — Max items (default 7, like humans) Returns: Working memory Add item to working memory (displaces oldest if full) Parameters: (Object) — Working memory (Object) — {type, data, priority} Set focus of attention Parameters: (Object) — Working memory (string) — Focus type ( ) — Focus data Get items from working memory by type Parameters: (Object) — Working memory (string) — Item type Returns: Matching items Clear working memory Parameters: (Object) — Working memory Create episodic memory (personal experiences) Parameters: (number) — Maximum stored episodes Returns: Episodic memory Create an episode (memory of an event) Parameters: (Object) — Episode data Returns: Episode Store an episode Parameters: (Object) — Episodic memory (Object) — Episode to store Recall episodes involving an entity Parameters: (Object) — Episodic memory (number) — Entity ID (number) — Max episodes to return Returns: Episodes Recall episodes by emotion Parameters: (Object) — Episodic memory (string) — Emotion type (number) — Max episodes Returns: Episodes Recall recent episodes Parameters: (Object) — Episodic memory (number) — Number to recall Returns: Recent episodes Search episodes by criteria Parameters: (Object) — Episodic memory (Object) — Search criteria Returns: Matching episodes Create semantic memory (facts and knowledge) Returns: Semantic memory Store a fact Parameters: (Object) — Semantic memory (string) — Fact key ( ) — Fact value (Object) — Metadata {confidence, source} Retrieve a fact Parameters: (Object) — Semantic","contentHash":"ba37e4df51aa5e706b2628f434ddd245e8689e259afbe12b270787ffdfdc6c1e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIMemory.md::0001","path":"engine/reference/sim/ai/AIMemory.md","title":"sim/ai/AIMemory.js","description":"","kind":"reference","source":"engine/sim/ai/AIMemory.js","updated":"","headings":["sim/ai/AIMemory.js","Functions","createWorkingMemory(capacity = 7)","workingMemoryPush(memory, item)","setFocus(memory, type, data)","getWorkingMemoryByType(memory, type)","clearWorkingMemory(memory)","createEpisodicMemory(maxEpisodes = 1000)","createEpisode(data)","storeEpisode(memory, episode)","recallEpisodesWithEntity(memory, entityId, limit = 10)","recallEpisodesWithEmotion(memory, emotion, limit = 10)","recallRecentEpisodes(memory, count = 5)","searchEpisodes(memory, criteria)","createSemanticMemory()","storeFact(memory, key, value, meta = {})","getFact(memory, key)","storeRelationship(memory, subject, predicate, object, confidence = 1.0)","queryRelationships(memory, query)","storeBelief(memory, topic, belief, confidence = 0.5)","challengeBelief(memory, topic, evidenceStrength = 0.1)","createProceduralMemory()","practiceSkill(memory, skill, success = true)","getSkillProficiency(memory, skill)","formHabit(memory, trigger, action, initialStrength = 0.3)","getHabitualResponse(memory, trigger)","createMemorySystem(config = {})","consolidateMemories(memSystem)","getEntityImpression(memSystem, entityId)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"(Object) — Semantic memory (string) — Fact key ( ) — Fact value (Object) — Metadata {confidence, source} Retrieve a fact Parameters: (Object) — Semantic memory (string) — Fact key Returns: null} Fact or null Store a relationship between entities Parameters: (Object) — Semantic memory (number) — Subject entity ID (string) — Relationship type (number) — Object entity ID (number) — Confidence 0 1 Query relationships Parameters: (Object) — Semantic memory (Object) — {subject?, predicate?, object?} Returns: Matching relationships Store a belief Parameters: (Object) — Semantic memory (string) — Belief topic (string) — The belief (number) — How strongly held Challenge a belief (potentially weakens it) Parameters: (Object) — Semantic memory (string) — Belief topic (number) — Strength of contradicting evidence Create procedural memory (skills and habits) Returns: Procedural memory Record skill practice Parameters: (Object) — Procedural memory (string) — Skill name (boolean) — Was the attempt successful Get skill proficiency Parameters: (Object) — Procedural memory (string) — Skill name Returns: Proficiency 0 1 Form a habit Parameters: (Object) — Procedural memory (string) — What triggers the habit (string) — The habitual action (number) — Starting strength Get habitual response to trigger Parameters: (Object) — Procedural memory (string) — Trigger situation Returns: Habitual action or null Create complete NPC memory system Parameters: (Object) — Configuration Returns: Complete memory system Consolidate memories (transfer from working to long term) Parameters: (Object) — Memory system Get overall impression of an entity Parameters: (Object) — Memory system (number) — Entity ID Returns: Impression {sentiment, familiarity, memories} Constants — Memory types — Event importance","contentHash":"e1d8cedd7e9a4d9a3fb01cd85fc0f122464371be66132abcf0abeeaae7a6655a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIMemory.md::0002","path":"engine/reference/sim/ai/AIMemory.md","title":"sim/ai/AIMemory.js","description":"","kind":"reference","source":"engine/sim/ai/AIMemory.js","updated":"","headings":["sim/ai/AIMemory.js","Functions","createWorkingMemory(capacity = 7)","workingMemoryPush(memory, item)","setFocus(memory, type, data)","getWorkingMemoryByType(memory, type)","clearWorkingMemory(memory)","createEpisodicMemory(maxEpisodes = 1000)","createEpisode(data)","storeEpisode(memory, episode)","recallEpisodesWithEntity(memory, entityId, limit = 10)","recallEpisodesWithEmotion(memory, emotion, limit = 10)","recallRecentEpisodes(memory, count = 5)","searchEpisodes(memory, criteria)","createSemanticMemory()","storeFact(memory, key, value, meta = {})","getFact(memory, key)","storeRelationship(memory, subject, predicate, object, confidence = 1.0)","queryRelationships(memory, query)","storeBelief(memory, topic, belief, confidence = 0.5)","challengeBelief(memory, topic, evidenceStrength = 0.1)","createProceduralMemory()","practiceSkill(memory, skill, success = true)","getSkillProficiency(memory, skill)","formHabit(memory, trigger, action, initialStrength = 0.3)","getHabitualResponse(memory, trigger)","createMemorySystem(config = {})","consolidateMemories(memSystem)","getEntityImpression(memSystem, entityId)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"Parameters: (Object) — Memory system (number) — Entity ID Returns: Impression {sentiment, familiarity, memories} Constants — Memory types — Event importance levels <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter.","contentHash":"6dd309a90b8e32e4bc8188320054ff8fad2b280545b102add2350c447695fcac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIMorale.md::0000","path":"engine/reference/sim/ai/AIMorale.md","title":"sim/ai/AIMorale.js","description":"","kind":"reference","source":"engine/sim/ai/AIMorale.js","updated":"","headings":["sim/ai/AIMorale.js","Functions","createMoraleState(params = {})","changeMorale(state, delta)","applySuppression(state, amount)","processDamageMorale(state, damage, fromBehind = false)","processAllyDeath(state, wasLeader = false)","processEnemyDeath(state, wasLeader = false)","rally(state)","updateMorale(state, deltaTimeSec, inCombat, inCover)","updateMoraleContext(state, alliesNearby, enemiesVisible, leaderNearby)","getMoraleAccuracyMod(state)","getMoraleSpeedMod(state)","getMoraleReactionMod(state)","shouldFlee(state)","shouldSurrender(state, canEscape = true)","shouldSeekCover(state, currentlyInCover)","shouldBeAggressive(state)","moraleCheck(state, difficulty)","getGroupMorale(moraleStates)","isGroupRouting(moraleStates)","groupRally(moraleStates)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create morale state for an NPC Parameters: (Object) — Morale parameters Returns: Morale state Apply morale change Parameters: (Object) — Morale state (number) — Change amount (positive = boost, negative = damage) Apply suppression Parameters: (Object) — Morale state (number) — Suppression amount Process taking damage Parameters: (Object) — Morale state (number) — Damage amount (boolean) — Was flanked/surprised Process ally death Parameters: (Object) — Morale state (boolean) — Was the ally a leader Process enemy death Parameters: (Object) — Morale state (boolean) — Was the enemy a leader Rally (leader ability) Parameters: (Object) — Morale state Update morale over time (recovery, suppression decay) Parameters: (Object) — Morale state (number) — Delta time in seconds (boolean) — Currently in combat (boolean) — Currently in cover Update context (allies, enemies, leader) Parameters: (Object) — Morale state (number) — Number of allies nearby (number) — Number of enemies visible (boolean) — Is a leader nearby Get accuracy modifier based on morale Parameters: (Object) — Morale state Returns: Accuracy multiplier (0 1.2) Get movement speed modifier based on morale Parameters: (Object) — Morale state Returns: Speed multiplier Get reaction time modifier based on morale Parameters: (Object) — Morale state Returns: Reaction time multiplier (higher = slower) Check if NPC should flee Parameters: (Object) — Morale state Returns: Should flee Check if NPC should surrender Parameters: (Object) — Morale state (boolean) — Is escape possible Returns: Should surrender Check if NPC should take","contentHash":"987d847909630fd9c55376c8b3f88913967f7021bce327039bf90585edbe5735"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIMorale.md::0001","path":"engine/reference/sim/ai/AIMorale.md","title":"sim/ai/AIMorale.js","description":"","kind":"reference","source":"engine/sim/ai/AIMorale.js","updated":"","headings":["sim/ai/AIMorale.js","Functions","createMoraleState(params = {})","changeMorale(state, delta)","applySuppression(state, amount)","processDamageMorale(state, damage, fromBehind = false)","processAllyDeath(state, wasLeader = false)","processEnemyDeath(state, wasLeader = false)","rally(state)","updateMorale(state, deltaTimeSec, inCombat, inCover)","updateMoraleContext(state, alliesNearby, enemiesVisible, leaderNearby)","getMoraleAccuracyMod(state)","getMoraleSpeedMod(state)","getMoraleReactionMod(state)","shouldFlee(state)","shouldSurrender(state, canEscape = true)","shouldSeekCover(state, currentlyInCover)","shouldBeAggressive(state)","moraleCheck(state, difficulty)","getGroupMorale(moraleStates)","isGroupRouting(moraleStates)","groupRally(moraleStates)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Should flee Check if NPC should surrender Parameters: (Object) — Morale state (boolean) — Is escape possible Returns: Should surrender Check if NPC should take cover Parameters: (Object) — Morale state (boolean) — Already in cover Returns: Should seek cover Check if NPC should be aggressive (charge, flank) Parameters: (Object) — Morale state Returns: Should be aggressive Roll morale check for risky action Parameters: (Object) — Morale state (number) — Difficulty 0 100 (higher = harder) Returns: Passed check Calculate group morale average Parameters: (Array<Object ) — Array of morale states Returns: Average morale Check if group is routing (majority broken) Parameters: (Array<Object ) — Array of morale states Returns: Group is routing Apply group rally (leader ability affecting all nearby) Parameters: (Array<Object ) — Array of morale states Constants — Morale states — Default morale parameters <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"03c071397fe1d58b5fb33742a49eff546ccf49e480541d469e8b6f3164853201"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIPerception.md::0000","path":"engine/reference/sim/ai/AIPerception.md","title":"sim/ai/AIPerception.js","description":"","kind":"reference","source":"engine/sim/ai/AIPerception.js","updated":"","headings":["sim/ai/AIPerception.js","Functions","createPerceptionState(params = {})","checkVision(perception, npcPos, npcFacing, targetPos, obstacles)","calculateDetectionRate(visionResult, perception, options = {})","createNoiseEvent(position, loudness, type, sourceId = null)","checkHearing(perception, npcPos, noise)","processVisualDetection(perception, npcPos, npcFacing, target, obstacles, deltaTimeSec, options = {})","processNoiseEvent(perception, npcPos, noise)","processDamage(perception, damageDirection = null, attackerId = null)","shareTeamInfo(perception, targetId, targetPos)","getLastKnownPosition(perception, entityId)","getMostThreateningEntity(perception)","decayAwareness(perception, deltaTimeSec, canSeeThreats)","checkInvestigationComplete(perception, npcPos, arrivalRadius = 2)","updatePerception(perception, npcPos, npcFacing, targets, noiseEvents, obstacles, deltaTimeSec)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create perception state for an NPC Parameters: (Object) — Perception parameters Returns: Perception state Check if target is in vision cone Parameters: (Object) — Perception state (number[]) — NPC position (number[]) — NPC facing direction (number[]) — Target position (Array) — Obstacles for LOS check Returns: } Calculate detection rate based on visibility conditions Parameters: (Object) — Result from checkVision (Object) — Perception state (Object) — Additional factors Returns: Detection rate multiplier Create a noise event Parameters: (number[]) — Noise position (number) — Noise loudness (0 1) (string) — Noise type (footstep, gunshot, explosion, voice) (number) — Source entity ID Returns: Noise event Check if NPC can hear a noise event Parameters: (Object) — Perception state (number[]) — NPC position (Object) — Noise event Returns: } Process visual detection of a target Parameters: (Object) — Perception state (number[]) — NPC position (number[]) — NPC facing (Object) — Target {id, position} (Array) — Obstacles (number) — Delta time in seconds (Object) — Detection options Returns: } Process a noise event Parameters: (Object) — Perception state (number[]) — NPC position (Object) — Noise event Returns: } Process taking damage Parameters: (Object) — Perception state (number[]) — Direction damage came from (optional) (number) — Attacker ID (optional) Share threat info from teammate Parameters: (Object) — Perception state (number) — Threat ID (number[]) — Threat position Get last known position of an entity Parameters: (Object) — Perception state (number) — Entity ID","contentHash":"0c5958eb712f8e0f33c5e3bcdfe7f4e8c4d50154150a8e5db76a35b7363c086c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIPerception.md::0001","path":"engine/reference/sim/ai/AIPerception.md","title":"sim/ai/AIPerception.js","description":"","kind":"reference","source":"engine/sim/ai/AIPerception.js","updated":"","headings":["sim/ai/AIPerception.js","Functions","createPerceptionState(params = {})","checkVision(perception, npcPos, npcFacing, targetPos, obstacles)","calculateDetectionRate(visionResult, perception, options = {})","createNoiseEvent(position, loudness, type, sourceId = null)","checkHearing(perception, npcPos, noise)","processVisualDetection(perception, npcPos, npcFacing, target, obstacles, deltaTimeSec, options = {})","processNoiseEvent(perception, npcPos, noise)","processDamage(perception, damageDirection = null, attackerId = null)","shareTeamInfo(perception, targetId, targetPos)","getLastKnownPosition(perception, entityId)","getMostThreateningEntity(perception)","decayAwareness(perception, deltaTimeSec, canSeeThreats)","checkInvestigationComplete(perception, npcPos, arrivalRadius = 2)","updatePerception(perception, npcPos, npcFacing, targets, noiseEvents, obstacles, deltaTimeSec)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"state (number) — Threat ID (number[]) — Threat position Get last known position of an entity Parameters: (Object) — Perception state (number) — Entity ID Returns: Last known position or null Get the most threatening known entity Parameters: (Object) — Perception state Returns: {id, position, awarenessOf, lastSeen} Decay awareness over time Parameters: (Object) — Perception state (number) — Delta time in seconds (boolean) — Whether any threats are visible Check if investigation is complete Parameters: (Object) — Perception state (number[]) — NPC position (number) — Radius to consider \"arrived\" Returns: True if investigation complete Full perception update tick Parameters: (Object) — Perception state (number[]) — NPC position (number[]) — NPC facing (Array<Object ) — Potential targets (Array<Object ) — Recent noise events (Array) — Obstacles (number) — Delta time in seconds Returns: } Constants — Awareness states — Sense types — Default perception parameters from AISchema <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying","contentHash":"d9e5f31f0bd0cf9048defc87817c04e72da8d0f1847a3905c6067b09871c4e54"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIPerception.md::0002","path":"engine/reference/sim/ai/AIPerception.md","title":"sim/ai/AIPerception.js","description":"","kind":"reference","source":"engine/sim/ai/AIPerception.js","updated":"","headings":["sim/ai/AIPerception.js","Functions","createPerceptionState(params = {})","checkVision(perception, npcPos, npcFacing, targetPos, obstacles)","calculateDetectionRate(visionResult, perception, options = {})","createNoiseEvent(position, loudness, type, sourceId = null)","checkHearing(perception, npcPos, noise)","processVisualDetection(perception, npcPos, npcFacing, target, obstacles, deltaTimeSec, options = {})","processNoiseEvent(perception, npcPos, noise)","processDamage(perception, damageDirection = null, attackerId = null)","shareTeamInfo(perception, targetId, targetPos)","getLastKnownPosition(perception, entityId)","getMostThreateningEntity(perception)","decayAwareness(perception, deltaTimeSec, canSeeThreats)","checkInvestigationComplete(perception, npcPos, arrivalRadius = 2)","updatePerception(perception, npcPos, npcFacing, targets, noiseEvents, obstacles, deltaTimeSec)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":": Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"599f7894cb15f6421f2ed6ae7241f1c3d31e94fa2e59275117eb65aecf6f4581"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIPersonality.md::0000","path":"engine/reference/sim/ai/AIPersonality.md","title":"sim/ai/AIPersonality.js","description":"","kind":"reference","source":"engine/sim/ai/AIPersonality.js","updated":"","headings":["sim/ai/AIPersonality.js","Functions","createPersonality(traits = {})","createPersonalityFromArchetype(archetype)","getPersonalityBehaviorMod(personality, behavior)","createEmotionalState()","applyEmotionalStimulus(state, emotion, intensity, personality = null)","decayEmotions(state, deltaTimeSec, decayRate = 0.1)","hasComplexEmotion(state, complexEmotion, threshold = 0.3)","createRelationshipTracker()","getRelationship(tracker, entityId)","recordInteraction(tracker, entityId, interactionType, valence, intensity = 0.5)","getDisposition(tracker, entityId)","willHelp(tracker, entityId, personality = null)","createCharacterState(config = {})","updateCharacterState(state, deltaTimeSec)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create personality profile Parameters: (Object) — Initial trait values ( 1 to 1) Returns: Personality profile Create personality from archetype Parameters: (string) — Archetype name Returns: Personality profile Get personality based behavior modifier Parameters: (Object) — Personality profile (string) — Behavior type Returns: Modifier ( 1 to 1) Create emotional state Returns: Emotional state Apply emotional stimulus Parameters: (Object) — Emotional state (string) — Emotion type (number) — Stimulus intensity (0 1) (Object) — Personality (affects response) Decay emotions over time Parameters: (Object) — Emotional state (number) — Delta time in seconds (number) — Base decay rate Check for complex emotion Parameters: (Object) — Emotional state (string) — Complex emotion name (number) — Detection threshold Returns: Is emotion present Create relationship tracker Returns: Relationship tracker Create or get relationship with entity Parameters: (Object) — Relationship tracker (number) — Other entity ID Returns: Relationship data Record interaction with entity Parameters: (Object) — Relationship tracker (number) — Other entity ID (string) — Type of interaction (number) — Positive/negative ( 1 to 1) (number) — Interaction intensity (0 1) Get disposition toward entity Parameters: (Object) — Relationship tracker (number) — Other entity ID Returns: Disposition ( 1 to 1) Will entity help another Parameters: (Object) — Relationship tracker (number) — Other entity ID (Object) — Helper's personality Returns: Will help Create complete character psychological state Parameters: (Object) —","contentHash":"cdb5fdbfb2da281d79524cabfea176f3fd3b30ea0333715b6fd5868ae39dc155"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIPersonality.md::0001","path":"engine/reference/sim/ai/AIPersonality.md","title":"sim/ai/AIPersonality.js","description":"","kind":"reference","source":"engine/sim/ai/AIPersonality.js","updated":"","headings":["sim/ai/AIPersonality.js","Functions","createPersonality(traits = {})","createPersonalityFromArchetype(archetype)","getPersonalityBehaviorMod(personality, behavior)","createEmotionalState()","applyEmotionalStimulus(state, emotion, intensity, personality = null)","decayEmotions(state, deltaTimeSec, decayRate = 0.1)","hasComplexEmotion(state, complexEmotion, threshold = 0.3)","createRelationshipTracker()","getRelationship(tracker, entityId)","recordInteraction(tracker, entityId, interactionType, valence, intensity = 0.5)","getDisposition(tracker, entityId)","willHelp(tracker, entityId, personality = null)","createCharacterState(config = {})","updateCharacterState(state, deltaTimeSec)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"tracker (number) — Other entity ID (Object) — Helper's personality Returns: Will help Create complete character psychological state Parameters: (Object) — Configuration Returns: Character state Update character state Parameters: (Object) — Character state (number) — Delta time Constants — Personality trait ranges: 1 to 1 — Primary emotions — Emotion combinations — Relationship types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"134ebd449685800fd51f793f1e574a3ebf6189892455d6d1a802520178d066e2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIQuest.md::0000","path":"engine/reference/sim/ai/AIQuest.md","title":"sim/ai/AIQuest.js","description":"","kind":"reference","source":"engine/sim/ai/AIQuest.js","updated":"","headings":["sim/ai/AIQuest.js","Functions","createObjective(config)","updateObjectiveProgress(objective, amount = 1)","createQuest(config)","canAcceptQuest(quest, playerState)","acceptQuest(quest)","checkQuestComplete(quest)","turnInQuest(quest)","failQuest(quest, reason = \"unknown\")","createQuestManager()","registerQuest(manager, quest)","updateAvailableQuests(manager, playerState)","reportQuestEvent(manager, eventType, eventData)","generateQuest(templateId, params, context = {})","generateDailyQuests(context, count = 3)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create quest objective Parameters: (Object) — Objective config Returns: Objective Update objective progress Parameters: (Object) — Objective (number) — Progress to add Returns: Whether objective completed Create quest Parameters: (Object) — Quest config Returns: Quest Check if quest can be accepted Parameters: (Object) — Quest (Object) — Player state {level, completedQuests, reputation, inventory, flags} Returns: } Accept quest Parameters: (Object) — Quest Returns: Success Check quest completion Parameters: (Object) — Quest Returns: Is complete Turn in quest and get rewards Parameters: (Object) — Quest Returns: Rewards or null if can't turn in Fail quest Parameters: (Object) — Quest (string) — Failure reason Create quest manager Returns: Quest manager Register quest Parameters: (Object) — Quest manager (Object) — Quest to register Update available quests based on player state Parameters: (Object) — Quest manager (Object) — Player state Report event for quest objectives Parameters: (Object) — Quest manager (string) — kill, collect, talk, etc. (Object) — {targetType, targetId, location, amount} Returns: Updated quests Generate procedural quest Parameters: (string) — Template to use (Object) — Generation parameters (Object) — World context for content selection Returns: Generated quest Generate daily quests Parameters: (Object) — World context (number) — Number of quests Returns: Generated quests Constants — Quest types — Quest status — Quest priority <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision","contentHash":"dae856c0aceb655b7e7092a783899e5095f1a01470710ccb289e1ee36480c6bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIQuest.md::0001","path":"engine/reference/sim/ai/AIQuest.md","title":"sim/ai/AIQuest.js","description":"","kind":"reference","source":"engine/sim/ai/AIQuest.js","updated":"","headings":["sim/ai/AIQuest.js","Functions","createObjective(config)","updateObjectiveProgress(objective, amount = 1)","createQuest(config)","canAcceptQuest(quest, playerState)","acceptQuest(quest)","checkQuestComplete(quest)","turnInQuest(quest)","failQuest(quest, reason = \"unknown\")","createQuestManager()","registerQuest(manager, quest)","updateAvailableQuests(manager, playerState)","reportQuestEvent(manager, eventType, eventData)","generateQuest(templateId, params, context = {})","generateDailyQuests(context, count = 3)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"types — Quest status — Quest priority <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"afe534cd2edff9db1f85b2503972efb4b25b65feb6892ac364a6dec61e9f24a8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIRandom.md::0000","path":"engine/reference/sim/ai/AIRandom.md","title":"sim/ai/AIRandom.js","description":"","kind":"reference","source":"engine/sim/ai/AIRandom.js","updated":"","headings":["sim/ai/AIRandom.js","Functions","setAIRngContext(worldSeed, tick)","getEntityRngState(entityId)","getPositionRngState(x, y, z)","getInteractionRngState(entityA, entityB)","createEntityRng(entityId)","createPositionRng(x, y, z)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Set the global AI RNG context. Call this at the start of each game tick. Parameters: (number) — World seed (shared by server) (number) — Current game tick Get RNG state for a specific entity (deterministic per entity+tick) Parameters: (number) — Entity ID Returns: RNG state for this entity Get RNG state for a position (terrain, spawns, etc.) Parameters: (number) — X coordinate (number) — Y coordinate (number) — Z coordinate Returns: RNG state for this position Get RNG state for interaction between two entities Parameters: (number) — First entity (number) — Second entity Returns: RNG state (order independent) Create RNG stream for a specific entity Use when you need multiple random values for one entity in the same tick Parameters: (number) — No description in source JSDoc. Returns: RNG with same API as aiRng Create RNG stream for a world position Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: RNG with same API as aiRng Constants Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is","contentHash":"1e0ad685621eedf9ee23fb49b2a3cda54ecdc22ee4ffbb2310305e6d387dba67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIRandom.md::0001","path":"engine/reference/sim/ai/AIRandom.md","title":"sim/ai/AIRandom.js","description":"","kind":"reference","source":"engine/sim/ai/AIRandom.js","updated":"","headings":["sim/ai/AIRandom.js","Functions","setAIRngContext(worldSeed, tick)","getEntityRngState(entityId)","getPositionRngState(x, y, z)","getInteractionRngState(entityA, entityB)","createEntityRng(entityId)","createPositionRng(x, y, z)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b376bf848cb3620f4eb8e03f4a65400911a77ca9dbf4277bb8caa6fa9679cab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIRaycastGPU.md::0000","path":"engine/reference/sim/ai/AIRaycastGPU.md","title":"sim/ai/AIRaycastGPU.js","description":"","kind":"reference","source":"engine/sim/ai/AIRaycastGPU.js","updated":"","headings":["sim/ai/AIRaycastGPU.js","Functions","async createGPURaycastSystem(device, options = {})","uploadRays(system, rays)","uploadAABBTargets(system, targets)","uploadSphereTargets(system, targets)","dispatchAABBRaycast(system, encoder)","dispatchSphereRaycast(system, encoder)","copyResultsToReadback(system, encoder)","async readbackResults(system)","async batchRaycast(system, rays, targets, targetType = \"sphere\")","destroyGPURaycastSystem(system)","shouldUseGPURaycast(rayCount, threshold = 500)","async benchmarkRaycast(system, rayCount = 1000, targetCount = 100)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a GPU raycast system Parameters: (GPUDevice) — WebGPU device (Object) — Options Returns: GPU raycast system Upload ray data to GPU Parameters: (Object) — GPU raycast system Upload AABB targets to GPU Parameters: (Object) — GPU raycast system Upload sphere targets to GPU Parameters: (Object) — GPU raycast system Dispatch GPU raycast against AABBs Parameters: (Object) — GPU raycast system (GPUCommandEncoder) — Command encoder Dispatch GPU raycast against spheres Parameters: (Object) — GPU raycast system (GPUCommandEncoder) — Command encoder Copy results to readback buffer Parameters: (Object) — GPU raycast system (GPUCommandEncoder) — Command encoder Read back results from GPU (async) Parameters: (Object) — GPU raycast system Returns: } Results Full batch raycast operation Parameters: (Object) — GPU raycast system (Array) — Ray data (Array) — Target data (AABB or sphere) (string) — \"aabb\" or \"sphere\" Returns: Raycast results Destroy GPU raycast system and free resources Parameters: (Object) — GPU raycast system Determine if GPU raycast should be used based on ray count Parameters: (number) — Number of rays to cast (number) — Threshold for GPU usage (default 500) Returns: True if GPU should be used Benchmark CPU vs GPU raycast for calibration Parameters: (Object) — GPU raycast system (number) — Number of rays to test (number) — Number of targets Returns: } <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and","contentHash":"c5dfb5b67de47075d6f163fffb0b6ee1d982822ea5c53a8b3e7412fb5955d681"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIRaycastGPU.md::0001","path":"engine/reference/sim/ai/AIRaycastGPU.md","title":"sim/ai/AIRaycastGPU.js","description":"","kind":"reference","source":"engine/sim/ai/AIRaycastGPU.js","updated":"","headings":["sim/ai/AIRaycastGPU.js","Functions","async createGPURaycastSystem(device, options = {})","uploadRays(system, rays)","uploadAABBTargets(system, targets)","uploadSphereTargets(system, targets)","dispatchAABBRaycast(system, encoder)","dispatchSphereRaycast(system, encoder)","copyResultsToReadback(system, encoder)","async readbackResults(system)","async batchRaycast(system, rays, targets, targetType = \"sphere\")","destroyGPURaycastSystem(system)","shouldUseGPURaycast(rayCount, threshold = 500)","async benchmarkRaycast(system, rayCount = 1000, targetCount = 100)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"09f7ab3994b93a456722dd2047e932bc3ba1366f5865870ef08084363ee89ba2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIScheduler.md::0000","path":"engine/reference/sim/ai/AIScheduler.md","title":"sim/ai/AIScheduler.js","description":"","kind":"reference","source":"engine/sim/ai/AIScheduler.js","updated":"","headings":["sim/ai/AIScheduler.js","Functions","createNeedsState(initial = {})","updateNeeds(needs, gameHours)","satisfyNeed(needs, need, amount)","getMostUrgentNeed(needs)","getCriticalNeeds(needs)","calculateWellbeing(needs)","createActivity(config)","scoreActivity(activity, needs, gameHour = 12)","selectActivity(activities, needs, gameHour = 12)","createSchedule()","addScheduleEntry(schedule, hour, activityId, priority = 1, days = null)","getScheduledActivity(schedule, gameHour, dayOfWeek = 0)","createJob(config)","isWorkTime(job, gameHour, dayOfWeek)","createNPCScheduler(config = {})","updateScheduler(scheduler, gameHour, dayOfWeek, deltaGameHours)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create needs state Parameters: (Object) — Initial values (0 1) Returns: Needs state Update needs over time Parameters: (Object) — Needs state (number) — Game hours elapsed Satisfy a need Parameters: (Object) — Needs state (string) — Need type (number) — Satisfaction amount (0 1) Get most urgent need Parameters: (Object) — Needs state Returns: } Most urgent need Get all critical needs Parameters: (Object) — Needs state Returns: Critical needs Calculate overall wellbeing Parameters: (Object) — Needs state Returns: Wellbeing 0 1 Create an activity definition Parameters: (Object) — Activity config Returns: Activity Score an activity based on needs Parameters: (Object) — Activity definition (Object) — Current needs (number) — Current game hour (0 24) Returns: Activity score Select best activity from options Parameters: (Array<Object ) — Available activities (Object) — Current needs (number) — Current game hour Returns: Best activity Create a daily schedule Returns: Schedule Add scheduled entry Parameters: (Object) — Schedule (number) — Hour to start (0 24) (string) — Activity ID (number) — Override priority (Array<number ) — Days active (0=Sun, 1=Mon, etc.), null=all Get scheduled activity for time Parameters: (Object) — Schedule (number) — Current hour (number) — Day (0 6) Returns: Schedule entry Create job definition Parameters: (Object) — Job config Returns: Job definition Check if currently work hours Parameters: (Object) — Job definition (number) — Current hour (number) — Day (0 6) Returns: Is work time Create NPC scheduler Parameters: (Object) — Configuration Returns:","contentHash":"a5eebc17e46ad2c6a61f8456aeae0743989a486e27d2b9c25e267b5caf5a1125"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIScheduler.md::0001","path":"engine/reference/sim/ai/AIScheduler.md","title":"sim/ai/AIScheduler.js","description":"","kind":"reference","source":"engine/sim/ai/AIScheduler.js","updated":"","headings":["sim/ai/AIScheduler.js","Functions","createNeedsState(initial = {})","updateNeeds(needs, gameHours)","satisfyNeed(needs, need, amount)","getMostUrgentNeed(needs)","getCriticalNeeds(needs)","calculateWellbeing(needs)","createActivity(config)","scoreActivity(activity, needs, gameHour = 12)","selectActivity(activities, needs, gameHour = 12)","createSchedule()","addScheduleEntry(schedule, hour, activityId, priority = 1, days = null)","getScheduledActivity(schedule, gameHour, dayOfWeek = 0)","createJob(config)","isWorkTime(job, gameHour, dayOfWeek)","createNPCScheduler(config = {})","updateScheduler(scheduler, gameHour, dayOfWeek, deltaGameHours)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"(Object) — Job definition (number) — Current hour (number) — Day (0 6) Returns: Is work time Create NPC scheduler Parameters: (Object) — Configuration Returns: NPC scheduler Update NPC scheduler Parameters: (Object) — NPC scheduler (number) — Current game hour (number) — Day of week (number) — Time elapsed Returns: } Constants — Basic need types — Need urgency thresholds — Job types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"43e0f946087b1790b5c09ffde4249a584976c38dc7aa4e0619de0d8892a931cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISchema.md::0000","path":"engine/reference/sim/ai/AISchema.md","title":"sim/ai/AISchema.js","description":"","kind":"reference","source":"engine/sim/ai/AISchema.js","updated":"","headings":["sim/ai/AISchema.js","Functions","getNodeTypeId(typeName)","getAwarenessStateId(stateName)","getAwarenessStateName(stateId)","getReputationLevel(value)","validatePerception(config)","validateSteeringAgent(config)","validatePersonality(config)","createDefaultPerception()","createDefaultSteeringAgent()","createDefaultPersonality()","createDefaultFaction(id, name)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get node type ID from name Get awareness state ID from name Get awareness state name from ID Get reputation level from value Validate perception parameters Validate steering agent config Validate personality Create default perception config Create default steering agent Create default personality Create default faction Constants — Behavior tree node status — Behavior tree node types — NPC awareness states — Sense types for perception — Perception parameters schema — Steering behavior types — Steering agent schema — Diplomatic stances — Reputation levels — Faction schema — Personality traits (Big Five + custom) — Personality schema — Complete NPC AI schema — Create preset personality <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"c8fce639745e30424681d6da2b015544c5afce0179a9e3573ab4d27c33c25269"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISenses.md::0000","path":"engine/reference/sim/ai/AISenses.md","title":"sim/ai/AISenses.js","description":"","kind":"reference","source":"engine/sim/ai/AISenses.js","updated":"","headings":["sim/ai/AISenses.js","Functions","createScentParticle(config)","createScentTrail(sourceId, type)","addTrailParticle(trail, position, intensity = 1.0)","createScentSystem()","updateScentSystem(system, deltaTime)","smellAt(system, position, range, sensitivity = 1.0)","followScentTrail(system, position, targetSourceId, range)","createVibration(config)","createTremorSense()","emitVibration(system, vibration)","senseVibrations(system, position, sensitivity = 1.0)","createDangerSense()","registerThreat(system, threatId, position, dangerLevel, type = \"unknown\")","removeThreat(system, threatId)","senseDanger(system, position, range, sensitivity = 1.0)","createEnvironmentSensor()","updateEnvironmentReadings(sensor, readings)","getEnvironmentalComfort(sensor)","detectEnvironmentTrend(sensor, property)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create scent particle Parameters: (Object) — Scent config Returns: Scent particle Create scent trail (series of particles) Parameters: (string) — Source entity ID (string) — Scent type Returns: Scent trail Add particle to trail Parameters: (Object) — Scent trail (number[]) — Position (number) — Intensity Create scent system Returns: Scent system Update scent system Parameters: (Object) — Scent system (number) — Seconds Smell at position Parameters: (Object) — Scent system (number[]) — Sniffer position (number) — Smell range (number) — Smell sensitivity 0 1 Returns: } Follow scent trail Parameters: (Object) — Scent system (number[]) — Current position (string) — Source ID to track (number) — Search range Returns: } Create vibration event Parameters: (Object) — Config Returns: Vibration Create tremor sense system Returns: Tremor sense Emit vibration Parameters: (Object) — Tremor system (Object) — Vibration to emit Sense vibrations at position Parameters: (Object) — Tremor system (number[]) — Listener position (number) — Sensitivity 0 1 Returns: } Create danger sense system Returns: Danger sense Register threat Parameters: (Object) — Danger sense (string) — Threat ID (number[]) — Threat position (number) — Danger 0 1 (string) — Threat type Remove threat Parameters: (Object) — Danger sense (string) — Threat ID Sense danger level at position Parameters: (Object) — Danger sense (number[]) — Position to check (number) — Sense range (number) — Sensitivity 0 1 Returns: } Create environmental sensor Returns: Environment sensor Update environment readings Parameters: (Object) —","contentHash":"1afd059a35182d150fd200cc67e729b7b56527d8f1b02089b631225168a788d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISenses.md::0001","path":"engine/reference/sim/ai/AISenses.md","title":"sim/ai/AISenses.js","description":"","kind":"reference","source":"engine/sim/ai/AISenses.js","updated":"","headings":["sim/ai/AISenses.js","Functions","createScentParticle(config)","createScentTrail(sourceId, type)","addTrailParticle(trail, position, intensity = 1.0)","createScentSystem()","updateScentSystem(system, deltaTime)","smellAt(system, position, range, sensitivity = 1.0)","followScentTrail(system, position, targetSourceId, range)","createVibration(config)","createTremorSense()","emitVibration(system, vibration)","senseVibrations(system, position, sensitivity = 1.0)","createDangerSense()","registerThreat(system, threatId, position, dangerLevel, type = \"unknown\")","removeThreat(system, threatId)","senseDanger(system, position, range, sensitivity = 1.0)","createEnvironmentSensor()","updateEnvironmentReadings(sensor, readings)","getEnvironmentalComfort(sensor)","detectEnvironmentTrend(sensor, property)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— Sense range (number) — Sensitivity 0 1 Returns: } Create environmental sensor Returns: Environment sensor Update environment readings Parameters: (Object) — Environment sensor (Object) — {temperature, humidity, etc.} Get environmental comfort level Parameters: (Object) — Environment sensor Returns: } Detect environmental trend Parameters: (Object) — Environment sensor (string) — Property to check Returns: } rising, falling, stable Constants — Scent types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"c0280bc818bf35b0c89e0ddce744c6924161dd6bcbfe53c9f6e7c5e95ef05396"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISmartObjects.md::0000","path":"engine/reference/sim/ai/AISmartObjects.md","title":"sim/ai/AISmartObjects.js","description":"","kind":"reference","source":"engine/sim/ai/AISmartObjects.js","updated":"","headings":["sim/ai/AISmartObjects.js","Functions","createSmartObject(config)","getSlotWorldPosition(smartObject, slotIndex = 0)","findAvailableSlot(smartObject)","reserveSlot(smartObject, slotIndex, npcId)","releaseSlot(smartObject, slotIndex)","checkPrerequisites(smartObject, npcState)","createInteraction(smartObject, npcId, slotIndex)","updateInteraction(interaction, npcPos, npcFacing, now)","completeInteraction(smartObject, interaction, npcState)","createSmartObjectRegistry()","registerSmartObject(registry, smartObject)","findByCategory(registry, category)","findByTag(registry, tag)","findNearestUsable(registry, position, npcState, filters = {})","createHealthStation(id, position, healAmount = 50)","createAmmoCrate(id, position, ammoAmount = 30)","createDoor(id, position, rotation = 0)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a smart object Parameters: (Object) — Object configuration Returns: Smart object Get world position of an interaction slot Parameters: (Object) — Smart object (number) — Slot index Returns: } World position and facing Find available slot for interaction Parameters: (Object) — Smart object Returns: Slot index or 1 if none available Reserve a slot for an NPC Parameters: (Object) — Smart object (number) — Slot index (number) — NPC ID Returns: True if reserved Release a slot Parameters: (Object) — Smart object (number) — Slot index Check if NPC meets prerequisites for interaction Parameters: (Object) — Smart object (Object) — NPC state data Returns: } Can use and missing prereqs Create an interaction session Parameters: (Object) — Smart object (number) — NPC ID (number) — Reserved slot index Returns: Interaction session Update interaction state Parameters: (Object) — Interaction session (number[]) — NPC position (number[]) — NPC facing (number) — Current time Returns: } Complete interaction and apply effects Parameters: (Object) — Smart object (Object) — Interaction session (Object) — NPC state to modify Returns: Applied effects Create a smart object registry Returns: Registry Register a smart object Parameters: (Object) — Registry (Object) — Smart object Find smart objects by category Parameters: (Object) — Registry (string) — Category Returns: Matching objects Find smart objects by tag Parameters: (Object) — Registry (string) — Tag Returns: Matching objects Find nearest usable smart object Parameters: (Object) — Registry (number[]) — NPC position (Object) — NPC","contentHash":"1ba6ca1ac1c20a573c5f30b5e0ae3985cee38a1b0aa4c9dd65bd15217e858350"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISmartObjects.md::0001","path":"engine/reference/sim/ai/AISmartObjects.md","title":"sim/ai/AISmartObjects.js","description":"","kind":"reference","source":"engine/sim/ai/AISmartObjects.js","updated":"","headings":["sim/ai/AISmartObjects.js","Functions","createSmartObject(config)","getSlotWorldPosition(smartObject, slotIndex = 0)","findAvailableSlot(smartObject)","reserveSlot(smartObject, slotIndex, npcId)","releaseSlot(smartObject, slotIndex)","checkPrerequisites(smartObject, npcState)","createInteraction(smartObject, npcId, slotIndex)","updateInteraction(interaction, npcPos, npcFacing, now)","completeInteraction(smartObject, interaction, npcState)","createSmartObjectRegistry()","registerSmartObject(registry, smartObject)","findByCategory(registry, category)","findByTag(registry, tag)","findNearestUsable(registry, position, npcState, filters = {})","createHealthStation(id, position, healAmount = 50)","createAmmoCrate(id, position, ammoAmount = 30)","createDoor(id, position, rotation = 0)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— Registry (string) — Tag Returns: Matching objects Find nearest usable smart object Parameters: (Object) — Registry (number[]) — NPC position (Object) — NPC state (Object) — Filters {category, tag, maxDistance} Returns: Nearest usable object Create a health station smart object Parameters: (number) — Object ID (number[]) — World position (number) — Amount to heal Returns: Smart object Create an ammo crate smart object Parameters: (number) — Object ID (number[]) — World position (number) — Amount of ammo Returns: Smart object Create a door smart object Parameters: (number) — Object ID (number[]) — World position (number) — Y rotation Returns: Smart object Constants — Smart object categories — Interaction states <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2a578ca3f4ba50a054163104f4c1513c72445bb142400ff3b4af82bd73fbb18f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISound.md::0000","path":"engine/reference/sim/ai/AISound.md","title":"sim/ai/AISound.js","description":"","kind":"reference","source":"engine/sim/ai/AISound.js","updated":"","headings":["sim/ai/AISound.js","Functions","createSoundEvent(config)","createSoundSystem(config = {})","registerListener(system, entityId, config = {})","updateListenerPosition(system, entityId, position)","addSoundOccluder(system, wall)","emitSound(system, soundConfig)","calculateSoundIntensity(sound, position, walls)","updateSoundSystem(system, deltaTime)","getRecentDetections(system, entityId, maxAge = 5000)","getHighestPriorityDetection(system, entityId)","emitFootstep(system, position, surface = SURFACETYPE.CONCRETE, running = false)","emitGunshot(system, position, weaponType = \"pistol\")","emitExplosion(system, position, size = 1.0)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a sound event Parameters: (Object) — Sound config Returns: Sound event Create sound propagation system Parameters: (Object) — Config Returns: Sound system Register listener (AI agent that can hear) Parameters: (Object) — Sound system (string) — Entity ID (Object) — Hearing config Update listener position Parameters: (Object) — Sound system (string) — Entity ID (number[]) — New position Add wall/occluder Parameters: (Object) — Sound system (Object) — {start, end, height, surface} Emit sound Parameters: (Object) — Sound system (Object) — Sound configuration Returns: Created sound event Calculate sound intensity at position Parameters: (Object) — Sound event (number[]) — Listener position (Array) — Wall occluders Returns: } Update sound propagation and detection Parameters: (Object) — Sound system (number) — Seconds Returns: New detections [{listenerId, sound, intensity}] Get recent detections for entity Parameters: (Object) — Sound system (string) — Entity ID (number) — Max age in ms Returns: Recent detections Get highest priority unhandled detection Parameters: (Object) — Sound system (string) — Entity ID Returns: Detection or null Emit footstep sound Parameters: (Object) — Sound system (number[]) — Position (string) — Surface type (boolean) — Is running Emit gunshot sound Parameters: (Object) — Sound system (number[]) — Position (string) — Weapon type (pistol, rifle, shotgun) Emit explosion sound Parameters: (Object) — Sound system (number[]) — Position (number) — Explosion size 0 1 Constants — Sound categories — Surface types for acoustic properties — Sound","contentHash":"c32d5eb34d0437916ea923ab3f42a56259080c401d59827325237d8500531eb1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISound.md::0001","path":"engine/reference/sim/ai/AISound.md","title":"sim/ai/AISound.js","description":"","kind":"reference","source":"engine/sim/ai/AISound.js","updated":"","headings":["sim/ai/AISound.js","Functions","createSoundEvent(config)","createSoundSystem(config = {})","registerListener(system, entityId, config = {})","updateListenerPosition(system, entityId, position)","addSoundOccluder(system, wall)","emitSound(system, soundConfig)","calculateSoundIntensity(sound, position, walls)","updateSoundSystem(system, deltaTime)","getRecentDetections(system, entityId, maxAge = 5000)","getHighestPriorityDetection(system, entityId)","emitFootstep(system, position, surface = SURFACETYPE.CONCRETE, running = false)","emitGunshot(system, position, weaponType = \"pistol\")","emitExplosion(system, position, size = 1.0)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"(Object) — Sound system (number[]) — Position (number) — Explosion size 0 1 Constants — Sound categories — Surface types for acoustic properties — Sound priority for AI attention <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"4c0ec091ee334e0075c0a0ec8910a6c1025c93e0b95e376f7ed6d4822e50ae41"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISquad.md::0000","path":"engine/reference/sim/ai/AISquad.md","title":"sim/ai/AISquad.js","description":"","kind":"reference","source":"engine/sim/ai/AISquad.js","updated":"","headings":["sim/ai/AISquad.js","Functions","createSquadManager()","createSquad(manager, leader)","addToSquad(manager, squad, npc, role = SQUADROLE.NONE)","removeFromSquad(manager, npcId)","disbandSquad(manager, squad)","updateSquadFormations(manager, npcs)","assignSquadRoles(squad, threatPos)","calculateAttackPositions(squad, targetPos, coverPoints)","planSuppressionManeuver(squad, targetPos)","queueBark(squad, npcId, barkType, data = {})","processBarkQueue(squad)","getBarkText(barkType)","updateSquadTactics(manager, squad, threatPos, options = {})","getSquadForNPC(manager, npcId)","getTeammates(manager, npcId)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a squad manager Returns: Squad manager Create a new squad Parameters: (Object) — Squad manager (Object) — Leader NPC Returns: New squad Add NPC to squad Parameters: (Object) — Squad manager (Object) — Squad (Object) — NPC to add (number) — Squad role Remove NPC from their squad Parameters: (Object) — Squad manager (number) — NPC ID Disband a squad Parameters: (Object) — Squad manager (Object) — Squad to disband Update squad formations based on proximity NPCs within range form impromptu squads Parameters: (Object) — Squad manager (Array<Object ) — All NPCs Assign tactical roles to squad members Parameters: (Object) — Squad (number[]) — Threat position Calculate attack positions for coordinated assault Parameters: (Object) — Squad (number[]) — Target position (Array<Object ) — Available cover Returns: NPC ID → attack position Check if squad should coordinate suppression fire Parameters: (Object) — Squad (number[]) — Target position Returns: {suppressor, movers} or null Queue a bark for the squad Parameters: (Object) — Squad (number) — Speaking NPC ID (string) — BARK TYPE (Object) — Additional bark data Process pending barks Parameters: (Object) — Squad Returns: Barks to display/play Get bark text for a bark type Parameters: (string) — BARK TYPE Returns: Bark text Update squad tactical state Parameters: (Object) — Squad manager (Object) — Squad (number[]) — Threat position (if known) (Object) — Update options Get squad for an NPC Parameters: (Object) — Squad manager (number) — NPC ID Returns: Squad or null Get teammates for an NPC (excluding self) Parameters:","contentHash":"5c876d20d8adf0d9a06249e85e1014f5a52d294e66942c01075c845f2171e3af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISquad.md::0001","path":"engine/reference/sim/ai/AISquad.md","title":"sim/ai/AISquad.js","description":"","kind":"reference","source":"engine/sim/ai/AISquad.js","updated":"","headings":["sim/ai/AISquad.js","Functions","createSquadManager()","createSquad(manager, leader)","addToSquad(manager, squad, npc, role = SQUADROLE.NONE)","removeFromSquad(manager, npcId)","disbandSquad(manager, squad)","updateSquadFormations(manager, npcs)","assignSquadRoles(squad, threatPos)","calculateAttackPositions(squad, targetPos, coverPoints)","planSuppressionManeuver(squad, targetPos)","queueBark(squad, npcId, barkType, data = {})","processBarkQueue(squad)","getBarkText(barkType)","updateSquadTactics(manager, squad, threatPos, options = {})","getSquadForNPC(manager, npcId)","getTeammates(manager, npcId)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Get squad for an NPC Parameters: (Object) — Squad manager (number) — NPC ID Returns: Squad or null Get teammates for an NPC (excluding self) Parameters: (Object) — Squad manager (number) — NPC ID Returns: Teammate NPCs Constants — Squad roles — Communication bark types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b4e441444a91b17671be889ba9aa086f9d684119fb65893aed76513115929a0d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISteering.md::0000","path":"engine/reference/sim/ai/AISteering.md","title":"sim/ai/AISteering.js","description":"","kind":"reference","source":"engine/sim/ai/AISteering.js","updated":"","headings":["sim/ai/AISteering.js","Functions","createSteeringAgent(config = {})","applyForce(agent, force)","updateSteering(agent, deltaTime)","seek(agent, target)","flee(agent, target)","arrive(agent, target, slowingRadius = 5)","pursue(agent, targetPos, targetVel)","evade(agent, targetPos, targetVel)","wander(agent)","avoidObstacles(agent, obstacles)","avoidWalls(agent, walls)","separation(agent, neighbors, separationRadius = 3)","alignment(agent, neighbors, alignmentRadius = 5)","cohesion(agent, neighbors, cohesionRadius = 8)","flock(agent, neighbors, weights = {})","followPath(agent, path, pathRadius = 2)","createFlowField(width, height, cellSize)","setFlowDirection(field, x, y, dirX, dirZ)","getFlowDirection(field, worldX, worldZ)","followFlowField(agent, field)","generateFlowFieldToTarget(field, targetX, targetZ)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a steering agent Uses AISchema defaults for consistent configuration Parameters: (Object) — Agent configuration Returns: Steering agent Apply steering force to agent Parameters: (Object) — Steering agent (number[]) — Force vector Update agent physics Parameters: (Object) — Steering agent (number) — Delta time in seconds Seek: steer toward target Parameters: (Object) — Steering agent (number[]) — Target position Returns: Steering force Flee: steer away from target Parameters: (Object) — Steering agent (number[]) — Target position to flee from Returns: Steering force Arrive: seek with slowing near target Parameters: (Object) — Steering agent (number[]) — Target position (number) — Distance to start slowing Returns: Steering force Pursue: seek predicted future position of moving target Parameters: (Object) — Steering agent (number[]) — Target current position (number[]) — Target velocity Returns: Steering force Evade: flee from predicted future position Parameters: (Object) — Steering agent (number[]) — Pursuer position (number[]) — Pursuer velocity Returns: Steering force Wander: random steering Parameters: (Object) — Steering agent Returns: Steering force Avoid obstacles using ray casting Parameters: (Object) — Steering agent Returns: Steering force Avoid walls using feeler rays Parameters: (Object) — Steering agent Returns: Steering force Separation: steer away from nearby agents Parameters: (Object) — Steering agent (Array<Object ) — Nearby agents (number) — Distance to separate from Returns: Steering force Alignment: steer toward average heading of neighbors","contentHash":"5246c099260b9f399de9dd8e9bd05dc4d1969d413d2f7e72ef7ac97b743eac4c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISteering.md::0001","path":"engine/reference/sim/ai/AISteering.md","title":"sim/ai/AISteering.js","description":"","kind":"reference","source":"engine/sim/ai/AISteering.js","updated":"","headings":["sim/ai/AISteering.js","Functions","createSteeringAgent(config = {})","applyForce(agent, force)","updateSteering(agent, deltaTime)","seek(agent, target)","flee(agent, target)","arrive(agent, target, slowingRadius = 5)","pursue(agent, targetPos, targetVel)","evade(agent, targetPos, targetVel)","wander(agent)","avoidObstacles(agent, obstacles)","avoidWalls(agent, walls)","separation(agent, neighbors, separationRadius = 3)","alignment(agent, neighbors, alignmentRadius = 5)","cohesion(agent, neighbors, cohesionRadius = 8)","flock(agent, neighbors, weights = {})","followPath(agent, path, pathRadius = 2)","createFlowField(width, height, cellSize)","setFlowDirection(field, x, y, dirX, dirZ)","getFlowDirection(field, worldX, worldZ)","followFlowField(agent, field)","generateFlowFieldToTarget(field, targetX, targetZ)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"agent (Array<Object ) — Nearby agents (number) — Distance to separate from Returns: Steering force Alignment: steer toward average heading of neighbors Parameters: (Object) — Steering agent (Array<Object ) — Nearby agents (number) — Neighborhood radius Returns: Steering force Cohesion: steer toward center of neighbors Parameters: (Object) — Steering agent (Array<Object ) — Nearby agents (number) — Neighborhood radius Returns: Steering force Combined flocking behavior Parameters: (Object) — Steering agent (Array<Object ) — Nearby agents (Object) — Behavior weights Returns: Combined steering force Follow a path Parameters: (Object) — Steering agent (Array<number[] ) — Array of waypoints (number) — Radius to consider \"on path\" Returns: } Create a flow field Parameters: (number) — Grid width (number) — Grid height (number) — Cell size in world units Returns: Flow field Set flow field cell direction Parameters: (Object) — Flow field (number) — Cell X (number) — Cell Y (number) — Direction X (number) — Direction Z Get flow direction at world position Parameters: (Object) — Flow field (number) — World X (number) — World Z Returns: Direction [x, 0, z] Follow flow field Parameters: (Object) — Steering agent (Object) — Flow field Returns: Steering force Generate flow field toward target Parameters: (Object) — Flow field (number) — Target world X (number) — Target world Z Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced:","contentHash":"604e16427370094e71f8d9b2526556002a4da28d307cf2db9b714964d1eda3fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AISteering.md::0002","path":"engine/reference/sim/ai/AISteering.md","title":"sim/ai/AISteering.js","description":"","kind":"reference","source":"engine/sim/ai/AISteering.js","updated":"","headings":["sim/ai/AISteering.js","Functions","createSteeringAgent(config = {})","applyForce(agent, force)","updateSteering(agent, deltaTime)","seek(agent, target)","flee(agent, target)","arrive(agent, target, slowingRadius = 5)","pursue(agent, targetPos, targetVel)","evade(agent, targetPos, targetVel)","wander(agent)","avoidObstacles(agent, obstacles)","avoidWalls(agent, walls)","separation(agent, neighbors, separationRadius = 3)","alignment(agent, neighbors, alignmentRadius = 5)","cohesion(agent, neighbors, cohesionRadius = 8)","flock(agent, neighbors, weights = {})","followPath(agent, path, pathRadius = 2)","createFlowField(width, height, cellSize)","setFlowDirection(field, x, y, dirX, dirZ)","getFlowDirection(field, worldX, worldZ)","followFlowField(agent, field)","generateFlowFieldToTarget(field, targetX, targetZ)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"efd1ca13904aa21da05b59a4fed504e5001933941803e88bf0035fcc068270ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AITerrain.md::0000","path":"engine/reference/sim/ai/AITerrain.md","title":"sim/ai/AITerrain.js","description":"","kind":"reference","source":"engine/sim/ai/AITerrain.js","updated":"","headings":["sim/ai/AITerrain.js","Functions","createTerrainGrid(width, height, cellSize)","setTerrainType(grid, x, y, type)","getTerrainType(grid, x, y)","setTerrainHeight(grid, x, y, height)","getTerrainHeight(grid, x, y)","worldToTerrainCell(grid, worldX, worldZ)","terrainCellToWorld(grid, cellX, cellY)","getTerrainPropertiesAt(grid, worldX, worldZ)","calculateMovementCost(grid, fromX, fromZ, toX, toZ)","getStealthModifier(grid, worldX, worldZ)","getNoiseModifier(grid, worldX, worldZ)","calculateHeightAdvantage(grid, attackerX, attackerZ, defenderX, defenderZ)","findHighGround(grid, centerX, centerZ, radius, count = 5)","findConcealment(grid, centerX, centerZ, radius, count = 5)","detectChokepoints(grid, minX, minZ, maxX, maxZ)","evaluateTacticalPosition(grid, worldX, worldZ, threatDirection = null)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create terrain grid Parameters: (number) — Grid width (number) — Grid height (number) — World units per cell Returns: Terrain grid Set terrain type at cell Parameters: (Object) — Terrain grid (number) — Cell X (number) — Cell Y (string) — Terrain type Get terrain type at cell Parameters: (Object) — Terrain grid (number) — Cell X (number) — Cell Y Returns: Terrain type Set height at cell Parameters: (Object) — Terrain grid (number) — Cell X (number) — Cell Y (number) — Height value Get height at cell Parameters: (Object) — Terrain grid (number) — Cell X (number) — Cell Y Returns: Height World to grid coordinates Parameters: (Object) — Terrain grid (number) — World X (number) — World Z Returns: } Grid to world coordinates (cell center) Parameters: (Object) — Terrain grid (number) — Cell X (number) — Cell Y Returns: } Get terrain properties at world position Parameters: (Object) — Terrain grid (number) — World X (number) — World Z Returns: Terrain properties Calculate movement cost between two points Parameters: (Object) — Terrain grid (number) — Start world X (number) — Start world Z (number) — End world X (number) — End world Z Returns: Movement cost Get stealth modifier at position Parameters: (Object) — Terrain grid (number) — World X (number) — World Z Returns: Stealth multiplier (higher = better stealth) Get noise modifier at position Parameters: (Object) — Terrain grid (number) — World X (number) — World Z Returns: Noise multiplier (higher = louder) Calculate height advantage Parameters: (Object) — Terrain grid (number) — Attacker world X (number) — Attacker world Z","contentHash":"5b6fee3f52e2cafc972c4f97b3c7718ec36101487865083c3a35024ed4e87f15"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AITerrain.md::0001","path":"engine/reference/sim/ai/AITerrain.md","title":"sim/ai/AITerrain.js","description":"","kind":"reference","source":"engine/sim/ai/AITerrain.js","updated":"","headings":["sim/ai/AITerrain.js","Functions","createTerrainGrid(width, height, cellSize)","setTerrainType(grid, x, y, type)","getTerrainType(grid, x, y)","setTerrainHeight(grid, x, y, height)","getTerrainHeight(grid, x, y)","worldToTerrainCell(grid, worldX, worldZ)","terrainCellToWorld(grid, cellX, cellY)","getTerrainPropertiesAt(grid, worldX, worldZ)","calculateMovementCost(grid, fromX, fromZ, toX, toZ)","getStealthModifier(grid, worldX, worldZ)","getNoiseModifier(grid, worldX, worldZ)","calculateHeightAdvantage(grid, attackerX, attackerZ, defenderX, defenderZ)","findHighGround(grid, centerX, centerZ, radius, count = 5)","findConcealment(grid, centerX, centerZ, radius, count = 5)","detectChokepoints(grid, minX, minZ, maxX, maxZ)","evaluateTacticalPosition(grid, worldX, worldZ, threatDirection = null)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"Noise multiplier (higher = louder) Calculate height advantage Parameters: (Object) — Terrain grid (number) — Attacker world X (number) — Attacker world Z (number) — Defender world X (number) — Defender world Z Returns: Height advantage ( 1 to 1, positive = attacker has advantage) Find high ground positions in area Parameters: (Object) — Terrain grid (number) — Center world X (number) — Center world Z (number) — Search radius (number) — Max positions to return Returns: } High ground positions Find concealment positions Parameters: (Object) — Terrain grid (number) — Center world X (number) — Center world Z (number) — Search radius (number) — Max positions Returns: } Detect chokepoints in area Parameters: (Object) — Terrain grid (number) — Min world X (number) — Min world Z (number) — Max world X (number) — Max world Z Returns: } Evaluate tactical position value Parameters: (Object) — Terrain grid (number) — World X (number) — World Z (number[]) — Direction threat is coming from Returns: Tactical evaluation Constants — Terrain types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At","contentHash":"b67068212e3943ba35ca97bdc2f6257f01234f59ba0ebf4825e815af7203a1c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AITerrain.md::0002","path":"engine/reference/sim/ai/AITerrain.md","title":"sim/ai/AITerrain.js","description":"","kind":"reference","source":"engine/sim/ai/AITerrain.js","updated":"","headings":["sim/ai/AITerrain.js","Functions","createTerrainGrid(width, height, cellSize)","setTerrainType(grid, x, y, type)","getTerrainType(grid, x, y)","setTerrainHeight(grid, x, y, height)","getTerrainHeight(grid, x, y)","worldToTerrainCell(grid, worldX, worldZ)","terrainCellToWorld(grid, cellX, cellY)","getTerrainPropertiesAt(grid, worldX, worldZ)","calculateMovementCost(grid, fromX, fromZ, toX, toZ)","getStealthModifier(grid, worldX, worldZ)","getNoiseModifier(grid, worldX, worldZ)","calculateHeightAdvantage(grid, attackerX, attackerZ, defenderX, defenderZ)","findHighGround(grid, centerX, centerZ, radius, count = 5)","findConcealment(grid, centerX, centerZ, radius, count = 5)","detectChokepoints(grid, minX, minZ, maxX, maxZ)","evaluateTacticalPosition(grid, worldX, worldZ, threatDirection = null)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"35031864caa736e124aa0dfd64aed4e0518a8b4d935ed590abfa378c36f52f28"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIUtility.md::0000","path":"engine/reference/sim/ai/AIUtility.md","title":"sim/ai/AIUtility.js","description":"","kind":"reference","source":"engine/sim/ai/AIUtility.js","updated":"","headings":["sim/ai/AIUtility.js","Functions","linearCurve(slope = 1, intercept = 0)","inverseLinearCurve()","quadraticCurve(scale = 1, offset = 0)","exponentialCurve(k = 2)","logisticCurve(k = 10, midpoint = 0.5)","smoothstepCurve()","stepCurve(threshold = 0.5)","bellCurve(center = 0.5, width = 0.3)","customCurve(points)","createConsideration(name, inputFn, curve, weight = 1)","evaluateConsideration(consideration, context)","createUtilityAction(name, considerations, execute, options = {})","scoreAction(action, context)","selectBestAction(actions, context)","selectActionWeighted(actions, context, randomFactor = 0.2)","selectActionBucketed(actions, context, bucketSize = 3)","createUtilityBrain(actions, options = {})","updateUtilityBrain(brain, context, now = performance.now()","executeCurrentAction(brain, context)","createHealthConsideration(criticalThreshold = 0.3)","createDistanceConsideration(idealDistance, maxDistance)","createAmmoConsideration()","createThreatConsideration()","createCoverConsideration()","createLOSConsideration()","createCombatActions(handlers)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Linear curve: y = mx + b Parameters: (number) — Slope (m) (number) — Y intercept (b) Returns: Curve function Inverse linear curve: y = 1 x Returns: Curve function Quadratic curve: y = (x offset)^2 scale Parameters: (number) — Scale factor (number) — X offset Returns: Curve function Exponential curve: y = e^(kx) normalized Parameters: (number) — Exponent factor Returns: Curve function Logistic (S curve): y = 1 / (1 + e^( k(x midpoint))) Parameters: (number) — Steepness (number) — X value at y=0.5 Returns: Curve function Smoothstep curve: 3x^2 2x^3 Returns: Curve function Step curve: returns 0 below threshold, 1 above Parameters: (number) — Step threshold Returns: Curve function Bell curve (Gaussian like): peaks at center Parameters: (number) — Peak position (number) — Width of bell Returns: Curve function Custom curve from control points (piecewise linear) Returns: Curve function Create a consideration (single scoring factor) Parameters: (string) — Consideration name (Function) — Function to get normalized input (context) = 0 1 (Function) — Response curve function (number) — Weight multiplier (default 1) Returns: Consideration Evaluate a consideration Parameters: (Object) — Consideration object (Object) — Context data Returns: Score 0 1 Create a utility action Parameters: (string) — Action name (Array<Object ) — Array of considerations (Function) — Execution function (context) = void (Object) — Additional options Returns: Utility action Score an action Parameters: (Object) — Utility action (Object) — Context data Returns: Final score Select best action from candidates","contentHash":"e79ebaab497f8d59c702423c7d4fe4b6437e678d458eaa60da85defe1a4adb88"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIUtility.md::0001","path":"engine/reference/sim/ai/AIUtility.md","title":"sim/ai/AIUtility.js","description":"","kind":"reference","source":"engine/sim/ai/AIUtility.js","updated":"","headings":["sim/ai/AIUtility.js","Functions","linearCurve(slope = 1, intercept = 0)","inverseLinearCurve()","quadraticCurve(scale = 1, offset = 0)","exponentialCurve(k = 2)","logisticCurve(k = 10, midpoint = 0.5)","smoothstepCurve()","stepCurve(threshold = 0.5)","bellCurve(center = 0.5, width = 0.3)","customCurve(points)","createConsideration(name, inputFn, curve, weight = 1)","evaluateConsideration(consideration, context)","createUtilityAction(name, considerations, execute, options = {})","scoreAction(action, context)","selectBestAction(actions, context)","selectActionWeighted(actions, context, randomFactor = 0.2)","selectActionBucketed(actions, context, bucketSize = 3)","createUtilityBrain(actions, options = {})","updateUtilityBrain(brain, context, now = performance.now()","executeCurrentAction(brain, context)","createHealthConsideration(criticalThreshold = 0.3)","createDistanceConsideration(idealDistance, maxDistance)","createAmmoConsideration()","createThreatConsideration()","createCoverConsideration()","createLOSConsideration()","createCombatActions(handlers)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"Returns: Utility action Score an action Parameters: (Object) — Utility action (Object) — Context data Returns: Final score Select best action from candidates Parameters: (Array<Object ) — Available actions (Object) — Context data Returns: null} Best action or null Select action with weighted randomization Higher scores = higher chance, but not guaranteed Parameters: (Array<Object ) — Available actions (Object) — Context data (number) — Randomization factor (0 = deterministic, 1 = fully random) Returns: null} Selected action Select from top N actions (bucketing) Parameters: (Array<Object ) — Available actions (Object) — Context data (number) — Number of top actions to consider Returns: null} Selected action Create a utility AI brain Parameters: (Array<Object ) — Available actions (Object) — Brain options Returns: Utility brain Update utility brain and select action Parameters: (Object) — Utility brain (Object) — Context data (number) — Current time Returns: null} Selected action or null if no change Execute the current action Parameters: (Object) — Utility brain (Object) — Context data Create health consideration Parameters: (number) — Health % considered critical Returns: Consideration Create distance consideration Parameters: (number) — Ideal distance (number) — Maximum relevant distance Returns: Consideration Create ammo consideration Returns: Consideration Create threat consideration Returns: Consideration Create cover consideration Returns: Consideration Create line of sight consideration Returns: Consideration Create basic combat action set Parameters: (Object) — Action handler functions Returns: Actions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes","contentHash":"7e27a34faa08723908e8616e988aeb9a6e1ea6a650727c0f72cb9c3d9abdd6e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIUtility.md::0002","path":"engine/reference/sim/ai/AIUtility.md","title":"sim/ai/AIUtility.js","description":"","kind":"reference","source":"engine/sim/ai/AIUtility.js","updated":"","headings":["sim/ai/AIUtility.js","Functions","linearCurve(slope = 1, intercept = 0)","inverseLinearCurve()","quadraticCurve(scale = 1, offset = 0)","exponentialCurve(k = 2)","logisticCurve(k = 10, midpoint = 0.5)","smoothstepCurve()","stepCurve(threshold = 0.5)","bellCurve(center = 0.5, width = 0.3)","customCurve(points)","createConsideration(name, inputFn, curve, weight = 1)","evaluateConsideration(consideration, context)","createUtilityAction(name, considerations, execute, options = {})","scoreAction(action, context)","selectBestAction(actions, context)","selectActionWeighted(actions, context, randomFactor = 0.2)","selectActionBucketed(actions, context, bucketSize = 3)","createUtilityBrain(actions, options = {})","updateUtilityBrain(brain, context, now = performance.now()","executeCurrentAction(brain, context)","createHealthConsideration(criticalThreshold = 0.3)","createDistanceConsideration(idealDistance, maxDistance)","createAmmoConsideration()","createThreatConsideration()","createCoverConsideration()","createLOSConsideration()","createCombatActions(handlers)","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bu","contentHash":"af04c8d5bed9e97223eb4c282cd0ab464818577c091cfa91eae9dd745ce82308"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIValues.md::0000","path":"engine/reference/sim/ai/AIValues.md","title":"sim/ai/AIValues.js","description":"","kind":"reference","source":"engine/sim/ai/AIValues.js","updated":"","headings":["sim/ai/AIValues.js","Functions","createValueSystem(config = {})","createLifeGoal(config)","getValue(system, value)","setValue(system, value, level)","modifyValue(system, value, delta)","valuesPositively(system, value)","getTopValues(system, count = 5)","satisfyPsychNeed(system, need, delta)","decayPsychNeeds(system, deltaTime)","getMostDeprivedNeed(system)","calculateWellbeing(system)","addLifeGoal(system, goal)","updateGoalProgress(system, goalId, progress)","pursueGoal(system, goalId)","getActiveGoals(system)","getUnfulfilledDreams(system)","scoreActionByValues(system, action)","wouldDoAction(system, action, threshold = 0)","createFromPreset(preset)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create NPC values system Parameters: (Object) — Configuration Returns: Values system Create a life goal Parameters: (Object) — Goal config Returns: Life goal Get value strength Parameters: (Object) — Value system (string) — Value type Returns: Strength ( 3 to 3) Set value strength Parameters: (Object) — Value system (string) — Value type (number) — New level Modify value (shift toward a direction) Parameters: (Object) — Value system (string) — Value type (number) — Change amount Check if NPC values something Parameters: (Object) — Value system (string) — Value type Returns: Values it positively Get top values (what they care about most) Parameters: (Object) — Value system (number) — How many to return Returns: } Update psychological need Parameters: (Object) — Value system (string) — Need type (number) — Change in satisfaction Decay psychological needs over time Parameters: (Object) — Value system (number) — Time elapsed in seconds Get most deprived psychological need Parameters: (Object) — Value system Returns: } Calculate overall psychological wellbeing Parameters: (Object) — Value system Returns: Wellbeing 0 1 Add life goal Parameters: (Object) — Value system (Object) — Goal to add Update goal progress Parameters: (Object) — Value system (string) — Goal ID (number) — New progress (0 1) Start pursuing a goal Parameters: (Object) — Value system (string) — Goal ID Get active goals being pursued Parameters: (Object) — Value system Returns: Active goals Get unfulfilled dreams Parameters: (Object) — Value system Returns: Dreams Score an action based on values Parameters:","contentHash":"848486808f5c50c48024c5d0eda93131b18973fd540c5f03590bcc5c873b9f4e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIValues.md::0001","path":"engine/reference/sim/ai/AIValues.md","title":"sim/ai/AIValues.js","description":"","kind":"reference","source":"engine/sim/ai/AIValues.js","updated":"","headings":["sim/ai/AIValues.js","Functions","createValueSystem(config = {})","createLifeGoal(config)","getValue(system, value)","setValue(system, value, level)","modifyValue(system, value, delta)","valuesPositively(system, value)","getTopValues(system, count = 5)","satisfyPsychNeed(system, need, delta)","decayPsychNeeds(system, deltaTime)","getMostDeprivedNeed(system)","calculateWellbeing(system)","addLifeGoal(system, goal)","updateGoalProgress(system, goalId, progress)","pursueGoal(system, goalId)","getActiveGoals(system)","getUnfulfilledDreams(system)","scoreActionByValues(system, action)","wouldDoAction(system, action, threshold = 0)","createFromPreset(preset)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— Value system Returns: Active goals Get unfulfilled dreams Parameters: (Object) — Value system Returns: Dreams Score an action based on values Parameters: (Object) — Value system (Object) — {affects: {value: impact}} Returns: Score (higher = more aligned with values) Would NPC do this action based on values? Parameters: (Object) — Value system (Object) — Action with value impacts (number) — Minimum score to accept Returns: } Create value system from preset Parameters: (string) — Preset name Returns: Value system Constants — Value types things an NPC can care about — Value strength levels — Types of life goals — Goal status — Higher order psychological needs — Preference categories — Value presets for quick character creation <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"bff4083e473b0876b36ffdaaf491a5da85ee320ca4d328ea3164ae8c02943f89"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIVehicle.md::0000","path":"engine/reference/sim/ai/AIVehicle.md","title":"sim/ai/AIVehicle.js","description":"","kind":"reference","source":"engine/sim/ai/AIVehicle.js","updated":"","headings":["sim/ai/AIVehicle.js","Functions","createVehicleType(config)","createVehicle(vehicleType, position, heading = 0)","updateVehiclePhysics(vehicle, deltaTime)","updateVehicleAI(vehicle, world, deltaTime)","setVehiclePath(vehicle, path)","createTrafficSystem(config = {})","updateTrafficSystem(traffic, deltaTime)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AIVehicle.js ⚠️ MULTIPLAYER: Uses deterministic RNG from AIRandom.js Functions Create vehicle definition Parameters: (Object) — Vehicle config Returns: Vehicle definition Create vehicle instance Parameters: (Object) — Vehicle type definition (number[]) — Starting position (number) — Starting heading (radians) Returns: Vehicle instance Update vehicle physics Parameters: (Object) — Vehicle instance (number) — Seconds elapsed Update vehicle AI Parameters: (Object) — Vehicle instance (Object) — World data (roads, traffic, etc.) (number) — Seconds elapsed Set vehicle path Parameters: (Object) — Vehicle (Array<number[] ) — Path waypoints Create traffic system Parameters: (Object) — Config Returns: Traffic system Update traffic system Parameters: (Object) — Traffic system (number) — Seconds elapsed Constants — Vehicle behavior modes — Traffic light states <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU","contentHash":"a74da7c86d50ce38e132868fb1d4e3856f67b7b62e500e34658f9eaa381c2dc7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIVehicle.md::0001","path":"engine/reference/sim/ai/AIVehicle.md","title":"sim/ai/AIVehicle.js","description":"","kind":"reference","source":"engine/sim/ai/AIVehicle.js","updated":"","headings":["sim/ai/AIVehicle.js","Functions","createVehicleType(config)","createVehicle(vehicleType, position, heading = 0)","updateVehiclePhysics(vehicle, deltaTime)","updateVehicleAI(vehicle, world, deltaTime)","setVehiclePath(vehicle, path)","createTrafficSystem(config = {})","updateTrafficSystem(traffic, deltaTime)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"273ecc4eeed7404ba2978b699363b0dfd6b69563f34540de6252be632dece6bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIWeapons.md::0000","path":"engine/reference/sim/ai/AIWeapons.md","title":"sim/ai/AIWeapons.js","description":"","kind":"reference","source":"engine/sim/ai/AIWeapons.js","updated":"","headings":["sim/ai/AIWeapons.js","Functions","fireHitscan(origin, direction, weapon, targets, obstacles = [])","fireShotgun(origin, direction, weapon, targets, obstacles = [])","calculateDamageFalloff(baseDamage, distance, rangeModifier = 0.98)","createProjectile(position, velocity, config = {})","updateProjectile(projectile, deltaTimeSec)","getProjectilePositionAtTime(projectile, timeSec)","checkProjectileCollision(projectile, targets, projectileRadius = 0.5)","isInCircularAoE(targetPos, center, radius)","calculateAoEDamage(baseDamage, dist, radius)","resolveCircularAoE(center, radius, baseDamage, targets)","isInConeAoE(targetPos, origin, direction, halfAngleRad, range)","resolveConeAoE(origin, direction, coneAngleDeg, range, baseDamage, targets)","createBeamWeapon(config = {})","updateBeamTracking(beam, origin, targetPos, deltaTimeSec)","fireBeam(beam, origin, targets, obstacles, deltaTimeSec)","createGrenade(position, velocity, config = {})","updateGrenade(grenade, deltaTimeSec, surfaces = [])","calculateGrenadeLaunchVelocity(start, target, gravity, launchAngleDeg)","createWeaponController()","addWeapon(controller, name, config)","selectBestWeapon(controller, params)","canFireWeapon(controller, weaponName, now)","recordWeaponFire(controller, weaponName, now)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Fire a hitscan weapon (instant ray hit) Parameters: (number[]) — [x, y, z] muzzle position (number[]) — [x, y, z] aim direction (Object) — Weapon config Returns: {hit: boolean, targetId, damage, point, distance} Fire a shotgun (multiple pellets in ring pattern) Parameters: (number[]) — [x, y, z] (number[]) — [x, y, z] (Object) — Weapon config (Array) — Targets (Array) — Obstacles Returns: Array of hit results per pellet Calculate damage falloff (CS:GO style exponential) Parameters: (number) — Base weapon damage (number) — Distance to target (number) — Falloff rate (0.98 = 2% per 500 units) Returns: Final damage Create a projectile entity Parameters: (number[]) — [x, y, z] spawn position (number[]) — [x, y, z] initial velocity (Object) — Projectile config Returns: Projectile state Update projectile position (kinematic motion) Parameters: (Object) — Projectile state (number) — Delta time in seconds Get projectile position at future time (prediction) P(t) = P₀ + V₀×t + ½×g×t² Parameters: (Object) — Projectile state (number) — Time in seconds Returns: [x, y, z] predicted position Check projectile collision with targets Parameters: (Object) — Projectile state (number) — Projectile hitbox radius Returns: {targetId, point} or null Check if target is in circular AoE Parameters: (number[]) — [x, y, z] (number[]) — [x, y, z] AoE center (number) — AoE radius Returns: True if in AoE Calculate AoE damage with quadratic falloff Parameters: (number) — Base damage at center (number) — Distance from center (number) — AoE radius Returns: Damage amount Get all targets in circular AoE with","contentHash":"5df37921b25b03db5efe8cdd6c021851178d3ed31954085c16b5063352bc9add"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIWeapons.md::0001","path":"engine/reference/sim/ai/AIWeapons.md","title":"sim/ai/AIWeapons.js","description":"","kind":"reference","source":"engine/sim/ai/AIWeapons.js","updated":"","headings":["sim/ai/AIWeapons.js","Functions","fireHitscan(origin, direction, weapon, targets, obstacles = [])","fireShotgun(origin, direction, weapon, targets, obstacles = [])","calculateDamageFalloff(baseDamage, distance, rangeModifier = 0.98)","createProjectile(position, velocity, config = {})","updateProjectile(projectile, deltaTimeSec)","getProjectilePositionAtTime(projectile, timeSec)","checkProjectileCollision(projectile, targets, projectileRadius = 0.5)","isInCircularAoE(targetPos, center, radius)","calculateAoEDamage(baseDamage, dist, radius)","resolveCircularAoE(center, radius, baseDamage, targets)","isInConeAoE(targetPos, origin, direction, halfAngleRad, range)","resolveConeAoE(origin, direction, coneAngleDeg, range, baseDamage, targets)","createBeamWeapon(config = {})","updateBeamTracking(beam, origin, targetPos, deltaTimeSec)","fireBeam(beam, origin, targets, obstacles, deltaTimeSec)","createGrenade(position, velocity, config = {})","updateGrenade(grenade, deltaTimeSec, surfaces = [])","calculateGrenadeLaunchVelocity(start, target, gravity, launchAngleDeg)","createWeaponController()","addWeapon(controller, name, config)","selectBestWeapon(controller, params)","canFireWeapon(controller, weaponName, now)","recordWeaponFire(controller, weaponName, now)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"Parameters: (number) — Base damage at center (number) — Distance from center (number) — AoE radius Returns: Damage amount Get all targets in circular AoE with damage Parameters: (number[]) — [x, y, z] AoE center (number) — AoE radius (number) — Base damage Returns: } Affected targets Check if target is in cone AoE Parameters: (number[]) — [x, y, z] (number[]) — [x, y, z] cone origin (number[]) — [x, y, z] cone direction (number) — Half cone angle in radians (number) — Cone range Returns: True if in cone Get all targets in cone AoE Parameters: (number[]) — [x, y, z] (number[]) — [x, y, z] (number) — Full cone angle in degrees (number) — Cone range (number) — Base damage Returns: } Affected targets Create a beam weapon state Parameters: (Object) — Beam config Returns: Beam weapon state Update beam weapon direction toward target Parameters: (Object) — Beam weapon state (number[]) — [x, y, z] beam origin (number[]) — [x, y, z] target position (number) — Delta time in seconds Fire beam weapon (continuous damage) Parameters: (Object) — Beam weapon state (number[]) — [x, y, z] (Array) — Targets (Array) — Obstacles (number) — Delta time Returns: {hit, targetId, damage, endPoint} Create a grenade projectile Parameters: (number[]) — [x, y, z] spawn position (number[]) — [x, y, z] initial velocity (Object) — Grenade config Returns: Grenade state Update grenade physics Parameters: (Object) — Grenade state (number) — Delta time in seconds Returns: True if exploded Calculate grenade launch velocity to hit target Parameters: (number[]) — [x, y, z] throw position (number[]) — [x, y, z] target position (number) — Gravity value (number) — Launch angle in degrees Returns: [x, y, z] launch velocity or null if impossible Create an NPC weapon controller for multi weapon management Returns:","contentHash":"e8782edd9b3f95a500d0f32884e18c45101d6f5c94268ab2783192302bd9e9ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIWeapons.md::0002","path":"engine/reference/sim/ai/AIWeapons.md","title":"sim/ai/AIWeapons.js","description":"","kind":"reference","source":"engine/sim/ai/AIWeapons.js","updated":"","headings":["sim/ai/AIWeapons.js","Functions","fireHitscan(origin, direction, weapon, targets, obstacles = [])","fireShotgun(origin, direction, weapon, targets, obstacles = [])","calculateDamageFalloff(baseDamage, distance, rangeModifier = 0.98)","createProjectile(position, velocity, config = {})","updateProjectile(projectile, deltaTimeSec)","getProjectilePositionAtTime(projectile, timeSec)","checkProjectileCollision(projectile, targets, projectileRadius = 0.5)","isInCircularAoE(targetPos, center, radius)","calculateAoEDamage(baseDamage, dist, radius)","resolveCircularAoE(center, radius, baseDamage, targets)","isInConeAoE(targetPos, origin, direction, halfAngleRad, range)","resolveConeAoE(origin, direction, coneAngleDeg, range, baseDamage, targets)","createBeamWeapon(config = {})","updateBeamTracking(beam, origin, targetPos, deltaTimeSec)","fireBeam(beam, origin, targets, obstacles, deltaTimeSec)","createGrenade(position, velocity, config = {})","updateGrenade(grenade, deltaTimeSec, surfaces = [])","calculateGrenadeLaunchVelocity(start, target, gravity, launchAngleDeg)","createWeaponController()","addWeapon(controller, name, config)","selectBestWeapon(controller, params)","canFireWeapon(controller, weaponName, now)","recordWeaponFire(controller, weaponName, now)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"— Launch angle in degrees Returns: [x, y, z] launch velocity or null if impossible Create an NPC weapon controller for multi weapon management Returns: Weapon controller Add weapon to controller Parameters: (Object) — Weapon controller (string) — Weapon name (Object) — Weapon config Select best weapon for situation Parameters: (Object) — Weapon controller (Object) — Selection parameters (number) — Distance to target (boolean) — Whether LOS is clear (boolean) — Whether multiple targets are present Returns: Best weapon name Check if weapon can fire (fire rate cooldown) Parameters: (Object) — Weapon controller (string) — Weapon to check (number) — Current timestamp (ms) Returns: True if can fire Record wea","contentHash":"5549f79a4e9b0251bd9548ec502fdda9ce2d6c908ee9fb657c3f31d103d1ee2e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIWorld.md::0000","path":"engine/reference/sim/ai/AIWorld.md","title":"sim/ai/AIWorld.js","description":"","kind":"reference","source":"engine/sim/ai/AIWorld.js","updated":"","headings":["sim/ai/AIWorld.js","Functions","createWorldTime(config = {})","advanceTime(time, realDeltaSeconds)","getSeason(time)","getDayPhase(time)","formatTime(time)","formatDate(time)","createWeatherSystem(config = {})","updateWeather(weather, time, deltaHours)","getWeatherEffects(weather)","createWorldEvent(config)","createEventManager()","scheduleEvent(manager, event)","updateEvents(manager, currentTime, deltaHours)","createWorldState(config = {})","updateWorldState(world, realDeltaSeconds)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create world time system Parameters: (Object) — Time config Returns: World time Advance world time Parameters: (Object) — World time (number) — Real seconds elapsed Returns: } Get current season Parameters: (Object) — World time Returns: Season Get day/night phase Parameters: (Object) — World time Returns: } Get formatted time string Parameters: (Object) — World time Returns: Formatted time Get formatted date string Parameters: (Object) — World time Returns: Formatted date Create weather system Parameters: (Object) — Weather config Returns: Weather system Update weather Parameters: (Object) — Weather system (Object) — World time (number) — Hours elapsed Get weather effects on gameplay Parameters: (Object) — Weather system Returns: Gameplay modifiers Create world event Parameters: (Object) — Event config Returns: World event Create world event manager Returns: Event manager Schedule world event Parameters: (Object) — Event manager (Object) — Event to schedule Update world events Parameters: (Object) — Event manager (number) — Current game time (total hours) (number) — Hours elapsed Returns: } Create complete world state Parameters: (Object) — Configuration Returns: World state Update world state Parameters: (Object) — World state (number) — Real seconds elapsed Returns: Changes that occurred Constants — Seasons — Days of week — Months — Weather types — Event types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and","contentHash":"e533ac421f0213f4c0a5ed763dc73cb50b887f3d14830e1302bbbe669eaed57b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/AIWorld.md::0001","path":"engine/reference/sim/ai/AIWorld.md","title":"sim/ai/AIWorld.js","description":"","kind":"reference","source":"engine/sim/ai/AIWorld.js","updated":"","headings":["sim/ai/AIWorld.js","Functions","createWorldTime(config = {})","advanceTime(time, realDeltaSeconds)","getSeason(time)","getDayPhase(time)","formatTime(time)","formatDate(time)","createWeatherSystem(config = {})","updateWeather(weather, time, deltaHours)","getWeatherEffects(weather)","createWorldEvent(config)","createEventManager()","scheduleEvent(manager, event)","updateEvents(manager, currentTime, deltaHours)","createWorldState(config = {})","updateWorldState(world, realDeltaSeconds)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"09f7ab3994b93a456722dd2047e932bc3ba1366f5865870ef08084363ee89ba2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/Blackboard.md::0000","path":"engine/reference/sim/ai/Blackboard.md","title":"sim/ai/Blackboard.js","description":"","kind":"reference","source":"engine/sim/ai/Blackboard.js","updated":"","headings":["sim/ai/Blackboard.js","Functions","createBlackboard(initial = {})","getBlackboardValue(blackboard, key, defaultValue)","setBlackboardValue(blackboard, key, value)","removeBlackboardValue(blackboard, key)","clearBlackboard(blackboard)","exportBlackboard(blackboard)","createBlackboardRegistry()","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/NavGrid.md::0000","path":"engine/reference/sim/ai/NavGrid.md","title":"sim/ai/NavGrid.js","description":"","kind":"reference","source":"engine/sim/ai/NavGrid.js","updated":"","headings":["sim/ai/NavGrid.js","Functions","createNavGrid(options = {})","destroyNavGrid(grid)","worldToGrid(grid, worldX, worldZ)","gridToWorld(grid, gx, gz)","isCellWalkable(grid, gx, gz)","setCellWalkable(grid, gx, gz, value)","bakeNavGridFromWorldSim(grid, worldSim, options = {})","axialToCube(q, r)","cubeToAxial(q, r, s)","hexToWorld(q, r, size = 1)","worldToHex(x, z, size = 1)","cubeRound(q, r, s)","hexNeighbors(q, r, s)","hexDistance(q1, r1, s1, q2, r2, s2)","hexRange(q, r, range)","hexRing(q, r, radius)","hexLine(q1, r1, q2, r2)","createHexGrid(radius, hexSize = 1)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Convert axial (q, r) to cube (q, r, s) coordinates Convert cube to axial coordinates Convert cube coordinates to world position (pointy top hexes) Parameters: (number) — Cube Q coordinate (number) — Cube R coordinate (number) — Hex size (center to corner) Returns: } World position Convert world position to cube hex coordinates Parameters: (number) — World X (number) — World Z (number) — Hex size Returns: } Cube coordinates (rounded) Round fractional cube coordinates to nearest hex Get 6 hex neighbors in cube coordinates Calculate hex distance in cube coordinates Get all hexes within range of center Parameters: (number) — Center Q (number) — Center R (number) — Range in hex steps Returns: Array of {q, r, s} coordinates Get hex ring at exact distance from center Parameters: (number) — Center Q (number) — Center R (number) — Ring radius Returns: Array of {q, r, s} coordinates Linear interpolation between two hexes (for line drawing) Parameters: (number) — Start Q (number) — Start R (number) — End Q (number) — End R Returns: Array of {q, r, s} coordinates along line Create hex grid for strategy layer Parameters: (number) — Grid radius in hexes (number) — Hex size in world units Returns: Hex grid data structure <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection","contentHash":"66e3406170e867220e8b4af6ef21222cd9b787a3717ab1a46a9cb52c57f96170"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/NavGrid.md::0001","path":"engine/reference/sim/ai/NavGrid.md","title":"sim/ai/NavGrid.js","description":"","kind":"reference","source":"engine/sim/ai/NavGrid.js","updated":"","headings":["sim/ai/NavGrid.js","Functions","createNavGrid(options = {})","destroyNavGrid(grid)","worldToGrid(grid, worldX, worldZ)","gridToWorld(grid, gx, gz)","isCellWalkable(grid, gx, gz)","setCellWalkable(grid, gx, gz, value)","bakeNavGridFromWorldSim(grid, worldSim, options = {})","axialToCube(q, r)","cubeToAxial(q, r, s)","hexToWorld(q, r, size = 1)","worldToHex(x, z, size = 1)","cubeRound(q, r, s)","hexNeighbors(q, r, s)","hexDistance(q1, r1, s1, q2, r2, s2)","hexRange(q, r, range)","hexRing(q, r, radius)","hexLine(q1, r1, q2, r2)","createHexGrid(radius, hexSize = 1)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"4b75f062549181d3c95937e46e242523494767c704d00b749633785994b4d2a4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/NavWorld.md::0000","path":"engine/reference/sim/ai/NavWorld.md","title":"sim/ai/NavWorld.js","description":"","kind":"reference","source":"engine/sim/ai/NavWorld.js","updated":"","headings":["sim/ai/NavWorld.js","Functions","createNavWorld(options = {})","destroyNavWorld(navWorld)","addGridLayer(navWorld, name, grid)","getGridLayer(navWorld, name)","removeGridLayer(navWorld, name)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/Pathfinder.md::0000","path":"engine/reference/sim/ai/Pathfinder.md","title":"sim/ai/Pathfinder.js","description":"","kind":"reference","source":"engine/sim/ai/Pathfinder.js","updated":"","headings":["sim/ai/Pathfinder.js","Functions","findPathOnGrid(grid, start, goal, options = {})","findPathInNavWorld(navWorld, layerName, start, goal, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/SpatialHash.md::0000","path":"engine/reference/sim/ai/SpatialHash.md","title":"sim/ai/SpatialHash.js","description":"","kind":"reference","source":"engine/sim/ai/SpatialHash.js","updated":"","headings":["sim/ai/SpatialHash.js","Functions","createSpatialHash(cellSize = 10)","spatialHashInsert(hash, entity)","spatialHashRemove(hash, entityId)","spatialHashUpdate(hash, entity)","spatialHashQueryRadius(hash, x, y, z, radius)","spatialHashQueryRadius2D(hash, x, z, radius)","spatialHashQueryAABB(hash, min, max)","spatialHashKNearest(hash, x, y, z, k, maxRadius = 100)","spatialHashClear(hash)","spatialHashCount(hash)","spatialHashRebuild(hash, entities)","createObjectPool(factory, reset = null, initialSize = 100)","poolAcquire(pool)","poolRelease(pool, obj)","poolReleaseAll(pool)","poolStats(pool)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a 3D spatial hash grid Parameters: (number) — Size of each cell (should match typical query radius) Returns: Spatial hash instance Insert an entity into the spatial hash Parameters: (Object) — Spatial hash (Object) — Entity with {id, position: [x, y, z], ...} Remove an entity from the spatial hash Parameters: (Object) — Spatial hash (number string) — Entity ID Update an entity's position in the spatial hash Parameters: (Object) — Spatial hash (Object) — Entity with updated position Query all entities within radius of a point Parameters: (Object) — Spatial hash (number) — Query X (number) — Query Y (number) — Query Z (number) — Query radius Returns: Entities within radius Query all entities within radius (2D, ignores Y) Parameters: (Object) — Spatial hash (number) — Query X (number) — Query Z (number) — Query radius Returns: Entities within radius Query entities in an AABB Parameters: (Object) — Spatial hash (number[]) — [x, y, z] minimum corner (number[]) — [x, y, z] maximum corner Returns: Entities in AABB Get K nearest neighbors to a point Parameters: (Object) — Spatial hash (number) — Query X (number) — Query Y (number) — Query Z (number) — Number of neighbors (number) — Maximum search radius Returns: } K nearest entities with distances Clear all entities from the spatial hash Parameters: (Object) — Spatial hash Get total entity count Parameters: (Object) — Spatial hash Returns: Total entities Rebuild the spatial hash from an entity array Parameters: (Object) — Spatial hash (Array<Object ) — Array of entities with {id, position} Create an object pool for","contentHash":"1b92e32652a5fe6f8b606dfb0f2c29b05daee7720d3fcd6823f0df386a42f8af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/SpatialHash.md::0001","path":"engine/reference/sim/ai/SpatialHash.md","title":"sim/ai/SpatialHash.js","description":"","kind":"reference","source":"engine/sim/ai/SpatialHash.js","updated":"","headings":["sim/ai/SpatialHash.js","Functions","createSpatialHash(cellSize = 10)","spatialHashInsert(hash, entity)","spatialHashRemove(hash, entityId)","spatialHashUpdate(hash, entity)","spatialHashQueryRadius(hash, x, y, z, radius)","spatialHashQueryRadius2D(hash, x, z, radius)","spatialHashQueryAABB(hash, min, max)","spatialHashKNearest(hash, x, y, z, k, maxRadius = 100)","spatialHashClear(hash)","spatialHashCount(hash)","spatialHashRebuild(hash, entities)","createObjectPool(factory, reset = null, initialSize = 100)","poolAcquire(pool)","poolRelease(pool, obj)","poolReleaseAll(pool)","poolStats(pool)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"the spatial hash from an entity array Parameters: (Object) — Spatial hash (Array<Object ) — Array of entities with {id, position} Create an object pool for reducing GC pressure Parameters: (Function) — Factory function to create new objects (Function) — Function to reset an object before reuse (number) — Initial pool size Returns: Object pool Acquire an object from the pool Parameters: (Object) — Object pool Returns: Object from pool (or newly created) Release an object back to the pool Parameters: (Object) — Object pool (Object) — Object to release Release all active objects back to pool Parameters: (Object) — Object pool Get pool statistics Parameters: (Object) — Object pool Returns: } <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2ebd2e6b410f5111adacf1e3547643ee54d5ed6acb1ba160b81576ad8c36f059"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/index.md::0000","path":"engine/reference/sim/ai/index.md","title":"sim/ai/index.js","description":"","kind":"reference","source":"engine/sim/ai/index.js","updated":"","headings":["sim/ai/index.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere,","contentHash":"f3953410b3fc3e06d4e0f559367f50eb43fef553bacb7b7e3764f3e24db209af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/ai/index.md::0001","path":"engine/reference/sim/ai/index.md","title":"sim/ai/index.js","description":"","kind":"reference","source":"engine/sim/ai/index.js","updated":"","headings":["sim/ai/index.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"& Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"980c72940d7f08d5af1535ff20c566e815d1ab68fcd0177ab476b783003707a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/cloth/ClothSimWorld.md::0000","path":"engine/reference/sim/cloth/ClothSimWorld.md","title":"sim/cloth/ClothSimWorld.js","description":"","kind":"reference","source":"engine/sim/cloth/ClothSimWorld.js","updated":"","headings":["sim/cloth/ClothSimWorld.js","Functions","createClothSimWorld(options = {})","destroyClothSimWorld(world)","addClothInstance(world, descriptor)","removeClothInstance(world, instanceId)","stepClothSimWorld(world, deltaSeconds, options = {})","getClothInstanceRenderData(world, instanceId)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FDTDSolver.md::0000","path":"engine/reference/sim/fluids/FDTDSolver.md","title":"sim/fluids/FDTDSolver.js","description":"","kind":"reference","source":"engine/sim/fluids/FDTDSolver.js","updated":"","headings":["sim/fluids/FDTDSolver.js","Classes","class YeeCell","class TimeVaryingMaterial","class FDTDSource","class FDTDSolver","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Yee cell field components Staggered grid: E at integers, H at half integers Method Signature Summary Time varying material properties Method Signature Summary Get permittivity at given time Get permeability at given time Check if point is within material region Method Signature Summary Get source value at time t Method Signature Summary Compute stable time step via CFL condition Initialize GPU resources Add time varying material Add source Schedule time reflection event Create photonic time crystal Update uniforms before step Update time varying materials Inject sources Perform one FDTD time step Run multiple steps Get field data for visualization Reset simulation Get simulation info Enforce CFL condition for numerical stability CFL: c dt <= dx / sqrt(dims) for FDTD Get minimum stable epsilon for given mu Compute number of sub steps needed for stability with fast media Run with adaptive sub stepping for stability Saturate field value to prevent NaN/Inf explosion Uses soft clipping: E sat tanh(E / E sat) Saturate 3D vector field Check for NaN/Inf in field data and recover Get stability diagnostics Auto configure dt for stability Constants — Physical constants — Material types — Boundary conditions — Source types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision","contentHash":"9cc3b6a6b945b360b5c0130570156765b2be92e010d6007fc0dfc833d8a23a49"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FDTDSolver.md::0001","path":"engine/reference/sim/fluids/FDTDSolver.md","title":"sim/fluids/FDTDSolver.js","description":"","kind":"reference","source":"engine/sim/fluids/FDTDSolver.js","updated":"","headings":["sim/fluids/FDTDSolver.js","Classes","class YeeCell","class TimeVaryingMaterial","class FDTDSource","class FDTDSolver","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"7ea398bac1f7e20a3b5c20591e21f5316c9bb0dc536a25659bad6b9197e6652f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidBoundary.md::0000","path":"engine/reference/sim/fluids/FluidBoundary.md","title":"sim/fluids/FluidBoundary.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidBoundary.js","updated":"","headings":["sim/fluids/FluidBoundary.js","Functions","createBoundaryShader(workgroupSize = 256)","createPressureSolveWithBoundaryShader(workgroupSize = 256)","createBoundaryPipeline(device, options = {})","applyBoundaries(encoder, config)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Generate WGSL shader for applying solid boundaries to velocity This should run after the pressure projection step Generate WGSL shader for pressure solve with solid boundaries Modifies the Jacobi iteration to handle solid cells Create boundary enforcement pipeline Apply solid boundaries to velocity field <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"3af2d6610496297f4e307ea3df55ac638adbf3f0b31ab4e517e5cadf82212186"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidConfig.md::0000","path":"engine/reference/sim/fluids/FluidConfig.md","title":"sim/fluids/FluidConfig.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidConfig.js","updated":"","headings":["sim/fluids/FluidConfig.js","Functions","normalizeFluidGridSize(input)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"8703f925943587ecc02c4ad93ed9505f2d51b73f9c0c7fad7f5411251768abcb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidCpuWorld.md::0000","path":"engine/reference/sim/fluids/FluidCpuWorld.md","title":"sim/fluids/FluidCpuWorld.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidCpuWorld.js","updated":"","headings":["sim/fluids/FluidCpuWorld.js","Functions","createFluidCpuWorld(options = {})","destroyFluidCpuWorld(world)","stepFluidCpuWorld(world, deltaSeconds)","applyFluidSourcesCpu(world, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidMPM.md::0000","path":"engine/reference/sim/fluids/FluidMPM.md","title":"sim/fluids/FluidMPM.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidMPM.js","updated":"","headings":["sim/fluids/FluidMPM.js","Functions","createMPMBuffers(device, gridSize, maxParticles)","destroyMPMBuffers(mpm)","createP2GShader(workgroupSize = 256)","createGridUpdateShader(workgroupSize = 256)","createG2PShader(workgroupSize = 256)","createMPMPipelines(device, options = {})","createMPMWorld(device, options = {})","destroyMPMWorld(world)","stepMPMWorld(world, particles, dt, options = {})","setMPMWorldBounds(world, worldMin, worldMax)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create MPM specific buffers for the fluid simulation Destroy MPM buffers Generate the P2G (Particle to Grid) compute shader Uses linear kernel (tent function) for simplicity Generate the Grid Update compute shader Converts accumulated momentum to velocity, applies forces and boundaries Generate the G2P (Grid to Particle) compute shader Create MPM compute pipelines Create a complete MPM simulation world Destroy MPM world Step the MPM simulation Parameters: (Object) — MPM world from createMPMWorld (Object) — Particle system with positionBuffer, velocityBuffer (number) — Time step (Object) — Additional options Update MPM world bounds <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"78d1b3b447b961d753c53f7a09ac51b644ddd04b8a3e814f419d1f19d732a0d4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidPhaseChange.md::0000","path":"engine/reference/sim/fluids/FluidPhaseChange.md","title":"sim/fluids/FluidPhaseChange.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidPhaseChange.js","updated":"","headings":["sim/fluids/FluidPhaseChange.js","Functions","createPhaseChangeBuffers(device, gridSize, maxParticles)","createSpellForce(position, direction, power, element)","createSpellForceShader(workgroupSize = 256)","createFreezeShader(workgroupSize = 256)","createCrystallizationShader(workgroupSize = 256)","createSolidCollisionShader(workgroupSize = 256)","createCrystalBondShader(workgroupSize = 256)","createBondConstraintShader(workgroupSize = 256)","createSolidCollisionPipeline(device, workgroupSize = 256)","createCrystalBondPipeline(device, workgroupSize = 256)","createBondConstraintPipeline(device, workgroupSize = 256)","stepSolidCollision(device, collisionPipeline, phaseBuffers, particleWorld, colliderData, roomBounds, dt, options = {})","stepCrystalBonds(device, bondPipeline, phaseBuffers, particleWorld, options = {})","stepBondConstraints(device, constraintPipeline, phaseBuffers, particleWorld, bondCount, options = {})","async readBondCount(device, phaseBuffers)","clearBonds(device, phaseBuffers)","stepCrystalSystem(device, systems, phaseBuffers, particleWorld, colliderData, roomBounds, dt, options = {})","createCrystalSystemPipelines(device, workgroupSize = 256)","async extractCrystalClusters(device, phaseBuffers, particleWorld, minClusterSize = 5)","createSeedInjectionParams(position, radius, seedStrength, temperature, magicSaturation)","createCrystallizationPipeline(device, workgroupSize = 256)","stepCrystallization(device, crystallization, phaseBuffers, particleWorld, dt, options = {})","injectFreezeSeeds(device, phaseBuffers, particleWorld, seedParams)","injectHeatSeeds(device, phaseBuffers, particleWorld, seedParams)","applyPhaseVisuals(device, phaseBuffers, particleWorld, options = {})","async extractFrozenShape(device, phaseChangeBuffers, gridSize, worldMin, cellSize)","clearFreezeRegion(device, phaseChangeBuffers)","injectMeltedFluid(device, fluidWorld, position, velocity, mass, radius)","destroyPhaseChangeBuffers(buffers)","destroyCrystalSystemPipelines(systems)","async extractFrozenParticles(device, phaseBuffer, positionBuffer, particleCount, minClusterSize = 5)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create phase change data structures Spell force injection point Generate shader for applying spell forces to fluid Generate shader for freeze effect (temperature based phase transition) 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 Generate shader for solid particle collision Frozen particles get rigid collision with world, entities, AND other particles Also handles temperature transfer on contact Generate shader for crystal bond formation Finds nearby frozen particles and creates rigid bonds between them Generate shader for bond constraint solving (Position Based Dynamics) Maintains rigid crystal structure by keeping bonded particles at fixed distances Create compute pipeline for solid particle collision Create compute pipeline for crystal bond formation Create compute pipeline for bond constraint solving Step the solid collision system Parameters: (GPUDevice) — No description in source JSDoc. (Object) — from createSolidCollisionPipeline (Object) — from createPhaseChangeBuffers (Object) — particle sim world (Object) — { buffer, count } entity colliders (Object) — { min: [x,y,z], max: [x,y,z] } (number) — delta time (Object) — collision params overrides Step the crystal bond formation system Step the bond constraint","contentHash":"788e4b93b43093c4cbde85364ce27e1f09a65160951b401472705ea0d2759ce0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidPhaseChange.md::0001","path":"engine/reference/sim/fluids/FluidPhaseChange.md","title":"sim/fluids/FluidPhaseChange.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidPhaseChange.js","updated":"","headings":["sim/fluids/FluidPhaseChange.js","Functions","createPhaseChangeBuffers(device, gridSize, maxParticles)","createSpellForce(position, direction, power, element)","createSpellForceShader(workgroupSize = 256)","createFreezeShader(workgroupSize = 256)","createCrystallizationShader(workgroupSize = 256)","createSolidCollisionShader(workgroupSize = 256)","createCrystalBondShader(workgroupSize = 256)","createBondConstraintShader(workgroupSize = 256)","createSolidCollisionPipeline(device, workgroupSize = 256)","createCrystalBondPipeline(device, workgroupSize = 256)","createBondConstraintPipeline(device, workgroupSize = 256)","stepSolidCollision(device, collisionPipeline, phaseBuffers, particleWorld, colliderData, roomBounds, dt, options = {})","stepCrystalBonds(device, bondPipeline, phaseBuffers, particleWorld, options = {})","stepBondConstraints(device, constraintPipeline, phaseBuffers, particleWorld, bondCount, options = {})","async readBondCount(device, phaseBuffers)","clearBonds(device, phaseBuffers)","stepCrystalSystem(device, systems, phaseBuffers, particleWorld, colliderData, roomBounds, dt, options = {})","createCrystalSystemPipelines(device, workgroupSize = 256)","async extractCrystalClusters(device, phaseBuffers, particleWorld, minClusterSize = 5)","createSeedInjectionParams(position, radius, seedStrength, temperature, magicSaturation)","createCrystallizationPipeline(device, workgroupSize = 256)","stepCrystallization(device, crystallization, phaseBuffers, particleWorld, dt, options = {})","injectFreezeSeeds(device, phaseBuffers, particleWorld, seedParams)","injectHeatSeeds(device, phaseBuffers, particleWorld, seedParams)","applyPhaseVisuals(device, phaseBuffers, particleWorld, options = {})","async extractFrozenShape(device, phaseChangeBuffers, gridSize, worldMin, cellSize)","clearFreezeRegion(device, phaseChangeBuffers)","injectMeltedFluid(device, fluidWorld, position, velocity, mass, radius)","destroyPhaseChangeBuffers(buffers)","destroyCrystalSystemPipelines(systems)","async extractFrozenParticles(device, phaseBuffer, positionBuffer, particleCount, minClusterSize = 5)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"— { min: [x,y,z], max: [x,y,z] } (number) — delta time (Object) — collision params overrides Step the crystal bond formation system Step the bond constraint solver (PBD) Run multiple iterations for stability Read bond count from GPU (async) Clear all bonds (for reset or when spawning rigid body) Full crystal system combines all steps Call this each frame to handle solidification, collision, bonding, and constraints Create all crystal system pipelines at once Extract connected crystal clusters from bonds for rigid body spawning Uses Union Find algorithm to identify connected components Inject seed particles at a position (ice spell impact, magic anchor, etc.) Create compute pipeline for crystallization chain reaction Step the crystallization system run compute pass to propagate freezing Inject freeze seeds at a world position (for ice spell impact) Affects particles within radius sets their temp/magic/seed values Apply visual effects based on phase state (color frozen particles blue/white) Call this after stepCrystallization to update particle rendering Extract frozen region as convex hull for rigid body creation This runs on CPU after GPU freeze pass Clear freeze region after rigid body is spawned Inject mass/momentum when melting a rigid body Destroy phase change buffers Destroy crystal system pipelines Extract frozen particle cluster for rigid body spawning Returns particles that are FROZEN phase and form a connected cluster Constants — Phase states for fluid cells/particles — 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 — Crystal bond attributes (per","contentHash":"9aea237b77218ba5c2492d82b9ef580d685d68bb5d91993930488115ad341a0b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidPhaseChange.md::0002","path":"engine/reference/sim/fluids/FluidPhaseChange.md","title":"sim/fluids/FluidPhaseChange.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidPhaseChange.js","updated":"","headings":["sim/fluids/FluidPhaseChange.js","Functions","createPhaseChangeBuffers(device, gridSize, maxParticles)","createSpellForce(position, direction, power, element)","createSpellForceShader(workgroupSize = 256)","createFreezeShader(workgroupSize = 256)","createCrystallizationShader(workgroupSize = 256)","createSolidCollisionShader(workgroupSize = 256)","createCrystalBondShader(workgroupSize = 256)","createBondConstraintShader(workgroupSize = 256)","createSolidCollisionPipeline(device, workgroupSize = 256)","createCrystalBondPipeline(device, workgroupSize = 256)","createBondConstraintPipeline(device, workgroupSize = 256)","stepSolidCollision(device, collisionPipeline, phaseBuffers, particleWorld, colliderData, roomBounds, dt, options = {})","stepCrystalBonds(device, bondPipeline, phaseBuffers, particleWorld, options = {})","stepBondConstraints(device, constraintPipeline, phaseBuffers, particleWorld, bondCount, options = {})","async readBondCount(device, phaseBuffers)","clearBonds(device, phaseBuffers)","stepCrystalSystem(device, systems, phaseBuffers, particleWorld, colliderData, roomBounds, dt, options = {})","createCrystalSystemPipelines(device, workgroupSize = 256)","async extractCrystalClusters(device, phaseBuffers, particleWorld, minClusterSize = 5)","createSeedInjectionParams(position, radius, seedStrength, temperature, magicSaturation)","createCrystallizationPipeline(device, workgroupSize = 256)","stepCrystallization(device, crystallization, phaseBuffers, particleWorld, dt, options = {})","injectFreezeSeeds(device, phaseBuffers, particleWorld, seedParams)","injectHeatSeeds(device, phaseBuffers, particleWorld, seedParams)","applyPhaseVisuals(device, phaseBuffers, particleWorld, options = {})","async extractFrozenShape(device, phaseChangeBuffers, gridSize, worldMin, cellSize)","clearFreezeRegion(device, phaseChangeBuffers)","injectMeltedFluid(device, fluidWorld, position, velocity, mass, radius)","destroyPhaseChangeBuffers(buffers)","destroyCrystalSystemPipelines(systems)","async extractFrozenParticles(device, phaseBuffer, positionBuffer, particleCount, minClusterSize = 5)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"magic\" has accumulated solidPhase: 0=fluid, 1=freezing, 2=frozen seedStrength: If 0, this particle spreads solidification — 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) — Default crystallization parameters tuned for fast freeze, slow melt — Default solid collision parameters <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh),","contentHash":"e1fa1a81a30df689a9066b6e770df8af972e4193f75ad8e82f8f2d92c21ec97d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidSimWorld.md::0000","path":"engine/reference/sim/fluids/FluidSimWorld.md","title":"sim/fluids/FluidSimWorld.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidSimWorld.js","updated":"","headings":["sim/fluids/FluidSimWorld.js","Functions","async createFluidSimWorld(gpuDevice, options = {})","destroyFluidSimWorld(world)","clearFluidSimWorld(world)","stepFluidSimWorld(world, deltaSeconds, options = {})","clearFluidDensity(world, options = {})","async initFluidSimWorldLazy(options)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. Clear the density and color buffers to zero. Used in particle as smoke mode to reset before splatting particle positions/colors. Parameters: (Object) — Fluid sim world Initialize fluid sim world lazily with bind group creation for smoke rendering. This is a convenience function that handles the full setup sequence. Parameters: (Object) — Initialization options (Object) — GPU device wrapper (Object) — Smoke state object to populate (Object) — Particle state (for attaching fluid) (Array) — Grid dimensions [x, y, z] (default: [128, 96, 128]) (number) — Compute workgroup size (default: 64) (number) — Pressure solve iterations (default: 8) (Function) — Function to attach fluid to particles (Function) — Optional logger Returns: Created fluid world <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks","contentHash":"abd12c94070b0c23e2b2a5c7e2234a306fd79dcac3638302829b8ac359676574"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidSimWorld.md::0001","path":"engine/reference/sim/fluids/FluidSimWorld.md","title":"sim/fluids/FluidSimWorld.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidSimWorld.js","updated":"","headings":["sim/fluids/FluidSimWorld.js","Functions","async createFluidSimWorld(gpuDevice, options = {})","destroyFluidSimWorld(world)","clearFluidSimWorld(world)","stepFluidSimWorld(world, deltaSeconds, options = {})","clearFluidDensity(world, options = {})","async initFluidSimWorldLazy(options)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"bbd1233a8772820caad07e7973d8840ea4d8650b3e9aebc2e10550a067dc888c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidSimulation.md::0000","path":"engine/reference/sim/fluids/FluidSimulation.md","title":"sim/fluids/FluidSimulation.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidSimulation.js","updated":"","headings":["sim/fluids/FluidSimulation.js","Classes","class FluidMetadata","class FluidSimulator","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Per voxel simulation metadata Stored separately from material ID to avoid expanding chunks Method Signature Summary Mark a voxel as active (needs simulation) Check if a voxel was updated this frame Mark voxel as updated this frame Clear all update flags for new frame Clear dirty rectangles after processing Method Signature Summary Detect monitor refresh rate and set target Set target FPS manually (e.g., from user settings) Auto detect refresh rate from actual frame times Call this after a few frames to refine the target Update FPS tracking and adapt budget Deterministic random based on position and frame Ensures same behavior on all clients for multiplayer Mark a voxel position as needing fluid simulation Only activates actual fluid materials (liquid, powder, gas, fire) Activate fluid materials in a chunk that are at the surface (adjacent to air) Only surface fluids need simulation buried fluids are stable Rebuild dirty rectangles from active voxels (limited for performance) Rotates through active voxels to ensure all get processed eventually Main simulation tick call once per frame Process a dirty rectangle within a chunk Updates from bottom to top for proper gravity Get voxel at world position (handles chunk boundaries) Set voxel at world position (handles chunk boundaries) Swap two voxels (for falling/rising) Check if material A can displace material B (based on density) Update powder (sand, gravel) Falls down, slides diagonally if blocked Update liquid (water, lava) Falls down, spreads horizontally Update gas (steam, smoke) Rises up, spreads horizontally Update fire","contentHash":"7d01034b0ac67d939e86db58f8a5501c500055aeb7ad62298cab5aa2bc872c00"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidSimulation.md::0001","path":"engine/reference/sim/fluids/FluidSimulation.md","title":"sim/fluids/FluidSimulation.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidSimulation.js","updated":"","headings":["sim/fluids/FluidSimulation.js","Classes","class FluidMetadata","class FluidSimulator","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"slides diagonally if blocked Update liquid (water, lava) Falls down, spreads horizontally Update gas (steam, smoke) Rises up, spreads horizontally Update fire (energy) Spreads to flammable neighbors, has lifetime Update acid (special liquid that corrodes) Check for special chemical reactions between materials Called when materials are adjacent Load configuration from engine.cfg section Constants — 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) <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"c82dffdb3fd82c9d200b438e44e72700a8f39415b22a54ea079084870a983237"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidSourceSplat.md::0000","path":"engine/reference/sim/fluids/FluidSourceSplat.md","title":"sim/fluids/FluidSourceSplat.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidSourceSplat.js","updated":"","headings":["sim/fluids/FluidSourceSplat.js","Functions","async splatFluidSources(fluidWorld, gpuDevice, options = {})","disposeFluidSourceSplat(device)","splatParticleDensity(fluidWorld, particleWorld, options = {})","disposeParticleSplat(device)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. Parameters: (Object) — Fluid simulation world with densityBuffer (Object) — Particle simulation world with position/velocity/meta buffers (Object) — { radiusScale, densityScale, worldMin, worldMax, encoder, logger } <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"457bb4bc182d4a334fd924174d22890fd0f8cd70e6b358c4328aaf96a3a2fde8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/FluidWorldDomain.md::0000","path":"engine/reference/sim/fluids/FluidWorldDomain.md","title":"sim/fluids/FluidWorldDomain.js","description":"","kind":"reference","source":"engine/sim/fluids/FluidWorldDomain.js","updated":"","headings":["sim/fluids/FluidWorldDomain.js","Functions","buildFluidDomainFromColliders(ecsWorld, options = {})","createSolidMaskTexture(device, domain, gridSize)","createWorldFluidDomain(device, ecsWorld, options = {})","updateWorldFluidDomainParams(worldDomain)","destroyWorldFluidDomain(worldDomain)","rebuildSolidMask(worldDomain, ecsWorld)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Build fluid domain from ECS world colliders Parameters: (Object) — ECS world with component storage (Object) — Configuration options Returns: Domain info with bounds and collider list Create a 3D solid mask texture from colliders Each cell is 0 (fluid) or 1 (solid) Create a world fluid domain with solid mask Update world fluid domain params buffer Destroy world fluid domain Rebuild solid mask when scene changes <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9950585e9377e4f7beaf727352bbf7b4703b6e54ace80d34402fbbff6eb28ce2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/PhasorRays.md::0000","path":"engine/reference/sim/fluids/PhasorRays.md","title":"sim/fluids/PhasorRays.js","description":"","kind":"reference","source":"engine/sim/fluids/PhasorRays.js","updated":"","headings":["sim/fluids/PhasorRays.js","Classes","class PhasorRay","class RayMaterialInteraction","class PhasorRayTracer","Functions","frequencyToColor(frequency)","wavelengthToColor(wavelength)","dopplerColor(baseFrequency, observedFrequency)","generateRayVisualization(rays, time)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Ray with wave properties (phasor representation) Method Signature Summary Advance ray by distance, accumulating phase Get wavelength in current medium Get wave number k Get complex phasor value Get instantaneous E field (for visualization) Clone ray Terminate ray Method Signature Summary Compute Fresnel coefficients for interface Compute time interface coefficients When ε changes: t = (n1+n2)/(2n2), r = (n2 n1)/(2n2) Compute reflected direction Compute refracted direction (Snell's law) Compute time reflected direction (reverses!) Method Signature Summary Add temporal material region Spawn a new ray Trace all active rays for one step Handle time reflection (temporal boundary) Creates backward propagating ray while preserving frequency Get all rays for visualization Get time reflected rays only Clear all rays Functions Convert frequency to visible color (RGB) Parameters: (number) — Frequency in Hz Returns: RGB values [0 1] Convert wavelength to color Parameters: (number) — Wavelength in meters Apply Doppler shift color Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: } Generate visualization data for rays Parameters: (PhasorRay[]) — No description in source JSDoc. (number) — No description in source JSDoc. Constants — Base visible light frequencies — Ray interaction types — Ray state Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU","contentHash":"2d3699897f27b975112b4006b1846f99381b5c561145b453570d9489e764e4cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/PhasorRays.md::0001","path":"engine/reference/sim/fluids/PhasorRays.md","title":"sim/fluids/PhasorRays.js","description":"","kind":"reference","source":"engine/sim/fluids/PhasorRays.js","updated":"","headings":["sim/fluids/PhasorRays.js","Classes","class PhasorRay","class RayMaterialInteraction","class PhasorRayTracer","Functions","frequencyToColor(frequency)","wavelengthToColor(wavelength)","dopplerColor(baseFrequency, observedFrequency)","generateRayVisualization(rays, time)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"778db4b16f998f99482be8d70f6afc6df5cfd0294bfa91ffec153215c71b3846"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/PhotonicCrystal.md::0000","path":"engine/reference/sim/fluids/PhotonicCrystal.md","title":"sim/fluids/PhotonicCrystal.js","description":"","kind":"reference","source":"engine/sim/fluids/PhotonicCrystal.js","updated":"","headings":["sim/fluids/PhotonicCrystal.js","Classes","class DispersionCalculator","class PhotonicTimeCrystal","class TimeReflectionEvent","class TemporalCloak","class PhotonicCrystalManager","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Computes dispersion relation for time varying medium For photonic time crystal: ω(k) has gaps in k space (momentum gaps) Method Signature Summary Get effective permittivity at time t ε(t) = ε₀(1 + Δε/ε₀ · cos(ωₘt)) Check if frequency/momentum is in band gap Temporal band gaps occur at k = n·ωₘ/(2c) Compute Floquet exponent (Bloch theorem in time) For determining band structure Floquet theorem: E(t) = e^(μt) · P(t) where μ is the Floquet exponent and P(t) is periodic Real μ → exponential growth/decay (in band gap) Imaginary μ → oscillatory (propagating wave) Get band gap boundaries for nth gap Compute parametric amplification factor Get transmission/reflection coefficients for time interface When ε₁ → ε₂ suddenly Method Signature Summary Get permittivity at position and time Check if point is inside crystal Activate the crystal (start modulation) Deactivate the crystal Check if wave at given frequency/momentum will be in band gap Get expected effects for incoming wave Create TimeVaryingMaterial for FDTD solver Get visualization data Apply parametric amplification to field amplitude with saturation Prevents numerical explosion (NaN/Inf) from exponential growth Soft clipping saturation to prevent NaN/Inf explosion Uses tanh for smooth limiting: E final = E sat tanh(E / E sat) Saturate a 3D vector field Get stability info for current parameters Get Floquet analysis for debugging Represents a sudden change in ε that creates time reflection Method Signature Summary Get permittivity at time t Check if point is in event region Trigger the time reflection Get expected output waves","contentHash":"8c87e0f9a06d3383d82661477a871874ac24b440a280d22d4444d09cd7763560"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/PhotonicCrystal.md::0001","path":"engine/reference/sim/fluids/PhotonicCrystal.md","title":"sim/fluids/PhotonicCrystal.js","description":"","kind":"reference","source":"engine/sim/fluids/PhotonicCrystal.js","updated":"","headings":["sim/fluids/PhotonicCrystal.js","Classes","class DispersionCalculator","class PhotonicTimeCrystal","class TimeReflectionEvent","class TemporalCloak","class PhotonicCrystalManager","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"time reflection Method Signature Summary Get permittivity at time t Check if point is in event region Trigger the time reflection Get expected output waves from input wave Create TimeVaryingMaterial for FDTD Temporal cloaking using time lens approach Opens and closes a gap in the time domain Method Signature Summary Get permittivity for temporal cloaking Uses time lens approach: slow down light before gap, speed up after Check if event at given time would be cloaked Method Signature Summary Add a photonic time crystal Create and add a new crystal Schedule a time reflection event Create temporal cloak Update all photonic elements Get all active effects at a position Get visualization data for all elements Remove all elements Constants — Photonic crystal types — Modulation waveforms — Time crystal effects Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"052888104089cf527b82156f7bd0fcff9c1bd7947d5a6c99eaf0de1ccb246b5c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/VolumeFieldSmooth.md::0000","path":"engine/reference/sim/fluids/VolumeFieldSmooth.md","title":"sim/fluids/VolumeFieldSmooth.js","description":"","kind":"reference","source":"engine/sim/fluids/VolumeFieldSmooth.js","updated":"","headings":["sim/fluids/VolumeFieldSmooth.js","Functions","smoothVolumeField(world, options = {})","disposeVolumeFieldSmooth(device)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/VolumeFieldWorld.md::0000","path":"engine/reference/sim/fluids/VolumeFieldWorld.md","title":"sim/fluids/VolumeFieldWorld.js","description":"","kind":"reference","source":"engine/sim/fluids/VolumeFieldWorld.js","updated":"","headings":["sim/fluids/VolumeFieldWorld.js","Functions","async createVolumeFieldWorld(gpuDevice, options = {})","destroyVolumeFieldWorld(world)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/fluids/index.md::0000","path":"engine/reference/sim/fluids/index.md","title":"sim/fluids/index.js","description":"","kind":"reference","source":"engine/sim/fluids/index.js","updated":"","headings":["sim/fluids/index.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"7b11ec2f3373bfabebbff7b93cd8a1a7a8e710a95fc5721868771d4f2ab6ebc4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/AsyncSnapshotManager.md::0000","path":"engine/reference/sim/particles/AsyncSnapshotManager.md","title":"sim/particles/AsyncSnapshotManager.js","description":"","kind":"reference","source":"engine/sim/particles/AsyncSnapshotManager.js","updated":"","headings":["sim/particles/AsyncSnapshotManager.js","Functions","initAsyncSnapshotSystem(options = {})","async captureFrameAsync(snapshot, particleState, emitters, currentTimeMs)","captureFrameTripleBuffered(snapshot, particleState, emitters, currentTimeMs)","destroyAsyncSnapshot()","setSnapshotCaptureInterval(intervalMs)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Initialize the async snapshot system Capture a frame asynchronously GPU readback happens on main thread, compression in worker Triple buffered capture completely non blocking Returns immediately, GPU readback and worker processing happen in background Clean up Set capture interval (for quality/performance tradeoff) <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"5dc1b694b5600a9191d6068bad5a3f53c6a376fdb55faa9fc04f7490d627a47b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/AttachedParticlesCompute.md::0000","path":"engine/reference/sim/particles/AttachedParticlesCompute.md","title":"sim/particles/AttachedParticlesCompute.js","description":"","kind":"reference","source":"engine/sim/particles/AttachedParticlesCompute.js","updated":"","headings":["sim/particles/AttachedParticlesCompute.js","Functions","async updateAttachedParticlesIntoWorld(gpuDevice, meshBuffers, particleWorld, attachmentBuffer, options = {})","async updateAttachedParticlesIntoParticlesState(particles, meshBuffers, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/BoneAttachedParticlesCompute.md::0000","path":"engine/reference/sim/particles/BoneAttachedParticlesCompute.md","title":"sim/particles/BoneAttachedParticlesCompute.js","description":"","kind":"reference","source":"engine/sim/particles/BoneAttachedParticlesCompute.js","updated":"","headings":["sim/particles/BoneAttachedParticlesCompute.js","Functions","async assignParticlesToBonesIntoWorld(gpuDevice, boneBuffer, particleWorld, attachmentBuffer, options = {})","async updateBoneAttachedParticlesIntoWorld(gpuDevice, boneBuffer, particleWorld, attachmentBuffer, options = {})","async assignParticlesToBonesIntoParticlesState(particles, boneBuffer, options = {})","async updateBoneAttachedParticlesIntoParticlesState(particles, boneBuffer, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/CustomSDFCollisionBridge.md::0000","path":"engine/reference/sim/particles/CustomSDFCollisionBridge.md","title":"sim/particles/CustomSDFCollisionBridge.js","description":"","kind":"reference","source":"engine/sim/particles/CustomSDFCollisionBridge.js","updated":"","headings":["sim/particles/CustomSDFCollisionBridge.js","Functions","generateCustomEffectCollisionShader(registeredEffects)","createCustomEffectCollisionSystem(device, registeredEffects = [])","addCustomEffectCollider(system, device, effectId, center, radius, effectParams = [0, 0, 0, 0])","updateCustomEffectCollider(system, device, index, center, radius, effectParams)","initCustomEffectCollisionBindGroup(system, device, positionsBuffer, velocitiesBuffer, metaBuffer = null)","executeCustomEffectCollision(system, device, queue, particleCount, time, dt, bounciness = 0.3, friction = 0.1, fallbackRadius = 0.1)","rebuildCustomEffectCollisionSystem(device, existingSystem)","clearCustomEffectColliders(system)","destroyCustomEffectCollisionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Generate collision shader that uses the SAME SDF code as visual rendering This is the key to ensuring physics matches visuals exactly Create custom effect collision system Uses the same SDF code as visual rendering for exact physics/visual match Add a custom effect collider Uses the same effect ID as visual rendering for exact match Update collider transform (for moving effects) Initialize bind group with particle buffers Parameters: (object) — Custom effect collision system (GPUDevice) — WebGPU device (GPUBuffer) — Particle positions buffer (GPUBuffer) — Particle velocities buffer (GPUBuffer) — Particle meta buffer (for per particle size) Execute custom effect collision pass Parameters: (object) — Custom effect collision system (GPUDevice) — WebGPU device (GPUQueue) — WebGPU queue (number) — Number of particles (number) — Current simulation time (number) — Time step (number) — Bounce coefficient (0 1) (number) — Friction coefficient (0 1) (number) — Fallback particle radius if no meta buffer Rebuild collision system when effects change Call this after registering new custom effects Clear all colliders Destroy system and release GPU resources <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides","contentHash":"63d4fed2205197408b1b053b3eaf32d6a720651368a6b3f4e537bfa46ef6c19d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/CustomSDFCollisionBridge.md::0001","path":"engine/reference/sim/particles/CustomSDFCollisionBridge.md","title":"sim/particles/CustomSDFCollisionBridge.js","description":"","kind":"reference","source":"engine/sim/particles/CustomSDFCollisionBridge.js","updated":"","headings":["sim/particles/CustomSDFCollisionBridge.js","Functions","generateCustomEffectCollisionShader(registeredEffects)","createCustomEffectCollisionSystem(device, registeredEffects = [])","addCustomEffectCollider(system, device, effectId, center, radius, effectParams = [0, 0, 0, 0])","updateCustomEffectCollider(system, device, index, center, radius, effectParams)","initCustomEffectCollisionBindGroup(system, device, positionsBuffer, velocitiesBuffer, metaBuffer = null)","executeCustomEffectCollision(system, device, queue, particleCount, time, dt, bounciness = 0.3, friction = 0.1, fallbackRadius = 0.1)","rebuildCustomEffectCollisionSystem(device, existingSystem)","clearCustomEffectColliders(system)","destroyCustomEffectCollisionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"effects Clear all colliders Destroy system and release GPU resources <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9cce7622bc16dfd48beca426c70053bc88afa3e3ba6a0cfe0fd5e20ebdb35af2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/GPUParticleSorter.md::0000","path":"engine/reference/sim/particles/GPUParticleSorter.md","title":"sim/particles/GPUParticleSorter.js","description":"","kind":"reference","source":"engine/sim/particles/GPUParticleSorter.js","updated":"","headings":["sim/particles/GPUParticleSorter.js","Classes","class GPUParticleSorter","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Sort particles by depth (back to front for transparency) Get sorted indices buffer for use in rendering <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"449cc84255ab77218d7c2e5d0c4c49104553117cb09f75d8bf3a4462db85e135"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/MeshToParticlesCompute.md::0000","path":"engine/reference/sim/particles/MeshToParticlesCompute.md","title":"sim/particles/MeshToParticlesCompute.js","description":"","kind":"reference","source":"engine/sim/particles/MeshToParticlesCompute.js","updated":"","headings":["sim/particles/MeshToParticlesCompute.js","Functions","createMeshParticleBuffers(device, mesh)","getAttrOffsetFloats(attributes, key)","async generateMeshParticlesIntoWorld(gpuDevice, meshBuffers, particleWorld, options = {})","async generateMeshParticlesIntoParticlesState(particles, meshBuffers, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/MeshToParticlesPipelineCache.md::0000","path":"engine/reference/sim/particles/MeshToParticlesPipelineCache.md","title":"sim/particles/MeshToParticlesPipelineCache.js","description":"","kind":"reference","source":"engine/sim/particles/MeshToParticlesPipelineCache.js","updated":"","headings":["sim/particles/MeshToParticlesPipelineCache.js","Functions","async prewarmMeshToParticlesPipeline(gpuDevice)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAdaptiveSubstep.md::0000","path":"engine/reference/sim/particles/ParticleAdaptiveSubstep.md","title":"sim/particles/ParticleAdaptiveSubstep.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAdaptiveSubstep.js","updated":"","headings":["sim/particles/ParticleAdaptiveSubstep.js","Functions","createAdaptiveSubstepController(config = {})","computeAdaptiveSubsteps(controller, frameDt, maxSpeed)","estimateMaxSpeedCPU(velocityData, particleCount, sampleCount = 256)","resetAdaptiveSubsteps(controller)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create an adaptive substep controller. Parameters: (Object) — No description in source JSDoc. (number) — CFL safety factor (0.5 = particle travels at most 50% of cell per substep) (number) — Spatial cell size (collision grid resolution) (number) — Minimum substeps per frame (default 1) (number) — Maximum substeps per frame (default 8) (number) — Exponential smoothing for substep count changes (0 1, default 0.3) Compute the number of substeps needed for this frame. Parameters: (Object) — Adaptive substep controller (number) — Frame delta time in seconds (number) — Maximum particle speed this frame (from GPU readback or estimate) Returns: } Estimate max particle speed from CPU side velocity data. Use this as fallback when GPU readback is not available. Parameters: (Float32Array) — Particle velocity buffer (vec4 per particle) (number) — Number of active particles (number) — How many particles to sample (default 256 for performance) Returns: Estimated max speed Reset the controller state. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body","contentHash":"8e2d73dc15c934d76044a94fec2401a703c649f89a725d4cc07c721ec28dce8a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAdaptiveSubstep.md::0001","path":"engine/reference/sim/particles/ParticleAdaptiveSubstep.md","title":"sim/particles/ParticleAdaptiveSubstep.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAdaptiveSubstep.js","updated":"","headings":["sim/particles/ParticleAdaptiveSubstep.js","Functions","createAdaptiveSubstepController(config = {})","computeAdaptiveSubsteps(controller, frameDt, maxSpeed)","estimateMaxSpeedCPU(velocityData, particleCount, sampleCount = 256)","resetAdaptiveSubsteps(controller)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Returns: Estimated max speed Reset the controller state. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"0b9080bd1b41625b2dbe51add2a17b37557061f239feea7e65a15965e7df4020"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAdvanced.md::0000","path":"engine/reference/sim/particles/ParticleAdvanced.md","title":"sim/particles/ParticleAdvanced.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAdvanced.js","updated":"","headings":["sim/particles/ParticleAdvanced.js","Functions","createGPUSortSystem(device, maxParticles)","initSortBindGroup(sortSystem, device, positionsBuffer)","executeGPUSort(sortSystem, device, particleCount, cameraPos)","createChunkedBufferSystem(device, maxParticles, bytesPerParticle = 16)","getChunkForParticle(chunkedSystem, particleIndex)","getLocalIndex(chunkedSystem, particleIndex)","destroyChunkedBufferSystem(chunkedSystem)","createWireConstraintSystem(device, maxWires = 10000)","addWireConstraint(wireSystem, device, particleA, particleB, restLength, stiffness = 0.5)","initWireBindGroup(wireSystem, device, positionsBuffer, velocitiesBuffer)","solveWireConstraints(wireSystem, device, iterations = 4)","createSDFCollisionSystem(device, initialCapacity = 64)","addSDFCollider(sdfSystem, device, type, center, radius, halfExtents = [1, 1, 1])","clearSDFColliders(sdfSystem)","rebuildSDFColliders(sdfSystem, device, colliders)","initSDFBindGroup(sdfSystem, device, positionsBuffer, velocitiesBuffer, metaBuffer = null)","executeSDFCollision(sdfSystem, device, particleCount, bounciness = 0.3, friction = 0.1, options = {})","createSeedingSystem(device)","initSeedingBindGroup(seedSystem, device, positionsBuffer, velocitiesBuffer)","seedParticlesGPU(seedSystem, device, particleCount, options = {})","createVolumetricLightingSystem(device, maxParticles)","initVolumetricBindGroup(volSystem, device, positionsBuffer, thermalBuffer, velocitiesBuffer)","computeVolumetricLighting(volSystem, device, particleCount, lightPos, lightColor, options = {})","createDepthCollisionSystem(device, maxParticles)","initDepthCollisionBindGroup(system, device, positionsBuffer, velocitiesBuffer, depthTextureView)","executeDepthCollision(system, device, particleCount, viewProj, invViewProj, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create GPU sorting system for transparent particle rendering Initialize sort bind group with position buffer Execute GPU sort pass Create chunked particle buffer system for 100M+ particles Get chunk index for a particle index Get local index within a chunk Destroy chunked buffer system Create wire constraint system Add a wire constraint between two particles Initialize wire constraint bind group Solve wire constraints Create SDF collision system Add an SDF collider Clear all SDF colliders (for per frame rebuild from entity shapes) Batch write SDF colliders from an array of collider descriptors. Much more efficient than calling addSDFCollider() in a loop. Parameters: (object) — SDF collision system (GPUDevice) — WebGPU device Initialize SDF collision bind group Parameters: (object) — SDF collision system (GPUDevice) — WebGPU device (GPUBuffer) — Particle positions buffer (GPUBuffer) — Particle velocities buffer (GPUBuffer) — Particle meta buffer (for per particle size) Execute SDF collision pass Parameters: (object) — SDF collision system (GPUDevice) — WebGPU device (number) — Number of particles to process (number) — Bounce coefficient (0 1) (number) — Friction coefficient (0 1) (object) — Additional options { contactRadius, barrierStiffness, dt, usePerParticleSize } Create GPU particle seeding system Initialize seeding bind group Seed particles on GPU Create","contentHash":"f243bbbb8f69f828444eabd92b13b5e7a64c869c43bb231bd1de51124062170c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAdvanced.md::0001","path":"engine/reference/sim/particles/ParticleAdvanced.md","title":"sim/particles/ParticleAdvanced.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAdvanced.js","updated":"","headings":["sim/particles/ParticleAdvanced.js","Functions","createGPUSortSystem(device, maxParticles)","initSortBindGroup(sortSystem, device, positionsBuffer)","executeGPUSort(sortSystem, device, particleCount, cameraPos)","createChunkedBufferSystem(device, maxParticles, bytesPerParticle = 16)","getChunkForParticle(chunkedSystem, particleIndex)","getLocalIndex(chunkedSystem, particleIndex)","destroyChunkedBufferSystem(chunkedSystem)","createWireConstraintSystem(device, maxWires = 10000)","addWireConstraint(wireSystem, device, particleA, particleB, restLength, stiffness = 0.5)","initWireBindGroup(wireSystem, device, positionsBuffer, velocitiesBuffer)","solveWireConstraints(wireSystem, device, iterations = 4)","createSDFCollisionSystem(device, initialCapacity = 64)","addSDFCollider(sdfSystem, device, type, center, radius, halfExtents = [1, 1, 1])","clearSDFColliders(sdfSystem)","rebuildSDFColliders(sdfSystem, device, colliders)","initSDFBindGroup(sdfSystem, device, positionsBuffer, velocitiesBuffer, metaBuffer = null)","executeSDFCollision(sdfSystem, device, particleCount, bounciness = 0.3, friction = 0.1, options = {})","createSeedingSystem(device)","initSeedingBindGroup(seedSystem, device, positionsBuffer, velocitiesBuffer)","seedParticlesGPU(seedSystem, device, particleCount, options = {})","createVolumetricLightingSystem(device, maxParticles)","initVolumetricBindGroup(volSystem, device, positionsBuffer, thermalBuffer, velocitiesBuffer)","computeVolumetricLighting(volSystem, device, particleCount, lightPos, lightColor, options = {})","createDepthCollisionSystem(device, maxParticles)","initDepthCollisionBindGroup(system, device, positionsBuffer, velocitiesBuffer, depthTextureView)","executeDepthCollision(system, device, particleCount, viewProj, invViewProj, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"{ contactRadius, barrierStiffness, dt, usePerParticleSize } Create GPU particle seeding system Initialize seeding bind group Seed particles on GPU Create volumetric lighting system for particles Initialize volumetric lighting bind group Compute volumetric lighting for particles Create depth buffer collision system. Bind group is created separately via initDepthCollisionBindGroup (recreate on depth texture resize). Initialize or recreate the depth collision bind group. Must be called whenever the depth texture changes (e.g., on window resize). Execute depth buffer collision compute pass. Parameters: (Object) — Depth collision system (GPUDevice) — WebGPU device (number) — Number of particles to process (Float32Array) — 4x4 view projection matrix (column major, 16 floats) (Float32Array) — 4x4 inverse view projection matrix (column major, 16 floats) (Object) — { resolution, dt, bounciness, friction, particleRadius, depthBias } <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"8a8a3a1b2ffe9ace91f7df5271a5a6c21eb4c8476fe39b187d6eca3aab21d13a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAttributeReader.md::0000","path":"engine/reference/sim/particles/ParticleAttributeReader.md","title":"sim/particles/ParticleAttributeReader.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAttributeReader.js","updated":"","headings":["sim/particles/ParticleAttributeReader.js","Functions","createAttributeReader(sourceWorld, options = {})","async refreshAttributeCache(reader, frameIndex)","readParticlePosition(reader, index)","readParticleVelocity(reader, index)","readParticleMeta(reader, index)","findNearestParticle(reader, queryPos, maxParticles)","findParticlesInRadius(reader, queryPos, radius, maxResults = 32)","destroyAttributeReader(reader)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create an attribute reader bound to a source particle world. Parameters: (Object) — Source particle world to read from (Object) — { enableSpatialQuery } Refresh CPU side cache from GPU buffers (async). Call once per frame before reading attributes. Parameters: (Object) — No description in source JSDoc. (number) — Current frame number (avoids redundant readbacks) Read a particle's position and age. Parameters: (Object) — No description in source JSDoc. (number) — Particle index Returns: null} Read a particle's velocity and lifetime. Parameters: (Object) — No description in source JSDoc. (number) — Particle index Returns: null} Read a particle's color and packed meta. Parameters: (Object) — No description in source JSDoc. (number) — Particle index Returns: null} Find the nearest alive particle to a query position (brute force). For large counts, use the spatial grid instead. Parameters: (Object) — No description in source JSDoc. (number[]) — [x, y, z] (number) — How many particles to search Returns:","contentHash":"ad4f7cf4b0cb61283e7f19544382aaab4fd7251c60f718e0ecbad50a4c6c638f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAttributeReader.md::0001","path":"engine/reference/sim/particles/ParticleAttributeReader.md","title":"sim/particles/ParticleAttributeReader.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAttributeReader.js","updated":"","headings":["sim/particles/ParticleAttributeReader.js","Functions","createAttributeReader(sourceWorld, options = {})","async refreshAttributeCache(reader, frameIndex)","readParticlePosition(reader, index)","readParticleVelocity(reader, index)","readParticleMeta(reader, index)","findNearestParticle(reader, queryPos, maxParticles)","findParticlesInRadius(reader, queryPos, radius, maxResults = 32)","destroyAttributeReader(reader)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"use the spatial grid instead. Parameters: (Object) — No description in source JSDoc. (number[]) — [x, y, z] (number) — How many particles to search Returns: null} Find all particles within a radius of a query position. Parameters: (Object) — No description in source JSDoc. (number[]) — [x, y, z] (number) — No description in source JSDoc. (number) — Cap on results (default 32) Returns: } Destroy the reader. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"3dc56142e23e9c90e0e15c075b501a559c9c1f00f9e80d927ba1513c9b7c4b68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAudioBridge.md::0000","path":"engine/reference/sim/particles/ParticleAudioBridge.md","title":"sim/particles/ParticleAudioBridge.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAudioBridge.js","updated":"","headings":["sim/particles/ParticleAudioBridge.js","Functions","createAudioBridge(config = {})","destroyAudioBridge(bridge)","setAudioListenerPos(bridge, x, y, z)","updateListenerFromCamera(bridge, camera)","flushImpactBatches(bridge)","triggerImpact(bridge, material, position, speed = 2, temperature = 300, priorityClass = PRIORITYNORMAL, velocity = null)","wireEventCallbacks(bridge, eventSystem, getMaterial)","unwireEventCallbacks(bridge)","updateAmbientLoop(bridge, emitterId, material, position, params = {})","stopAmbientLoop(bridge, emitterId)","stopAllAmbientLoops(bridge)","stopAllSounds(bridge)","updateEmitterAmbients(bridge, emitters)","setParticleAudioVolume(bridge, volume)","setReverbParams(bridge, params = {})","setImpactVolume(bridge, volume)","setAmbientVolume(bridge, volume)","resumeAudioContext(bridge)","autoUnlockAudioContext(bridge)","pauseAllAudio(bridge)","resumeAllAudio(bridge)","hookVisibilityAutoPause(bridge)","getAudioBridgeStats(bridge)","setOcclusionCallback(bridge, fn)","soloMaterial(bridge, patchKey)","muteMaterial(bridge, patchKey)","resetAudioBridgeStats(bridge)","registerAudioCue()","processAudioEvents()","flushPendingAudio()","unregisterAudioCue()","processParticleEvents()","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create an audio bridge with full voice management. Parameters: (Object) — No description in source JSDoc. (number) — Max concurrent one shot voices (default 32) (number) — Max audible distance (default 100) (number) — Master volume (default 0.5) (AudioContext) — External AudioContext to share (optional) Destroy the bridge and release all audio resources. Update listener","contentHash":"2907b65a6e94f6c846776ce33567d2fa5b463f7fdfe489dc3af4859a75c9addb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAudioBridge.md::0001","path":"engine/reference/sim/particles/ParticleAudioBridge.md","title":"sim/particles/ParticleAudioBridge.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAudioBridge.js","updated":"","headings":["sim/particles/ParticleAudioBridge.js","Functions","createAudioBridge(config = {})","destroyAudioBridge(bridge)","setAudioListenerPos(bridge, x, y, z)","updateListenerFromCamera(bridge, camera)","flushImpactBatches(bridge)","triggerImpact(bridge, material, position, speed = 2, temperature = 300, priorityClass = PRIORITYNORMAL, velocity = null)","wireEventCallbacks(bridge, eventSystem, getMaterial)","unwireEventCallbacks(bridge)","updateAmbientLoop(bridge, emitterId, material, position, params = {})","stopAmbientLoop(bridge, emitterId)","stopAllAmbientLoops(bridge)","stopAllSounds(bridge)","updateEmitterAmbients(bridge, emitters)","setParticleAudioVolume(bridge, volume)","setReverbParams(bridge, params = {})","setImpactVolume(bridge, volume)","setAmbientVolume(bridge, volume)","resumeAudioContext(bridge)","autoUnlockAudioContext(bridge)","pauseAllAudio(bridge)","resumeAllAudio(bridge)","hookVisibilityAutoPause(bridge)","getAudioBridgeStats(bridge)","setOcclusionCallback(bridge, fn)","soloMaterial(bridge, patchKey)","muteMaterial(bridge, patchKey)","resetAudioBridgeStats(bridge)","registerAudioCue()","processAudioEvents()","flushPendingAudio()","unregisterAudioCue()","processParticleEvents()","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"— Master volume (default 0.5) (AudioContext) — External AudioContext to share (optional) Destroy the bridge and release all audio resources. Update listener from a camera object. Sets both position AND orientation for correct spatial panning (research: without orientation, all panning is wrong). Trigger an impact sound immediately. Used for reaction events and manual triggers. For collision/death events, use the batched system (flushImpactBatches) instead. Parameters: (number) — PRIORITY NORMAL by default. Use PRIORITY HIGH for player caused. 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). Parameters: (Object) — No description in source JSDoc. (Object) — From initParticleEventSystem (Function) — (evt) = substanceKey or materialIndex. Unwire event callbacks (for cleanup). Actually removes the callback functions from the event system's callback arrays. Immediately silence ALL particle audio — impacts + ambients. Called when the editor exits play mode (Stop button). Update reverb parameters at runtime (e.g., when entering a cave or outdoor area). Parameters: (Object) — { wetLevel, decay, preDelay } all optional Set impact bus volume independently (0 1). Smoothed to avoid zipper noise. Set ambient bus volume independently (0 1). Smoothed to avoid zipper noise. Resume AudioContext after browser autoplay policy suspension. Research (Chrome/Safari): Context starts 'suspended' until user gesture. Call this from your first click/keydown handler. Auto unlock AudioContext on first user interaction (Safari/iOS workaround). Research (Matt Montag): Safari requires resume() from touch/click handler. Registers one","contentHash":"62a86387f0fdffb0b7b65dd66c8ed45125c1b907bfbe469c0a78e45448a9cf81"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleAudioBridge.md::0002","path":"engine/reference/sim/particles/ParticleAudioBridge.md","title":"sim/particles/ParticleAudioBridge.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleAudioBridge.js","updated":"","headings":["sim/particles/ParticleAudioBridge.js","Functions","createAudioBridge(config = {})","destroyAudioBridge(bridge)","setAudioListenerPos(bridge, x, y, z)","updateListenerFromCamera(bridge, camera)","flushImpactBatches(bridge)","triggerImpact(bridge, material, position, speed = 2, temperature = 300, priorityClass = PRIORITYNORMAL, velocity = null)","wireEventCallbacks(bridge, eventSystem, getMaterial)","unwireEventCallbacks(bridge)","updateAmbientLoop(bridge, emitterId, material, position, params = {})","stopAmbientLoop(bridge, emitterId)","stopAllAmbientLoops(bridge)","stopAllSounds(bridge)","updateEmitterAmbients(bridge, emitters)","setParticleAudioVolume(bridge, volume)","setReverbParams(bridge, params = {})","setImpactVolume(bridge, volume)","setAmbientVolume(bridge, volume)","resumeAudioContext(bridge)","autoUnlockAudioContext(bridge)","pauseAllAudio(bridge)","resumeAllAudio(bridge)","hookVisibilityAutoPause(bridge)","getAudioBridgeStats(bridge)","setOcclusionCallback(bridge, fn)","soloMaterial(bridge, patchKey)","muteMaterial(bridge, patchKey)","resetAudioBridgeStats(bridge)","registerAudioCue()","processAudioEvents()","flushPendingAudio()","unregisterAudioCue()","processParticleEvents()","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"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. 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. Resume all audio after pause. Hook into Page Visibility API to auto pause/resume audio. Call once after createAudioBridge. 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 th","contentHash":"201ca7eb7631afb669ed623a9e63d9c0e3301dd9dd5428acfe1a119558fb03c9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleBonds.md::0000","path":"engine/reference/sim/particles/ParticleBonds.md","title":"sim/particles/ParticleBonds.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleBonds.js","updated":"","headings":["sim/particles/ParticleBonds.js","Functions","createBondSystem(world)","stepBondFormation(world, bondSystem, options = {})","stepBondBreaking(world, bondSystem, options = {})","stepBondSystem(world, bondSystem, options = {})","getBondStats(bondSystem)","destroyBondSystem(bondSystem)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create a bond management system. Parameters: (Object) — Particle sim world Returns: Bond system Attempt to form bonds between nearby particles. Called each frame from the simulation loop. Parameters: (Object) — Particle sim world (Object) — Bond system from createBondSystem (Object) — { thermalData, positions, particleCount, flags, freezePoint } Process broken bonds and clean them up. Call after constraint solver has run. Parameters: (Object) — Particle sim world (Object) — Bond system (Object) — { thermalData, meltPoint } Step the full bond system (formation + breaking). Get bond system stats. Destroy bond system and clear all bonds. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is","contentHash":"ac7fc0660ead7fb206e8ddef3976b0d8c89eb91fad6234f63610542e3284faf8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleBonds.md::0001","path":"engine/reference/sim/particles/ParticleBonds.md","title":"sim/particles/ParticleBonds.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleBonds.js","updated":"","headings":["sim/particles/ParticleBonds.js","Functions","createBondSystem(world)","stepBondFormation(world, bondSystem, options = {})","stepBondBreaking(world, bondSystem, options = {})","stepBondSystem(world, bondSystem, options = {})","getBondStats(bondSystem)","destroyBondSystem(bondSystem)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b376bf848cb3620f4eb8e03f4a65400911a77ca9dbf4277bb8caa6fa9679cab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleChemistry.md::0000","path":"engine/reference/sim/particles/ParticleChemistry.md","title":"sim/particles/ParticleChemistry.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleChemistry.js","updated":"","headings":["sim/particles/ParticleChemistry.js","Functions","createChemistrySystem(device, maxParticles)","initChemistryBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, elementTable, thermalBuffer)","initParticleValence(system, device, elementData, startIndex, count)","executeChemistry(system, device, particleCount, dt)","getValenceBuffer(system)","destroyChemistrySystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the chemistry system. Initialize bind groups. Initialize valence electrons for a range of particles based on their element. Execute chemistry compute (bond formation + dissociation). Get the valence buffer for external use. Destroy. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision","contentHash":"e25450be14edfb302f15b56d66cd71a8db83a103ba2516820d92a8dbf99faf7c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleChemistry.md::0001","path":"engine/reference/sim/particles/ParticleChemistry.md","title":"sim/particles/ParticleChemistry.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleChemistry.js","updated":"","headings":["sim/particles/ParticleChemistry.js","Functions","createChemistrySystem(device, maxParticles)","initChemistryBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, elementTable, thermalBuffer)","initParticleValence(system, device, elementData, startIndex, count)","executeChemistry(system, device, particleCount, dt)","getValenceBuffer(system)","destroyChemistrySystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b6698d124b9bd7f5cb9cebdbcb2748a394864cb0940f4248110c79d69d21ebd1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleClassifier.md::0000","path":"engine/reference/sim/particles/ParticleClassifier.md","title":"sim/particles/ParticleClassifier.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleClassifier.js","updated":"","headings":["sim/particles/ParticleClassifier.js","Functions","createClassifierSystem(device, maxParticles)","initClassifierBindGroups(system, device, positionBuffer, velocityBuffer, thermalBuffer, sphDensityBuffer)","executeClassifier(system, device, particleCount)","getClassificationBuffer(system)","setClassifierParams(system, config)","destroyClassifierSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create the classifier system. Initialize bind groups. Execute the classification compute pass. Get the classification buffer for use by renderers. Update classifier thresholds at runtime. Destroy classifier system. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units :","contentHash":"b0f3846c3d826e2058568a58865dae7fff9bdac6b3dd3d6f1c317918c3e815ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleClassifier.md::0001","path":"engine/reference/sim/particles/ParticleClassifier.md","title":"sim/particles/ParticleClassifier.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleClassifier.js","updated":"","headings":["sim/particles/ParticleClassifier.js","Functions","createClassifierSystem(device, maxParticles)","initClassifierBindGroups(system, device, positionBuffer, velocityBuffer, thermalBuffer, sphDensityBuffer)","executeClassifier(system, device, particleCount)","getClassificationBuffer(system)","setClassifierParams(system, config)","destroyClassifierSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9b78395c8677c2c7fab51de0869295d41cd480b82871bde5d3f2aba6f11b4d42"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleColorGradient.md::0000","path":"engine/reference/sim/particles/ParticleColorGradient.md","title":"sim/particles/ParticleColorGradient.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleColorGradient.js","updated":"","headings":["sim/particles/ParticleColorGradient.js","Functions","createColorGradient(stops, resolution = 64)","sampleGradient(stops, t)","uploadGradientTexture(device, gradient)","destroyGradientTexture(gradientTexture)","gradientFromLegacy(color, colorEnd, alphaOverLife = [1, 1, 1])","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions 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 Parameters: (number) — LUT texture width (default 64, power of 2) Returns: } Sample a color gradient at a given t value Parameters: (number) — Position along gradient (0 1) Returns: [r, g, b, a] Upload a color gradient as a 1D GPU texture for shader sampling Parameters: (GPUDevice) — No description in source JSDoc. Returns: } Destroy a gradient texture Convert a legacy color/colorEnd pair to a gradient Parameters: (number[]) — Start color [r, g, b] (number[]) — End color [r, g, b] (number[]) — [start, mid, end] alpha curve Returns: } Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints","contentHash":"1cdd9cfe5d8427ab402d0d8d0eec3f69cbb4b2491f5d93098885170e8c57a273"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleColorGradient.md::0001","path":"engine/reference/sim/particles/ParticleColorGradient.md","title":"sim/particles/ParticleColorGradient.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleColorGradient.js","updated":"","headings":["sim/particles/ParticleColorGradient.js","Functions","createColorGradient(stops, resolution = 64)","sampleGradient(stops, t)","uploadGradientTexture(device, gradient)","destroyGradientTexture(gradientTexture)","gradientFromLegacy(color, colorEnd, alphaOverLife = [1, 1, 1])","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"29c8aaa45bb4aa7f28a996d3c3493e208013a8f6a7c82d0d03109b678a421efb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleCompression.md::0000","path":"engine/reference/sim/particles/ParticleCompression.md","title":"sim/particles/ParticleCompression.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleCompression.js","updated":"","headings":["sim/particles/ParticleCompression.js","Functions","runLengthEncode(indices)","runLengthDecode(encoded)","packSmallIntegers(values)","unpackSmallIntegers(packed)","computeCovarianceMatrix(trajectories)","powerIteration(matrix, iterations = 20)","dct1d(signal)","idct1d(coeffs)","quantizeDCT(coeffs, retention = 0.7)","quantizeFloat(value, range)","dequantizeFloat(quantized, range)","quantizePosition(x, y, z, age)","quantizeVelocity(vx, vy, vz, lifetime)","dequantizePosition(quantized)","dequantizeVelocity(quantized)","quantizePositionArray(positions)","quantizeVelocityArray(velocities)","dequantizePositionArray(quantized)","dequantizeVelocityArray(quantized)","catmullRomInterpolate(p0, p1, p2, p3, t, tension = 0.5)","hermiteInterpolate(p0, p1, v0, v1, t)","entropyEncodeResiduals(residuals)","entropyDecodeResiduals(encoded, length)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2143af2995f9af1188cb7d42ee8144c8547d0dacac3c4ba1c598087246e437cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleConfig.md::0000","path":"engine/reference/sim/particles/ParticleConfig.md","title":"sim/particles/ParticleConfig.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleConfig.js","updated":"","headings":["sim/particles/ParticleConfig.js","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants Re exports , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b7eab1b604fe691decbeb9b953e0faf2d0e7e1044579cf3d4856e2211e5d2392"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleConstraints.md::0000","path":"engine/reference/sim/particles/ParticleConstraints.md","title":"sim/particles/ParticleConstraints.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleConstraints.js","updated":"","headings":["sim/particles/ParticleConstraints.js","Functions","createRopeConstraintSystem(device, maxConstraints = 100000)","initRopeConstraintBindGroup(system, device, positionsBuffer, velocitiesBuffer, thermalBuffer)","addDistanceConstraint(system, device, particleA, particleB, restLength, stiffness = 0.9)","addAttachmentConstraint(system, device, particleIndex, worldPos, stiffness = 1.0)","addRopeInextensibleConstraint(system, device, particleA, particleB, restLength, opts = {})","updateAttachmentTarget(system, device, constraintIndex, worldPos)","updateRopeConstraintPhysics(system, device, constraintIndex, opts)","addBendingConstraint(system, device, particleA, particleB, particleC, restAngle = Math.PI, opts = {})","addSpringConstraint(system, device, particleA, particleB, restLength, opts = {})","addStickyConstraint(system, device, particleA, target, opts = {})","addCohesionConstraint(system, device, particleA, particleB, opts = {})","addCollisionConstraint(system, device, particleA, particleB, opts = {})","addWeldConstraint(system, device, particleA, particleB, restDistance = 0)","applyMaterialPreset(system, device, presetName, constraintIndices)","createRopeConstraints(system, device, particleStart, particleCount, opts = {})","solveRopeConstraints(system, device, iterations = 8, dt = 1/60, opts = {})","clearRopeConstraints(system, entityId)","destroyRopeConstraintSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Create rope/constraint solver system Parameters: (GPUDevice) — WebGPU device (number) — Maximum number of constraints Returns: Constraint system object Initialize constraint system bind group Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (GPUBuffer) — Particle positions buffer (GPUBuffer) — Particle velocities buffer Add a distance constraint between two particles Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — First particle index (number) — Second particle index (number) — Rest length (number) — Stiffness (0 1) Returns: Constraint index or 1 if failed Add an attachment constraint (pin to world position) Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — Particle to attach (Array<number ) — [x, y, z] world position (number) — Stiffness (1.0 = hard constraint) Returns: Constraint index or 1 if failed Add a rope inextensible constraint (mass aware, with breaking support) Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — First particle index (number) — Second particle index (number) — Rest length (Object) — Rope physics options Returns: Constraint index or 1 if failed Update an attachment constraint's target position Parameters: (Object) — Constraint system","contentHash":"ab8bfe02c7037e4077b1fc507639a4132d5960bb7d88530ddc00fb7bf16cc822"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleConstraints.md::0001","path":"engine/reference/sim/particles/ParticleConstraints.md","title":"sim/particles/ParticleConstraints.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleConstraints.js","updated":"","headings":["sim/particles/ParticleConstraints.js","Functions","createRopeConstraintSystem(device, maxConstraints = 100000)","initRopeConstraintBindGroup(system, device, positionsBuffer, velocitiesBuffer, thermalBuffer)","addDistanceConstraint(system, device, particleA, particleB, restLength, stiffness = 0.9)","addAttachmentConstraint(system, device, particleIndex, worldPos, stiffness = 1.0)","addRopeInextensibleConstraint(system, device, particleA, particleB, restLength, opts = {})","updateAttachmentTarget(system, device, constraintIndex, worldPos)","updateRopeConstraintPhysics(system, device, constraintIndex, opts)","addBendingConstraint(system, device, particleA, particleB, particleC, restAngle = Math.PI, opts = {})","addSpringConstraint(system, device, particleA, particleB, restLength, opts = {})","addStickyConstraint(system, device, particleA, target, opts = {})","addCohesionConstraint(system, device, particleA, particleB, opts = {})","addCollisionConstraint(system, device, particleA, particleB, opts = {})","addWeldConstraint(system, device, particleA, particleB, restDistance = 0)","applyMaterialPreset(system, device, presetName, constraintIndices)","createRopeConstraints(system, device, particleStart, particleCount, opts = {})","solveRopeConstraints(system, device, iterations = 8, dt = 1/60, opts = {})","clearRopeConstraints(system, entityId)","destroyRopeConstraintSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"— Rope physics options Returns: Constraint index or 1 if failed Update an attachment constraint's target position Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — Constraint index (Array<number ) — New [x, y, z] world position Update rope constraint physics properties Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — Constraint index (Object) — { chainStiffness, tensionStiffness, maxTension, massA, massB } Add a bending/angle constraint between 3 particles UNTESTED Maintains angle at center particle (particleB) Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — First endpoint (number) — Center particle (angle vertex) (number) — Second endpoint (number) — Rest angle in radians (default: PI = straight) (Object) — { stiffness } Returns: Constraint index or 1 if failed Add a spring constraint UNTESTED Unlike distance, springs can compress AND extend (Hooke's law) Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — First particle (number) — Second particle (number) — Rest length (Object) — { stiffness, massA, massB } Returns: Constraint index or 1 if failed Add a sticky/adhesion constraint UNTESTED Particle sticks to a world position or another particle Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — Particle to make sticky (Array<number number) — [x,y,z] world position OR particle index (Object) — { stiffness, adhesionStrength, breakDistance } Returns: Constraint index or 1 if failed Add a cohesion constraint UNTESTED Particles attract each other within a radius (like water droplets) Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — First particle (number) — Second particle (Object) — {","contentHash":"b652bba9ea3b42abaa6d2357a0322dc451bfc10f59b1b0afe1583aeb51ecc04c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleConstraints.md::0002","path":"engine/reference/sim/particles/ParticleConstraints.md","title":"sim/particles/ParticleConstraints.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleConstraints.js","updated":"","headings":["sim/particles/ParticleConstraints.js","Functions","createRopeConstraintSystem(device, maxConstraints = 100000)","initRopeConstraintBindGroup(system, device, positionsBuffer, velocitiesBuffer, thermalBuffer)","addDistanceConstraint(system, device, particleA, particleB, restLength, stiffness = 0.9)","addAttachmentConstraint(system, device, particleIndex, worldPos, stiffness = 1.0)","addRopeInextensibleConstraint(system, device, particleA, particleB, restLength, opts = {})","updateAttachmentTarget(system, device, constraintIndex, worldPos)","updateRopeConstraintPhysics(system, device, constraintIndex, opts)","addBendingConstraint(system, device, particleA, particleB, particleC, restAngle = Math.PI, opts = {})","addSpringConstraint(system, device, particleA, particleB, restLength, opts = {})","addStickyConstraint(system, device, particleA, target, opts = {})","addCohesionConstraint(system, device, particleA, particleB, opts = {})","addCollisionConstraint(system, device, particleA, particleB, opts = {})","addWeldConstraint(system, device, particleA, particleB, restDistance = 0)","applyMaterialPreset(system, device, presetName, constraintIndices)","createRopeConstraints(system, device, particleStart, particleCount, opts = {})","solveRopeConstraints(system, device, iterations = 8, dt = 1/60, opts = {})","clearRopeConstraints(system, entityId)","destroyRopeConstraintSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"(like water droplets) Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — First particle (number) — Second particle (Object) — { cohesionRadius, stiffness, massA, massB } Returns: Constraint index or 1 if failed Add a collision constraint UNTESTED Particle particle collision with friction and restitution (bounce) Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (number) — First particle (number) — Second particle (Object) — { collisionRadius, friction, restitution, massA, massB } Returns: Constraint index or 1 if failed Add a weld constraint UNTESTED Permanently joins two particles (rigid connection) Parameters: (Object) — Constraint system (GPUDevice) — WebGPU device (numb","contentHash":"704a18634daea4c886036af3909889f2925c757fdd8cb251adcf637140f25b5c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleDecalSpawner.md::0000","path":"engine/reference/sim/particles/ParticleDecalSpawner.md","title":"sim/particles/ParticleDecalSpawner.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleDecalSpawner.js","updated":"","headings":["sim/particles/ParticleDecalSpawner.js","Functions","createDecalSpawner(config = {})","feedCollisionEvents(spawner, eventData, eventCount, options = {})","updateDecals(spawner, dt)","getActiveDecals(spawner)","getDecalCount(spawner)","clearDecals(spawner)","destroyDecalSpawner(spawner)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create a decal spawner with a fixed size ring buffer pool. Parameters: (Object) — No description in source JSDoc. (number) — Maximum active decals (ring buffer, default 200) (number) — How long decals persist in seconds (default 10) (number) — Default decal world size (default 1.0) (number) — Minimum impact speed to spawn a decal (default 2.0) (number) — Seconds before death to start fading (default 2.0) (Function) — Callback when a decal is spawned: (decal) = void 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] Parameters: (Object) — Decal spawner (Float32Array) — Raw event data from GPU readback (number) — Number of events in the buffer (Object) — { color, sizeScale, eventTypeMask } Update decal ages, fade, and expire old decals. Parameters: (Object) — No description in source JSDoc. (number) —","contentHash":"535b2a3322e1d9d82d34155021a9861c7fd224b772c02f20610bd37c9c38dea5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleDecalSpawner.md::0001","path":"engine/reference/sim/particles/ParticleDecalSpawner.md","title":"sim/particles/ParticleDecalSpawner.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleDecalSpawner.js","updated":"","headings":["sim/particles/ParticleDecalSpawner.js","Functions","createDecalSpawner(config = {})","feedCollisionEvents(spawner, eventData, eventCount, options = {})","updateDecals(spawner, dt)","getActiveDecals(spawner)","getDecalCount(spawner)","clearDecals(spawner)","destroyDecalSpawner(spawner)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— { color, sizeScale, eventTypeMask } Update decal ages, fade, and expire old decals. Parameters: (Object) — No description in source JSDoc. (number) — Delta time in seconds Get all active decals as an array of descriptors. Parameters: (Object) — No description in source JSDoc. Returns: Active decal descriptors Get active decal count. Clear all decals. Destroy the spawner. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"05b74311d98283d75335dcbc446b855128aa73aa82dbc231783a66728a4cae9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEffects.md::0000","path":"engine/reference/sim/particles/ParticleEffects.md","title":"sim/particles/ParticleEffects.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEffects.js","updated":"","headings":["sim/particles/ParticleEffects.js","Functions","createForcePointBuffer(device, maxPoints = MAXFORCEPOINTS)","updateForcePoints(device, buffer, forcePoints)","calculateDissolve(startTime, duration, direction = 'in')","processSubEmitters(particles, subEmitterConfig, currentTime)","createTrailBuffer(device, maxParticles, historyLength = 8)","generateParticleAtlas(device, size = 512, tilesPerRow = 4)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create force point buffer for attractors/repellers Each force point: [x, y, z, strength] where negative = repel Update force points in the buffer Calculate dissolve factor for fade in/out Process sub emitter spawning from dead particles This CPU fallback scans all slots and has 1 2 frame latency from GPU readback. Create trail history buffer Stores N previous positions per particle for trail rendering Generate a procedural particle texture atlas Constants — Sub emitter configuration — Particle texture atlas configuration Re exports , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"ac186052465b70bf0527dbbf94ed3e25839810a2aa2a8cec6ab4c0e5a20e0dc6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleElectromagnetic.md::0000","path":"engine/reference/sim/particles/ParticleElectromagnetic.md","title":"sim/particles/ParticleElectromagnetic.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleElectromagnetic.js","updated":"","headings":["sim/particles/ParticleElectromagnetic.js","Functions","createElectromagneticSystem(device, maxParticles)","initEMBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, chargeBuffer, thermalBuffer)","setExternalField(system, fields)","executeElectromagnetic(system, device, particleCount, dt)","destroyElectromagneticSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the electromagnetic system. Initialize bind groups. Set external E and B fields. Execute the electromagnetic compute pass. Destroy. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics","contentHash":"e3164927ea7adbb9870987a31d86783979bf53f37bcc31b52b9b741e8709e87e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleElectromagnetic.md::0001","path":"engine/reference/sim/particles/ParticleElectromagnetic.md","title":"sim/particles/ParticleElectromagnetic.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleElectromagnetic.js","updated":"","headings":["sim/particles/ParticleElectromagnetic.js","Functions","createElectromagneticSystem(device, maxParticles)","initEMBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, chargeBuffer, thermalBuffer)","setExternalField(system, fields)","executeElectromagnetic(system, device, particleCount, dt)","destroyElectromagneticSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"aa4a8a9e453245952bf9c39e4aa1307e67a74c0ddfe2d1f8a1a9401b4da7ae68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleElementRegistry.md::0000","path":"engine/reference/sim/particles/ParticleElementRegistry.md","title":"sim/particles/ParticleElementRegistry.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleElementRegistry.js","updated":"","headings":["sim/particles/ParticleElementRegistry.js","Functions","setRegistryTrace(enabled, throttleMs = 500)","getRegistryElement(id)","isPrimaryElement(id)","getAllRegistryElements()","getRegistryElementsByCategory()","getElementCombination(elementA, elementB)","getCombinationsFor(elementId)","elementMixToEmitterConfig(elements)","metaSlidersToPhysics(meta)","elementMixToSpellParams(elements)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Enable or disable element registry trace logging. When enabled, logs every element mix derivation with full pipeline details. Parameters: (boolean) — No description in source JSDoc. (number) — =500] Minimum ms between log messages (prevents spam) 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\"). Parameters: (string) — No description in source JSDoc. Check if an element ID is a primary element (user selectable) vs reaction product. Parameters: (string) — No description in source JSDoc. Get all registry elements as an array. Get element IDs grouped by category. Returns: } Look up the combination result for two elements. Parameters: (string) — No description in source JSDoc. (string) — No description in source JSDoc. Returns: Combination data or null if no predefined combo Get all combinations involving a specific element. Parameters: (string) — No description in source JSDoc. Returns: } Given an array of active element layers [{id,","contentHash":"e95be2796af44342a27997d63270ccf82e60070988de84c440d2a1ba20c41376"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleElementRegistry.md::0001","path":"engine/reference/sim/particles/ParticleElementRegistry.md","title":"sim/particles/ParticleElementRegistry.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleElementRegistry.js","updated":"","headings":["sim/particles/ParticleElementRegistry.js","Functions","setRegistryTrace(enabled, throttleMs = 500)","getRegistryElement(id)","isPrimaryElement(id)","getAllRegistryElements()","getRegistryElementsByCategory()","getElementCombination(elementA, elementB)","getCombinationsFor(elementId)","elementMixToEmitterConfig(elements)","metaSlidersToPhysics(meta)","elementMixToSpellParams(elements)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"all combinations involving a specific element. Parameters: (string) — No description in source JSDoc. Returns: } 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. Returns: Derived emitter properties 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. Returns: Physics overrides Convert an active element mix into spell generator parameters. Used by the \"Create Spell From This\" button. Returns: } Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"f920ff5fac8b08f57a8cf09aedfb8c2fb3d42eb35a98a4c8d82015e9b44f9a7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleElementTable.md::0000","path":"engine/reference/sim/particles/ParticleElementTable.md","title":"sim/particles/ParticleElementTable.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleElementTable.js","updated":"","headings":["sim/particles/ParticleElementTable.js","Functions","getElement(atomicNumber)","getElementBySymbol(symbol)","getAllElements()","ljMixingRule(z1, z2)","createElementTable(device, maxParticles)","setParticleElements(system, device, startIndex, count, atomicNumber)","setParticleCharges(system, device, startIndex, count, charge)","destroyElementTable(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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'); Functions Get element by atomic number (1 118). Parameters: (number) — No description in source JSDoc. Get element by symbol ('H', 'Fe', 'Au', etc.). Parameters: (string) — No description in source JSDoc. Get all elements. Compute Lennard Jones cross interaction parameters using Lorentz Berthelot rules. Parameters: (number) — Atomic number of element 1 (number) — Atomic number of element 2 Returns: } Create the element table system with per particle element buffer. Parameters: (GPUDevice) — No description in source JSDoc. (number) — No description in source JSDoc. Set element type for a range of particles. Parameters: (Object) — No description in source JSDoc. (GPUDevice) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — (1 118) Set charge for a range of particles (overrides element default). Destroy the element table system. Constants — Quick access: ELEMENTS.H = 1, ELEMENTS.Fe = 26, etc. —","contentHash":"862a97d7979d02f31ccc6f2bdb2add4d0337af69590e31ace98ce280ed474464"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleElementTable.md::0001","path":"engine/reference/sim/particles/ParticleElementTable.md","title":"sim/particles/ParticleElementTable.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleElementTable.js","updated":"","headings":["sim/particles/ParticleElementTable.js","Functions","getElement(atomicNumber)","getElementBySymbol(symbol)","getAllElements()","ljMixingRule(z1, z2)","createElementTable(device, maxParticles)","setParticleElements(system, device, startIndex, count, atomicNumber)","setParticleCharges(system, device, startIndex, count, charge)","destroyElementTable(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"for a range of particles (overrides element default). Destroy the element table system. Constants — Quick access: ELEMENTS.H = 1, ELEMENTS.Fe = 26, etc. — Common molecule presets — arrays of { element, count, charge }. — WGSL struct and accessor for element LUT. Bind elementLUT as storage buffer, elementTypes and charges as storage buffers. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"8035a894806ea2fe4dc3523a368a5a2285d67f0cedc7db01806a14e934f948cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEmitterLOD.md::0000","path":"engine/reference/sim/particles/ParticleEmitterLOD.md","title":"sim/particles/ParticleEmitterLOD.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEmitterLOD.js","updated":"","headings":["sim/particles/ParticleEmitterLOD.js","Functions","createEmitterLOD(config = {})","evaluateEmitterLOD(lod, cameraPos, emitterPos, dt = 1/60)","evaluateEmitterLODByScreenSize(lod, screenSize, screenThresholds)","getCurrentLODTier(lod)","setForcedLODTier(lod, tierIndex)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create an emitter LOD controller. Parameters: (Object) — No description in source JSDoc. (Array) — Array of LOD tier definitions (sorted by maxDistance) (number) — Distance hysteresis to prevent LOD flicker (default 5.0) (number) — Blend speed between tiers (default 3.0, units/sec) Evaluate LOD tier for an emitter based on camera distance. Returns the active tier config with interpolated values. Parameters: (Object) — LOD controller (number[] Float32Array) — Camera position [x, y, z] (number[] Float32Array) — Emitter world position [x, y, z] (number) — Delta time for smooth transitions Returns: Active LOD tier with potentially interpolated values Evaluate LOD by screen space size instead of distance. Useful for effects that vary in world scale. Parameters: (Object) — LOD controller (number) — Approximate screen space diameter in pixels (number[]) — Pixel thresholds per tier [ultra, high, medium, low] Get the current LOD tier without re evaluation. Force a specific LOD tier. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration","contentHash":"6dd5aed6f18c010d66a20e19d29a4fa5be524a2e6b61ed8d93ab44eb43fd94c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEmitterLOD.md::0001","path":"engine/reference/sim/particles/ParticleEmitterLOD.md","title":"sim/particles/ParticleEmitterLOD.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEmitterLOD.js","updated":"","headings":["sim/particles/ParticleEmitterLOD.js","Functions","createEmitterLOD(config = {})","evaluateEmitterLOD(lod, cameraPos, emitterPos, dt = 1/60)","evaluateEmitterLODByScreenSize(lod, screenSize, screenThresholds)","getCurrentLODTier(lod)","setForcedLODTier(lod, tierIndex)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"medium, low] Get the current LOD tier without re evaluation. Force a specific LOD tier. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"176e98ce0c451834aa3a8b41961dc080abbcd11386eb2e653d142f04af6080ad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEmitterSystem.md::0000","path":"engine/reference/sim/particles/ParticleEmitterSystem.md","title":"sim/particles/ParticleEmitterSystem.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEmitterSystem.js","updated":"","headings":["sim/particles/ParticleEmitterSystem.js","Functions","resolveSubstance(substance)","deriveState(temperature, element)","derivePhysicsProfile(substance, temperatureOverride)","deriveColorFromElements(elements)","deriveTemperatureFromElements(elements)","deriveMaterialIndexFromElements(elements)","getStates()","getElements()","getPresetList()","applyPreset(emitterCfg, presetKey)","getEmitterTypes()","getEmitterPreset(typeId)","normalizeElementPower(elementPower)","mixElementPower(a, b, options = {})","buildEffectKeyFromElements(elementPower, options = {})","computeVisualPower(elementPower, options = {})","createEmittersForEffect(effectId, options = {})","createEmitter(options = {})","stepEmitters(emitters, particleWorld, dt, options = {})","updateParticleCounts(particles, currentTime)","ageAndCullParticles(particles, hiddenDuration, options = {})","initSlotTracking(particles, maxCount)","buildColliderBuffer(particleWorld, entities, options = {})","buildFluidSources(emitters, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Resolve a substance string to { atomicNumber, temperature, charge, element }. Accepts element symbols (\"Fe\"), compound keys (\"H2O\"), preset names (\"fire\"), or null. Parameters: (string null) — No description in source JSDoc. Returns: null} Derive the state of matter from temperature and element melt/boil points. Parameters: (number) — Kelvin (Object null) — Element data from getElement() Returns: } Derive which physics systems an emitter needs based on substance + temperature. Returns a physics profile object. Parameters: (string null) — Substance key or null for legacy (number) — Override the preset temperature Returns: Physics profile Derive color from element layers (weighted blend) Derive materialIndex from element layers (picks highest power element's material) Get available states of matter Get available elements Get all presets grouped by category for UI consumption. Returns: } } Apply a preset to an emitter config object, mutating it in place. Sets substance, temperature, charge, emitter type, elements, and physics. Parameters: (Object) — Emitter config to mutate (string) — Key from EMITTER PRESETS Returns: True if preset was applied Get available emitter type IDs. Get emitter type preset by ID. ============================================================================ CREATE PARTICLE EMITTER ============================================================================ Creates an emitter instance from a preset type. The emitter controls all aspects of its particles: visual appearance, physics, and timing. Parameters: (Object) — Emitter configuration (string) —","contentHash":"955c660007248fdfdf191195f409a5e0a59ed998f386f99769b4b7275103d485"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEmitterSystem.md::0001","path":"engine/reference/sim/particles/ParticleEmitterSystem.md","title":"sim/particles/ParticleEmitterSystem.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEmitterSystem.js","updated":"","headings":["sim/particles/ParticleEmitterSystem.js","Functions","resolveSubstance(substance)","deriveState(temperature, element)","derivePhysicsProfile(substance, temperatureOverride)","deriveColorFromElements(elements)","deriveTemperatureFromElements(elements)","deriveMaterialIndexFromElements(elements)","getStates()","getElements()","getPresetList()","applyPreset(emitterCfg, presetKey)","getEmitterTypes()","getEmitterPreset(typeId)","normalizeElementPower(elementPower)","mixElementPower(a, b, options = {})","buildEffectKeyFromElements(elementPower, options = {})","computeVisualPower(elementPower, options = {})","createEmittersForEffect(effectId, options = {})","createEmitter(options = {})","stepEmitters(emitters, particleWorld, dt, options = {})","updateParticleCounts(particles, currentTime)","ageAndCullParticles(particles, hiddenDuration, options = {})","initSlotTracking(particles, maxCount)","buildColliderBuffer(particleWorld, entities, options = {})","buildFluidSources(emitters, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"preset type. The emitter controls all aspects of its particles: visual appearance, physics, and timing. Parameters: (Object) — Emitter configuration (string) — Preset type ID: \"fire\", \"smoke\", \"sparks\", (Array<number ) — [x, y, z] spawn position in world space (Array<number ) — Override preset color [r, g, b] (0 1 each) (number) — Override preset particle size (number) — Override preset emission rate (particles/sec) (boolean) — If true, emitter runs forever (default: true) Returns: Emitter instance with all properties needed for simulation Step all emitters and emit particles into the particle world. Returns the number of new particles emitted. 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. Parameters: (Object) — Particle state with slotInfo, freeSlots, etc. (number) — Current time in seconds Returns: { liveCount, deadCount, freeSlots } Age all particles by a given duration and cull those that died. Call this when resuming from hidden/minimized to skip dead particles. Parameters: (Object) — Particle state with positions, slotInfo, etc. (number) — How long the tab was hidden (seconds) (Object) — { logger } Returns: Number of particles culled Initialize slot tracking for a particle system. Call once after creating particles state. Build AABB collider buffer from ECS entities for particle collisions. Returns the number of colliders written. Build fluid sources from emitters for density splatting. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics","contentHash":"cccbb948063918e02c6ed55d2d88d3800e685f647a622a79eafb457212917348"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEmitterSystem.md::0002","path":"engine/reference/sim/particles/ParticleEmitterSystem.md","title":"sim/particles/ParticleEmitterSystem.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEmitterSystem.js","updated":"","headings":["sim/particles/ParticleEmitterSystem.js","Functions","resolveSubstance(substance)","deriveState(temperature, element)","derivePhysicsProfile(substance, temperatureOverride)","deriveColorFromElements(elements)","deriveTemperatureFromElements(elements)","deriveMaterialIndexFromElements(elements)","getStates()","getElements()","getPresetList()","applyPreset(emitterCfg, presetKey)","getEmitterTypes()","getEmitterPreset(typeId)","normalizeElementPower(elementPower)","mixElementPower(a, b, options = {})","buildEffectKeyFromElements(elementPower, options = {})","computeVisualPower(elementPower, options = {})","createEmittersForEffect(effectId, options = {})","createEmitter(options = {})","stepEmitters(emitters, particleWorld, dt, options = {})","updateParticleCounts(particles, currentTime)","ageAndCullParticles(particles, hiddenDuration, options = {})","initSlotTracking(particles, maxCount)","buildColliderBuffer(particleWorld, entities, options = {})","buildFluidSources(emitters, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them befo","contentHash":"80db5e0eea2e5b1d867abc73af3494c21e96e7fed49255817ef7cf801ed31221"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEulerianFluid.md::0000","path":"engine/reference/sim/particles/ParticleEulerianFluid.md","title":"sim/particles/ParticleEulerianFluid.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEulerianFluid.js","updated":"","headings":["sim/particles/ParticleEulerianFluid.js","Functions","createEulerianFluidSolver(device, config = {})","initFluidBindGroups(solver)","addFluidSource(solver, source)","stepEulerianFluid(solver, device, dt)","destroyEulerianFluidSolver(solver)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create a self contained Eulerian fluid solver. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. (number[]) — [x, y, z] grid dimensions (default [32, 32, 32]) (number[]) — World space origin (default [ 5, 1, 5]) (number[]) — World space extent (default [5, 9, 5]) (number) — Velocity/density decay (default 0.995) (number) — Density weight for buoyancy (default 0.1) (number) — Temperature weight for buoyancy (default 0.3) (number) — Pressure solver iterations (default 20) Build bind groups (call once after creation). Add a fluid source (emitter of density/temperature/velocity). Parameters: (Object) — No description in source JSDoc. (Object) — { position, radius, density, temperature, velocity } Step the fluid simulation. Destroy the solver. <! HUMAN NOTES Notes & Examples Physics","contentHash":"96d5c22e56a91a0c852ab39aeb4a1e117bfe5384cdb3de612f45901e460f435b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEulerianFluid.md::0001","path":"engine/reference/sim/particles/ParticleEulerianFluid.md","title":"sim/particles/ParticleEulerianFluid.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEulerianFluid.js","updated":"","headings":["sim/particles/ParticleEulerianFluid.js","Functions","createEulerianFluidSolver(device, config = {})","initFluidBindGroups(solver)","addFluidSource(solver, source)","stepEulerianFluid(solver, device, dt)","destroyEulerianFluidSolver(solver)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"JSDoc. (Object) — { position, radius, density, temperature, velocity } Step the fluid simulation. Destroy the solver. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"a9bfa02a3ece8ad5a562185a56faaa6d6f2892a6659d68cd40dedf357be27212"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEventSpawn.md::0000","path":"engine/reference/sim/particles/ParticleEventSpawn.md","title":"sim/particles/ParticleEventSpawn.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEventSpawn.js","updated":"","headings":["sim/particles/ParticleEventSpawn.js","Functions","createEventSpawnSystem(device, options = {})","initEventSpawnBindGroups(system, world)","setEventSpawnConfig(system, config = {})","executeEventSpawn(encoder, system, world)","destroyEventSpawnSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create the GPU event spawn system Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. Initialize bind groups for the event spawn system Parameters: (Object) — Event spawn system (Object) — Particle world (for event buffer + particle buffers) Update sub emitter spawn configuration Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. Execute the event spawn compute pass Call AFTER stepParticleSimWorld (events generated) and AFTER executeIndirectScan (free list built) Parameters: (GPUCommandEncoder) — No description in source JSDoc. (Object) — No description in source JSDoc. (Object) — Particle world (for event count) Destroy event spawn system <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies","contentHash":"b0b7c6c481fba5eaee8145dcbb03e08f115a74555369a09460fb2b94a32b8826"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEventSpawn.md::0001","path":"engine/reference/sim/particles/ParticleEventSpawn.md","title":"sim/particles/ParticleEventSpawn.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEventSpawn.js","updated":"","headings":["sim/particles/ParticleEventSpawn.js","Functions","createEventSpawnSystem(device, options = {})","initEventSpawnBindGroups(system, world)","setEventSpawnConfig(system, config = {})","executeEventSpawn(encoder, system, world)","destroyEventSpawnSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d1ab8185319565a3f3c4929a6b8a4f63a6318560a534b690c644eb3d21c25633"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEventSystem.md::0000","path":"engine/reference/sim/particles/ParticleEventSystem.md","title":"sim/particles/ParticleEventSystem.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEventSystem.js","updated":"","headings":["sim/particles/ParticleEventSystem.js","Functions","initParticleEventSystem(world, options = {})","registerEventHandler(system, config = {})","onParticleEvent(system, eventType, callback)","offParticleEvent(system, eventType)","stepEventSystem(system)","async readbackEvents(system)","getLastEvents(system)","enableEventSystem(system)","disableEventSystem(system)","destroyParticleEventSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Initialize the GPU particle event system on a particle world. Call after createParticleSimWorld + initAllAdvancedSystems (needs indirectSystem.freeList). Parameters: (Object) — Particle world with eventBuffer, eventCounterBuffer, indirectSystem (Object) — { enabled: true } Returns: Event system instance Register/update the sub emitter event handler configuration. Parameters: (Object) — Event system (Object) — Sub emitter configuration: Register a CPU callback for a specific event type (called after readback) Parameters: (Object) — No description in source JSDoc. (number) — EVENT DEATH, EVENT GROUND COLLISION, etc. (Function) — (event) = void, where event = { position, velocity, temperature, type } Remove all callbacks for an event type Step the event system: execute GPU event spawn. Call AFTER stepParticleSimWorld + executeIndirectScan. Parameters: (Object) — Event system Async readback of","contentHash":"354b177e9f958a5f5618f242b5f691ae6ba6849a64f96de9e2f451482e5d652a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleEventSystem.md::0001","path":"engine/reference/sim/particles/ParticleEventSystem.md","title":"sim/particles/ParticleEventSystem.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleEventSystem.js","updated":"","headings":["sim/particles/ParticleEventSystem.js","Functions","initParticleEventSystem(world, options = {})","registerEventHandler(system, config = {})","onParticleEvent(system, eventType, callback)","offParticleEvent(system, eventType)","stepEventSystem(system)","async readbackEvents(system)","getLastEvents(system)","enableEventSystem(system)","disableEventSystem(system)","destroyParticleEventSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Step the event system: execute GPU event spawn. Call AFTER stepParticleSimWorld + executeIndirectScan. Parameters: (Object) — Event system Async readback of particle events from GPU for gameplay callbacks. Returns array of events. Tolerates 1 2 frame latency. Parameters: (Object) — No description in source JSDoc. Returns: Array of { position: [x,y,z], velocity: [x,y,z], temperature, type } Get the last readback events (non async, returns cached result) Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"705a2e8a637a756ed8097ef46d12f9658d58283fcbb907b90c0185e2a0043486"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleFMM.md::0000","path":"engine/reference/sim/particles/ParticleFMM.md","title":"sim/particles/ParticleFMM.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleFMM.js","updated":"","headings":["sim/particles/ParticleFMM.js","Functions","createFmmSystem(device, maxParticles, options = {})","initFmmBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer,)","setFmmParams(system, config = {})","executeFmm(system, device, particleCount, dt, options = {})","async readFmmDiagnostics(system)","destroyFmmSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b1e38da8a09fb340675162cb4c5c6a1d1f457f26ad7bf1f90fd1ecfe6b0e1854"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleFlocking.md::0000","path":"engine/reference/sim/particles/ParticleFlocking.md","title":"sim/particles/ParticleFlocking.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleFlocking.js","updated":"","headings":["sim/particles/ParticleFlocking.js","Functions","createFlockingSystem(device, maxParticles)","initFlockingBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers)","setFlockingParams(system, params)","executeFlocking(system, device, particleCount, dt)","destroyFlockingSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the flocking system. Parameters: (GPUDevice) — No description in source JSDoc. (number) — No description in source JSDoc. Initialize bind groups. Requires neighbor grid buffers. Update flocking parameters. Execute the flocking compute pass. Destroy the system. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD)","contentHash":"dc2af0cc91a8dbdc953a74d3392d18e43c894f1224a49b3551f213f5a3c662c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleFlocking.md::0001","path":"engine/reference/sim/particles/ParticleFlocking.md","title":"sim/particles/ParticleFlocking.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleFlocking.js","updated":"","headings":["sim/particles/ParticleFlocking.js","Functions","createFlockingSystem(device, maxParticles)","initFlockingBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers)","setFlockingParams(system, params)","executeFlocking(system, device, particleCount, dt)","destroyFlockingSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d78aa8807aab6f9b7dfeadcecf94f120cd43b11a908e7498f48ca9030d011d2a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleFxApi.md::0000","path":"engine/reference/sim/particles/ParticleFxApi.md","title":"sim/particles/ParticleFxApi.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleFxApi.js","updated":"","headings":["sim/particles/ParticleFxApi.js","Functions","spawnParticleEmitterEntity(world, options = {})","attachParticleEmitter(world, entityId, emitterDesc)","updateParticleEmitter(world, entityId, changes)","disableParticleEmitter(world, entityId)","removeParticleEmitter(world, entityId)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleIndirectDispatch.md::0000","path":"engine/reference/sim/particles/ParticleIndirectDispatch.md","title":"sim/particles/ParticleIndirectDispatch.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleIndirectDispatch.js","updated":"","headings":["sim/particles/ParticleIndirectDispatch.js","Functions","createIndirectDispatchSystem(device, maxParticles, workgroupSize = 256)","initIndirectDispatchBindGroups(system, device, positionsBuffer, velocitiesBuffer)","executeIndirectScan(system, device, options = {})","updateIndirectMaxSlots(system, device, maxSlots)","destroyIndirectDispatchSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create the indirect dispatch system. Parameters: (GPUDevice) — No description in source JSDoc. (number) — Maximum particle count (number) — Workgroup size for compute shaders (default 256) Initialize bind groups. Call after position/velocity buffers are available. Execute the scan + finalize passes. Run ONCE per frame, before any other particle work. After this call, drawIndirectBuffer and dispatchIndirectBuffer contain GPU computed values. Update maxSlots (e.g., when particle capacity changes). Destroy indirect dispatch system resources. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units :","contentHash":"33473304f79a3a2666901a613390b48d29b7872b84fbc64b6ff04b1c4ff887e2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleIndirectDispatch.md::0001","path":"engine/reference/sim/particles/ParticleIndirectDispatch.md","title":"sim/particles/ParticleIndirectDispatch.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleIndirectDispatch.js","updated":"","headings":["sim/particles/ParticleIndirectDispatch.js","Functions","createIndirectDispatchSystem(device, maxParticles, workgroupSize = 256)","initIndirectDispatchBindGroups(system, device, positionsBuffer, velocitiesBuffer)","executeIndirectScan(system, device, options = {})","updateIndirectMaxSlots(system, device, maxSlots)","destroyIndirectDispatchSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9b78395c8677c2c7fab51de0869295d41cd480b82871bde5d3f2aba6f11b4d42"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLennardJones.md::0000","path":"engine/reference/sim/particles/ParticleLennardJones.md","title":"sim/particles/ParticleLennardJones.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLennardJones.js","updated":"","headings":["sim/particles/ParticleLennardJones.js","Functions","createLennardJonesSystem(device, maxParticles)","initLJBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, elementTable, thermalBuffer)","executeLennardJones(system, device, particleCount, dt)","destroyLennardJonesSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the Lennard Jones system. Initialize bind groups. Requires neighbor grid + element table buffers. Execute the Lennard Jones compute pass. Destroy the system. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs","contentHash":"0f6528a0a37de182451151c2d8c37d1142b86cc86808118740107a7d2ac0835b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLennardJones.md::0001","path":"engine/reference/sim/particles/ParticleLennardJones.md","title":"sim/particles/ParticleLennardJones.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLennardJones.js","updated":"","headings":["sim/particles/ParticleLennardJones.js","Functions","createLennardJonesSystem(device, maxParticles)","initLJBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, elementTable, thermalBuffer)","executeLennardJones(system, device, particleCount, dt)","destroyLennardJonesSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"7013b66c1de674f2feb9109c751aeb9ab724a4d1977642daa7f81b6d9d64c6d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLifetimeCurves.md::0000","path":"engine/reference/sim/particles/ParticleLifetimeCurves.md","title":"sim/particles/ParticleLifetimeCurves.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLifetimeCurves.js","updated":"","headings":["sim/particles/ParticleLifetimeCurves.js","Functions","curveFromLegacy3(arr)","generateCurveLUT(config = {})","createCurveLUTTexture(device, config = {})","updateCurveLUTTexture(device, texture, config = {})","createLifetimeCurvesSystem(device, config = {})","setLifetimeCurves(system, config)","destroyLifetimeCurvesSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Convert a legacy 3 point array [start, mid, end] to a curve. Generate the RGBA LUT data (Float16 or Float32 depending on use). Parameters: (Object) — No description in source JSDoc. (Array) — N point size curve (default: constant) (Array) — N point alpha curve (default: fadeInOut) (Array) — N point velocity curve (default: constant) Returns: 256 × 4 floats (RGBA) Create a GPU 1D LUT texture for lifetime curves. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — { sizeCurve, alphaCurve, velocityCurve } Returns: { texture, textureView, sampler } Update an existing LUT texture with new curve data. Create a lifetime curves system for a particle world. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: System handle Update curves at runtime. Destroy the system. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and","contentHash":"93d0452c3e8d5f8da27920dc648ade56a876d6303061e46af18130b2d50ca889"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLifetimeCurves.md::0001","path":"engine/reference/sim/particles/ParticleLifetimeCurves.md","title":"sim/particles/ParticleLifetimeCurves.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLifetimeCurves.js","updated":"","headings":["sim/particles/ParticleLifetimeCurves.js","Functions","curveFromLegacy3(arr)","generateCurveLUT(config = {})","createCurveLUTTexture(device, config = {})","updateCurveLUTTexture(device, texture, config = {})","createLifetimeCurvesSystem(device, config = {})","setLifetimeCurves(system, config)","destroyLifetimeCurvesSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"4b75f062549181d3c95937e46e242523494767c704d00b749633785994b4d2a4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLightEmission.md::0000","path":"engine/reference/sim/particles/ParticleLightEmission.md","title":"sim/particles/ParticleLightEmission.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLightEmission.js","updated":"","headings":["sim/particles/ParticleLightEmission.js","Functions","createParticleLightSystem(device, options = {})","initParticleLightBindGroup(system, particleWorld)","extractParticleLights(encoder, system, particleCount)","async readbackParticleLights(system)","getParticleLights(system)","destroyParticleLightSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create particle light emission system Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — Max particle lights per frame (default 32) (number) — Min temp to emit light (default 800K) (number) — Light intensity multiplier (default 1.0) Initialize bind group (call once when particle buffers are ready) Execute the light extraction compute pass Parameters: (GPUCommandEncoder) — No description in source JSDoc. (Object) — No description in source JSDoc. (number) — Active particle count 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 } Get the current particle lights (non async, returns last readback result) Destroy particle light system <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced:","contentHash":"d013fb5d7f49c1dd5d919b03c58e16c9dccad3b4c65fa8be5fa3a61f128648c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLightEmission.md::0001","path":"engine/reference/sim/particles/ParticleLightEmission.md","title":"sim/particles/ParticleLightEmission.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLightEmission.js","updated":"","headings":["sim/particles/ParticleLightEmission.js","Functions","createParticleLightSystem(device, options = {})","initParticleLightBindGroup(system, particleWorld)","extractParticleLights(encoder, system, particleCount)","async readbackParticleLights(system)","getParticleLights(system)","destroyParticleLightSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"efd1ca13904aa21da05b59a4fed504e5001933941803e88bf0035fcc068270ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLocalSpace.md::0000","path":"engine/reference/sim/particles/ParticleLocalSpace.md","title":"sim/particles/ParticleLocalSpace.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLocalSpace.js","updated":"","headings":["sim/particles/ParticleLocalSpace.js","Functions","createLocalSpaceSystem(device, maxParticles)","initLocalSpaceBindGroups(system, device, positionBuffer, velocityBuffer)","setEmitterTransform(system, matrix)","setEmitterTransformFromPosRot(system, pos, rotation)","executeWorldToLocal(system, device, particleCount)","executeLocalToWorld(system, device, particleCount)","destroyLocalSpaceSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create local space transform system. Initialize bind groups. Set the emitter transform (4x4 column major matrix). Automatically computes the inverse. Parameters: (Object) — No description in source JSDoc. (Float32Array number[]) — 16 element column major 4x4 matrix Set emitter transform from position + rotation (Euler angles in radians). Transform particles from world space to local space (run before sim step). Transform particles from local space to world space (run after sim step). Destroy the system. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine","contentHash":"0a45c4536882ff89a56d7645c0a2f4bb6af6ea9f4ad5c25a81a15d138431f030"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLocalSpace.md::0001","path":"engine/reference/sim/particles/ParticleLocalSpace.md","title":"sim/particles/ParticleLocalSpace.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLocalSpace.js","updated":"","headings":["sim/particles/ParticleLocalSpace.js","Functions","createLocalSpaceSystem(device, maxParticles)","initLocalSpaceBindGroups(system, device, positionBuffer, velocityBuffer)","setEmitterTransform(system, matrix)","setEmitterTransformFromPosRot(system, pos, rotation)","executeWorldToLocal(system, device, particleCount)","executeLocalToWorld(system, device, particleCount)","destroyLocalSpaceSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"cd7c87a00538ea556e49eb2605e82df77165405d8905ae48bac6c21300d1c3b8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleLongRangeMath.md::0000","path":"engine/reference/sim/particles/ParticleLongRangeMath.md","title":"sim/particles/ParticleLongRangeMath.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleLongRangeMath.js","updated":"","headings":["sim/particles/ParticleLongRangeMath.js","Functions","fmmLevelCellCount(level)","fmmLevelOffset(level)","fmmTotalCellCount(depth)","fmmSelectDepth(particleCount, options = {})","normalizeFmmConfig(config = {})","estimateFmmMemory(config = {})","normalizeParticleMeshConfig(config = {})","estimateParticleMeshMemory(config = {})","generateProlateWindowTable(options = {})","generateProlateSplitTable(windowTable)","prolateSplitFourierResponse(splitDensity, angularFrequency)","fmmCellCoordinate(index, level)","fmmMortonCellIndex(x, y, z, level)","fmmInteractionCells(targetIndex, level)","directLongRangeAccelerations(positions, sources, options = {})","compareLongRangeVectors(reference, approximate)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Pure configuration, layout, and validation math shared by long range particle solvers. Functions 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. 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. Cosine transform of the normalized even PSWF splitting kernel. Constants — Pure configuration, layout, and validation math shared by long range particle solvers. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"a72ec4a80f3c809b7cd8566a34101d5e9ceb62f6a4dcc40f3a8b67c168a282d4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleMeshEwald.md::0000","path":"engine/reference/sim/particles/ParticleMeshEwald.md","title":"sim/particles/ParticleMeshEwald.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleMeshEwald.js","updated":"","headings":["sim/particles/ParticleMeshEwald.js","Functions","createParticleMeshEwaldSystem(device, maxParticles, options = {})","initParticleMeshEwaldBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer,)","setParticleMeshEwaldParams(system, config = {})","executeParticleMeshEwald(system, device, particleCount, dt, options = {})","async readParticleMeshEwaldDiagnostics(system)","destroyParticleMeshEwaldSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"6c10a6e7d70ec6c9b3d5a72f5fd3f21f63d95b79d521bcca6713da7738551284"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleNBody.md::0000","path":"engine/reference/sim/particles/ParticleNBody.md","title":"sim/particles/ParticleNBody.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleNBody.js","updated":"","headings":["sim/particles/ParticleNBody.js","Functions","createNBodySystem(device, maxParticles)","initNBodyBindGroups(system, device, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer)","setNBodyParams(system, config)","executeNBody(system, device, particleCount, dt, options = {})","destroyNBodySystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the N body gravity system. Initialize bind groups. Set N body parameters at runtime. Execute the N body compute pass. Destroy. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"0483d38ebfd02462fa112f81cbbc47d0f96e021ecf5ac331691d30fb2584256d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleNeighborGrid.md::0000","path":"engine/reference/sim/particles/ParticleNeighborGrid.md","title":"sim/particles/ParticleNeighborGrid.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleNeighborGrid.js","updated":"","headings":["sim/particles/ParticleNeighborGrid.js","Functions","createNeighborGridSystem(device, config = {})","initNeighborGridBindGroups(system, device, positionBuffer, velocityBuffer)","setNeighborGridParticleCount(system, particleCount)","buildNeighborGrid(system, device, particleCount)","getNeighborGridBuffers(system)","destroyNeighborGridSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Create a general purpose neighbor grid. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. (number[]) — Grid world origin [x, y, z] (default [ 50, 50, 50]) (number[]) — Grid world extent [x, y, z] (default [50, 50, 50]) (number) — Cell size in world units (default 2.0) (number) — Max particles per cell (default 16) (number) — Max particle count for insert Initialize bind groups (call after particle buffers are created). Update the particle count in params (call each frame if count changes). Execute clear + insert passes. Call once per frame before any queries.","contentHash":"7103cb89ede987a4ebc15950fc6963bf85efeae83baf57aa4e9676b043d50ad8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleNeighborGrid.md::0001","path":"engine/reference/sim/particles/ParticleNeighborGrid.md","title":"sim/particles/ParticleNeighborGrid.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleNeighborGrid.js","updated":"","headings":["sim/particles/ParticleNeighborGrid.js","Functions","createNeighborGridSystem(device, config = {})","initNeighborGridBindGroups(system, device, positionBuffer, velocityBuffer)","setNeighborGridParticleCount(system, particleCount)","buildNeighborGrid(system, device, particleCount)","getNeighborGridBuffers(system)","destroyNeighborGridSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"are created). Update the particle count in params (call each frame if count changes). Execute clear + insert passes. Call once per frame before any queries. Parameters: (Object) — No description in source JSDoc. (GPUDevice) — No description in source JSDoc. (number) — No description in source JSDoc. Get the grid buffers for use in consumer compute shaders. Consumer shaders should bind cellCountsBuffer and cellEntriesBuffer as read only storage. Returns: } Destroy the system. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"8b782178e94e6099c783c6f08bae4f8b69058aa2ae01b06fcf9f3324fa1984ca"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleNoiseTexture.md::0000","path":"engine/reference/sim/particles/ParticleNoiseTexture.md","title":"sim/particles/ParticleNoiseTexture.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleNoiseTexture.js","updated":"","headings":["sim/particles/ParticleNoiseTexture.js","Functions","async createNoiseTextureSystem(device, resolution = 64, period = DEFAULTNOISEPERIOD)","bakeNoiseTexture(system, device)","createDummyNoiseTexture(device)","destroyNoiseTextureSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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\" Functions Create the 3D noise texture system. Parameters: (GPUDevice) — No description in source JSDoc. (number) — Texture resolution (64 or 128) (number) — World space tiling period Returns: Validated noise volume resources Bake the noise volume texture. Call once after creation. This is a one time GPU operation ( 1ms for 64³, 8ms for 128³). 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. Destroy noise texture system resources. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter","contentHash":"a86ceefebba2e01f6e946904541b22604e5fd1b248e77670d0375271df6ff821"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleNoiseTexture.md::0001","path":"engine/reference/sim/particles/ParticleNoiseTexture.md","title":"sim/particles/ParticleNoiseTexture.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleNoiseTexture.js","updated":"","headings":["sim/particles/ParticleNoiseTexture.js","Functions","async createNoiseTextureSystem(device, resolution = 64, period = DEFAULTNOISEPERIOD)","bakeNoiseTexture(system, device)","createDummyNoiseTexture(device)","destroyNoiseTextureSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9f70524a4bd1788282aa02f0398d26239624252ccfc7719ed23cbb91a1e0bb7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleRadixSort.md::0000","path":"engine/reference/sim/particles/ParticleRadixSort.md","title":"sim/particles/ParticleRadixSort.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleRadixSort.js","updated":"","headings":["sim/particles/ParticleRadixSort.js","Functions","createRadixSortSystem(device, maxParticles)","initRadixSortBindGroups(system, device, positionsBuffer)","executeRadixSort(system, device, particleCount, cameraPos)","destroyRadixSortSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create GPU radix sort system for transparent particle rendering. Drop in replacement for the bitonic sort system. Execute GPU radix sort. Drop in replacement for executeGPUSort. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"357e209493ac78e93753b91fa7eadefc33232931125dfc4ee8d2c4cd26e9fcf1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleReactionTable.md::0000","path":"engine/reference/sim/particles/ParticleReactionTable.md","title":"sim/particles/ParticleReactionTable.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleReactionTable.js","updated":"","headings":["sim/particles/ParticleReactionTable.js","Functions","createReactionTable(device)","destroyReactionTable(table)","addReaction(table, matA, matB, config = {})","removeReaction(table, index)","clearReactions(table)","uploadReactionTable(table)","registerDefaultReactions(table)","getReactions(table)","getMaterialName(matId)","getMaterialForSubstance(substanceKey)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create a reaction table with GPU uniform buffer. Parameters: (GPUDevice) — No description in source JSDoc. Returns: Reaction table instance Destroy the reaction table and release GPU resources. Add a reaction rule to the table. Parameters: (Object) — Reaction table (number) — Material ID of reactant A (number) — Material ID of reactant B (Object) — Reaction configuration: Returns: Rule index, or 1 if table is full Remove a reaction rule by index. Remove all reaction rules. Upload the reaction table to the GPU uniform buffer. Call once after adding/removing reactions (not every frame). Register built in reaction presets. Parameters: (Object) — Reaction table Get the current reaction rules. Get a material name from its ID. Look up the material ID for a substance preset key. Parameters: (string) — e.g. 'fire', 'water', 'lava' Returns: Material ID (0 if not found) Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes","contentHash":"689a9a810a058f1e9373d45b2f4d0463392ba3a10acbdae02088a358194fdfe4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleReactionTable.md::0001","path":"engine/reference/sim/particles/ParticleReactionTable.md","title":"sim/particles/ParticleReactionTable.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleReactionTable.js","updated":"","headings":["sim/particles/ParticleReactionTable.js","Functions","createReactionTable(device)","destroyReactionTable(table)","addReaction(table, matA, matB, config = {})","removeReaction(table, index)","clearReactions(table)","uploadReactionTable(table)","registerDefaultReactions(table)","getReactions(table)","getMaterialName(matId)","getMaterialForSubstance(substanceKey)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"6b75eee12f95a2fbd298d6bb672c272e0be3ee56336e263dddb496a95eac35c0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleRibbonTrail.md::0000","path":"engine/reference/sim/particles/ParticleRibbonTrail.md","title":"sim/particles/ParticleRibbonTrail.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleRibbonTrail.js","updated":"","headings":["sim/particles/ParticleRibbonTrail.js","Functions","createRibbonTrailSystem(device, maxParticles, historyLength = 8, targetFormat = 'bgra8unorm', options = {})","initRibbonTrailBindGroups(system, device, positionsBuffer, velocitiesBuffer)","updateTrailHistory(system, device)","renderRibbonTrails(pass, system, viewProjMatrix, cameraPos, instanceCount)","destroyRibbonTrailSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create ribbon trail system. Parameters: (GPUDevice) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Number of position history frames per particle (default 8) (string) — Render target format (e.g. 'bgra8unorm', 'rgba16float') (object) — { depthFormat, blendMode } Initialize bind groups for the trail system. Call after the position buffer is available. Update trail history for all particles (compute pass). Call once per frame AFTER the main sim step. Render ribbon trails into the current render pass. Parameters: (GPURenderPassEncoder) — Active render pass (Object) — Ribbon trail system (Float32Array) — 4×4 view projection matrix (16 floats) (Array Float32Array) — Camera position [x, y, z] (number) — Number of particles to render trails for Destroy ribbon trail system resources. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass","contentHash":"66ca4bc9c515bf69872f14c3ca4e2913ef1ca4d508134ba28bd35ea2d0f10c44"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleRibbonTrail.md::0001","path":"engine/reference/sim/particles/ParticleRibbonTrail.md","title":"sim/particles/ParticleRibbonTrail.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleRibbonTrail.js","updated":"","headings":["sim/particles/ParticleRibbonTrail.js","Functions","createRibbonTrailSystem(device, maxParticles, historyLength = 8, targetFormat = 'bgra8unorm', options = {})","initRibbonTrailBindGroups(system, device, positionsBuffer, velocitiesBuffer)","updateTrailHistory(system, device)","renderRibbonTrails(pass, system, viewProjMatrix, cameraPos, instanceCount)","destroyRibbonTrailSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"ec92fc58c43c49e112600f0ba9f7e089fd68d332815557211d78978993560d3e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSDFAttraction.md::0000","path":"engine/reference/sim/particles/ParticleSDFAttraction.md","title":"sim/particles/ParticleSDFAttraction.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSDFAttraction.js","updated":"","headings":["sim/particles/ParticleSDFAttraction.js","Functions","createSDFAttractionSystem(device)","addSDFAttractor(system, config = {})","updateSDFAttractor(system, index, config)","initSDFAttractionBindGroup(system, device, positionBuffer, velocityBuffer)","executeSDFAttraction(system, device, particleCount, dt = 1/60, time = 0)","clearSDFAttractors(system)","destroySDFAttractionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create an SDF attraction system. Parameters: (GPUDevice) — No description in source JSDoc. Add an SDF attractor. Parameters: (Object) — No description in source JSDoc. (Object) — No description in source JSDoc. (string) — 'sphere', 'box', 'torus', 'cylinder' (number[]) — [x, y, z] (number) — No description in source JSDoc. (number) — positive = attract, negative = repel (number) — prevents singularity (default 0.1) (number) — tangential force (default 0) (number) — velocity damping near surface (default 0) (number[]) — for box/torus/cylinder Returns: Attractor index, or 1 if full Update an existing attractor. Initialize bind group (call after particle buffers are created). Execute SDF attraction compute pass. Clear all attractors. Destroy the system. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase","contentHash":"98d377ad4909666a3ce4bdb2e621c5d0bc102aaa07e53789e277a1a94ac1c68f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSDFAttraction.md::0001","path":"engine/reference/sim/particles/ParticleSDFAttraction.md","title":"sim/particles/ParticleSDFAttraction.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSDFAttraction.js","updated":"","headings":["sim/particles/ParticleSDFAttraction.js","Functions","createSDFAttractionSystem(device)","addSDFAttractor(system, config = {})","updateSDFAttractor(system, index, config)","initSDFAttractionBindGroup(system, device, positionBuffer, velocityBuffer)","executeSDFAttraction(system, device, particleCount, dt = 1/60, time = 0)","clearSDFAttractors(system)","destroySDFAttractionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"767e31ac84d7713615831865c35cbc1b59d89ed4bf0472a3ca459fe2a5281784"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSPH.md::0000","path":"engine/reference/sim/particles/ParticleSPH.md","title":"sim/particles/ParticleSPH.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSPH.js","updated":"","headings":["sim/particles/ParticleSPH.js","Functions","createSPHSystem(device, maxParticles)","initSPHBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, thermalBuffer)","setSPHParams(system, config)","executeSPH(system, device, particleCount, dt)","getSPHDensityBuffer(system)","destroySPHSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the SPH fluid system. Initialize bind groups. Requires neighbor grid buffers. Set SPH parameters at runtime. Execute the two pass SPH compute. Get the density/pressure buffer for use by surface renderers. Destroy. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use","contentHash":"fcba2bf4b85166776043d7c75f1735b952f0306e449ce9fcee33f0c71b7b6f8f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSPH.md::0001","path":"engine/reference/sim/particles/ParticleSPH.md","title":"sim/particles/ParticleSPH.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSPH.js","updated":"","headings":["sim/particles/ParticleSPH.js","Functions","createSPHSystem(device, maxParticles)","initSPHBindGroups(system, device, positionBuffer, velocityBuffer, gridBuffers, thermalBuffer)","setSPHParams(system, config)","executeSPH(system, device, particleCount, dt)","getSPHDensityBuffer(system)","destroySPHSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"0e57563f3ab5aa412de9ea6c2b1d4ae87edef6018d88173348ae4a63dc357ebf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSchema.md::0000","path":"engine/reference/sim/particles/ParticleSchema.md","title":"sim/particles/ParticleSchema.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSchema.js","updated":"","headings":["sim/particles/ParticleSchema.js","Functions","packParticleMeta(size, renderMode, shape, behavior = 0, mass = 1.0, drag = 0.02)","unpackParticleMeta(packed)","getBehaviorId(behaviorName)","validateField(value, fieldSchema)","validateEmitterConfig(config)","createDefaultEmitterConfig(overrides = {})","createDefaultParticleParams(overrides = {})","createEmptySnapshot(time, frameIndex)","createEmitterSnapshot(emitter)","getShapeId(shapeName)","getRenderModeId(modeName)","getShapeName(shapeId)","getRenderModeName(modeId)","serializeEmitterConfig(config)","deserializeEmitterConfig(json)","serializeSnapshot(snapshot)","deserializeSnapshot(json)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Pack meta.w value from individual components (full format with physics) Format: mass 1e8 + drag 1e6 + size 1e4 + renderMode 1e3 + shape 10 + behavior Parameters: (number) — Particle size (0 99) (number) — Render mode ID (0 9) (number) — Shape ID (0 9) (number) — Behavior ID (0 9) (number) — Particle mass (0.0 9.9, encoded as 0 99) (number) — Air resistance (0.0 0.99, encoded as 0 99) Unpack meta.w value to individual components Get behavior ID from behavior name Validate a value against a schema field Validate an emitter config against schema Create a default emitter config Create a default particle params uniform buffer data Create an empty particle snapshot Create an emitter snapshot from live emitter state Get shape ID from shape name Get render mode ID from mode name Get shape name from ID Get render mode name from ID Serialize emitter config to JSON safe object Deserialize emitter config from JSON Serialize particle snapshot to JSON safe object Deserialize particle snapshot from JSON Constants — Per particle data layout in GPU buffers. Each particle uses 3 vec4s (48 bytes total). — Frame uniforms passed to all particle shaders — Per draw particle parameters — Force parameters uniform (group 2 binding 0 in main particle compute shader) Controls global wind, turbulence, force points, vortex, and velocity clamping. — Shape types for particle rendering — Render modes for particle blending — Behavior types for particle movement patterns — Complete emitter configuration schema — Element layer for emitter mixing — Single particle snapshot entry — Emitter state snapshot —","contentHash":"5523f0e834cd5edb1398d643871bbd02b8830db2ff660e9774063c722c36e8c7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSchema.md::0001","path":"engine/reference/sim/particles/ParticleSchema.md","title":"sim/particles/ParticleSchema.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSchema.js","updated":"","headings":["sim/particles/ParticleSchema.js","Functions","packParticleMeta(size, renderMode, shape, behavior = 0, mass = 1.0, drag = 0.02)","unpackParticleMeta(packed)","getBehaviorId(behaviorName)","validateField(value, fieldSchema)","validateEmitterConfig(config)","createDefaultEmitterConfig(overrides = {})","createDefaultParticleParams(overrides = {})","createEmptySnapshot(time, frameIndex)","createEmitterSnapshot(emitter)","getShapeId(shapeName)","getRenderModeId(modeName)","getShapeName(shapeId)","getRenderModeName(modeId)","serializeEmitterConfig(config)","deserializeEmitterConfig(json)","serializeSnapshot(snapshot)","deserializeSnapshot(json)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"movement patterns — Complete emitter configuration schema — Element layer for emitter mixing — Single particle snapshot entry — Emitter state snapshot — Complete particle system snapshot <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9b2970dad98d2b0b0dcc557567b0303dc86e36e1302e16cf660e92258abbd516"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSharedMemCollision.md::0000","path":"engine/reference/sim/particles/ParticleSharedMemCollision.md","title":"sim/particles/ParticleSharedMemCollision.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSharedMemCollision.js","updated":"","headings":["sim/particles/ParticleSharedMemCollision.js","Functions","createSharedMemCollidePipeline(device, bindGroupLayout, tileSize = 256)","dispatchSharedMemCollide(pipeline, bindGroup, pass, gridDims)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleSharedMemCollision.js Workgroup shared memory particle collision Drop in replacement for the grid collision 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\" Functions Create the shared memory collide pipeline. This pipeline uses the SAME bind group layout as the existing grid collision system. Parameters: (GPUDevice) — No description in source JSDoc. (GPUBindGroupLayout) — From the existing grid collision system (number) — Workgroup/tile size (default 256) Execute the shared memory collide pass. Dispatches one workgroup per grid cell. Uses the existing grid bind group. Parameters: (GPUComputePipeline) — From createSharedMemCollidePipeline (GPUBindGroup) — Existing grid collision bind group (GPUComputePassEncoder) — Active compute pass (number) — Grid dimensions (e.g. 32) <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics,","contentHash":"6a6e6152e437bc85953153eb5a8a7d2f5b75d2226adb12311442342c90adaee8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSharedMemCollision.md::0001","path":"engine/reference/sim/particles/ParticleSharedMemCollision.md","title":"sim/particles/ParticleSharedMemCollision.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSharedMemCollision.js","updated":"","headings":["sim/particles/ParticleSharedMemCollision.js","Functions","createSharedMemCollidePipeline(device, bindGroupLayout, tileSize = 256)","dispatchSharedMemCollide(pipeline, bindGroup, pass, gridDims)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"compute pass (number) — Grid dimensions (e.g. 32) <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"7b4020d039eb6917f2bf755d31345061c8acc44ef3eb8040eba1293f68726a1e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSimWorld.md::0000","path":"engine/reference/sim/particles/ParticleSimWorld.md","title":"sim/particles/ParticleSimWorld.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSimWorld.js","updated":"","headings":["sim/particles/ParticleSimWorld.js","Functions","async createParticleSimWorld(gpuDevice, options = {})","destroyParticleSimWorld(world)","initAdvancedParticleBuffers(world, options = {})","async initAllAdvancedSystems(world, options = {})","createHeatConductionSystem(world)","stepHeatConduction(world, dt)","stepAdvancedSystems(world, dt, options = {})","renderWorldRibbonTrails(pass, world, viewProjMatrix, cameraPos, instanceCount)","sortParticlesForRendering(world, cameraPos)","addParticleWire(world, particleA, particleB, restLength, stiffness = 0.5)","createGPURope(world, startPos, endPos, segments, opts = {})","uploadParticleVelocities(world, particleOffset, velocities)","updateRopeAttachment(world, entityId, which, worldPos)","destroyGPURope(world, entityId)","addParticleCollider(world, type, center, radius, halfExtents)","clearParticleColliders(world)","rebuildParticleColliders(world, colliders)","seedParticles(world, count, options = {})","setParticleAtlasMode(world, mode)","initSnapshotSystem(world, options = {})","updateSnapshots(world, emitters, currentTimeMs)","captureSnapshot(world, emitters, currentTimeMs)","beginRewind(world)","endRewind(world)","updateRewind(world, emitters, dt)","rewindToTime(world, emitters, targetTimeMs)","rewindToFrame(world, emitters, frameIndex)","setRewindSpeed(world, speed)","getRewindInfo(world)","isRewinding(world)","clearSnapshots(world)","updateAdaptiveQuality(world, frameTimeMs)","getParticleStats(world)","async readbackPositionsFromGPU(world, targetPositions, particleCount)","async readbackVelocitiesFromGPU(world, targetVelocities, particleCount)","async readbackThermalFromGPU(world, targetThermal, particleCount)","attachFluidWorld(particleWorld, fluidWorld, worldMin, worldMax)","stepParticleSimWorld(world, deltaSeconds, options = {})","createLineRenderPipeline(device, format)","createLineComputePipelines(device)","createLineUniformBuffer(device)","initLineRenderingSystem(world, format)","stepLineGeneration(world, options = {})","renderParticleLines(world, pass, viewProj)","updateMouseInteraction(ndcX, ndcY, active = true)","getMouseState()","addForcePoint(point)","removeForcePoint(index)","clearForcePoints()","getForcePoints()","updateForcePoint(index, x, y, z, strength)","attachWindSystem(world, windSystem)","detachWindSystem(world)","updateKillZones(world, zones)","clearKillZones(world)","startDissolve(groupId, duration = 1.0, direction = 'out')","getDissolve(groupId)","sampleCurlNoise(x, y, z, scale = 1, time = 0)","initTrailSystem(world, historyLength = 8)","registerSubEmitter(parentType, config)","getSubEmitterConfig(parentType)","clearSubEmitters()","configureParticleLongRange(world, config = {})","getParticleLongRangeState(world)","ensureSystemEnabled(world, systemName, config)","warmUpParticleWorld(world, warmUpSeconds = 2.0, options = {})","reserveParticles(particleWorld, count, backend = 'free')","releaseParticles(particleWorld, count, backend)","uploadParticles(particleWorld, particleOffset, positions)","registerRopeChain(particleWorld, ropeMetadata)","unregisterRopeChain(particleWorld, entityId)","getTotalReservedParticles(particleWorld)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Initialize spatial grid and line buffers for advanced particle features. Call this after createParticleSimWorld to enable line connections and neighbor lookups. Initialize all advanced particle systems (sorting, wire constraints, SDF collision, etc.) Call after createParticleSimWorld and initAdvancedParticleBuffers. Create heat conduction + phase transition compute system. Requires spatial grid to be initialized (gridCountsBuffer, gridIndicesBuffer). Execute heat conduction compute pass. Execute all active advanced particle systems in the simulation step. Render ribbon trails into the given render pass. Call during the render loop AFTER particle rendering. Parameters: (GPURenderPassEncoder) — No description in source JSDoc. (Object) — No description in source JSDoc. (Float32Array) — 4×4 view projection matrix (Array Float32Array) — [x, y, z] (number) — particle count to render trails for 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). Add a wire constraint between two particles. Create a GPU simulated rope with particles and constraints Parameters: (Object) — Particle world (Array<number ) — [x, y, z] start position (Array<number ) — [x, y, z] end position (number) — Number of rope segments (Object) — Options { stiffness, fixStart, fixEnd, entityId, color, radius } Returns: { particleStart, particleCount, constraintStart, constraintCount } Upload particle velocities to","contentHash":"93cdef582c1dc359501718e102e5a0bea08dec29bafaffae4a8a367d95c8f872"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSimWorld.md::0001","path":"engine/reference/sim/particles/ParticleSimWorld.md","title":"sim/particles/ParticleSimWorld.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSimWorld.js","updated":"","headings":["sim/particles/ParticleSimWorld.js","Functions","async createParticleSimWorld(gpuDevice, options = {})","destroyParticleSimWorld(world)","initAdvancedParticleBuffers(world, options = {})","async initAllAdvancedSystems(world, options = {})","createHeatConductionSystem(world)","stepHeatConduction(world, dt)","stepAdvancedSystems(world, dt, options = {})","renderWorldRibbonTrails(pass, world, viewProjMatrix, cameraPos, instanceCount)","sortParticlesForRendering(world, cameraPos)","addParticleWire(world, particleA, particleB, restLength, stiffness = 0.5)","createGPURope(world, startPos, endPos, segments, opts = {})","uploadParticleVelocities(world, particleOffset, velocities)","updateRopeAttachment(world, entityId, which, worldPos)","destroyGPURope(world, entityId)","addParticleCollider(world, type, center, radius, halfExtents)","clearParticleColliders(world)","rebuildParticleColliders(world, colliders)","seedParticles(world, count, options = {})","setParticleAtlasMode(world, mode)","initSnapshotSystem(world, options = {})","updateSnapshots(world, emitters, currentTimeMs)","captureSnapshot(world, emitters, currentTimeMs)","beginRewind(world)","endRewind(world)","updateRewind(world, emitters, dt)","rewindToTime(world, emitters, targetTimeMs)","rewindToFrame(world, emitters, frameIndex)","setRewindSpeed(world, speed)","getRewindInfo(world)","isRewinding(world)","clearSnapshots(world)","updateAdaptiveQuality(world, frameTimeMs)","getParticleStats(world)","async readbackPositionsFromGPU(world, targetPositions, particleCount)","async readbackVelocitiesFromGPU(world, targetVelocities, particleCount)","async readbackThermalFromGPU(world, targetThermal, particleCount)","attachFluidWorld(particleWorld, fluidWorld, worldMin, worldMax)","stepParticleSimWorld(world, deltaSeconds, options = {})","createLineRenderPipeline(device, format)","createLineComputePipelines(device)","createLineUniformBuffer(device)","initLineRenderingSystem(world, format)","stepLineGeneration(world, options = {})","renderParticleLines(world, pass, viewProj)","updateMouseInteraction(ndcX, ndcY, active = true)","getMouseState()","addForcePoint(point)","removeForcePoint(index)","clearForcePoints()","getForcePoints()","updateForcePoint(index, x, y, z, strength)","attachWindSystem(world, windSystem)","detachWindSystem(world)","updateKillZones(world, zones)","clearKillZones(world)","startDissolve(groupId, duration = 1.0, direction = 'out')","getDissolve(groupId)","sampleCurlNoise(x, y, z, scale = 1, time = 0)","initTrailSystem(world, historyLength = 8)","registerSubEmitter(parentType, config)","getSubEmitterConfig(parentType)","clearSubEmitters()","configureParticleLongRange(world, config = {})","getParticleLongRangeState(world)","ensureSystemEnabled(world, systemName, config)","warmUpParticleWorld(world, warmUpSeconds = 2.0, options = {})","reserveParticles(particleWorld, count, backend = 'free')","releaseParticles(particleWorld, count, backend)","uploadParticles(particleWorld, particleOffset, positions)","registerRopeChain(particleWorld, ropeMetadata)","unregisterRopeChain(particleWorld, entityId)","getTotalReservedParticles(particleWorld)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"fixStart, fixEnd, entityId, color, radius } Returns: { particleStart, particleCount, constraintStart, constraintCount } Upload particle velocities to GPU buffer Parameters: (Object) — Particle world (number) — Start index (Array<Array<number ) — Array of [vx, vy, vz] Update attachment constraint target position Parameters: (Object) — Particle world (number) — Rope entity ID (string) — 'start' or 'end' (Array<number ) — New [x, y, z] position Destroy a GPU rope and release its resources Parameters: (Object) — Particle world (number) — Entity ID of the rope Add an SDF collider to the particle system. Clear all SDF colliders (call before per frame rebuild). Batch rebuild SDF colliders from an array of descriptors. Call each frame with entity SDF shapes for proper mesh collision. Parameters: (Object) — Particle world Seed particles on GPU with random positions/velocities. Set texture atlas sprite assignment mode. Initialize snapshot system for time rewind. Parameters: (Object) — Particle world (Object) — { historySeconds, snapshotRate } Auto capture snapshots during simulation (call each frame). Manually take a snapshot. Start time rewind mode. Stop time rewind and resume simulation. Step rewind playback (call each frame while rewinding). Seek to a specific time in history. Restore a specific frame from history. Set rewind playback speed ( 1 = reverse, 1 = forward, 0.5 = slow, etc.) Get snapshot/rewind status info. Check if currently in rewind mode. Clear all snapshot history. 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","contentHash":"cfd3f24a4c91fd64ddc36f2677d895707ae05b72048e36c22492f9449eda444e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSimWorld.md::0002","path":"engine/reference/sim/particles/ParticleSimWorld.md","title":"sim/particles/ParticleSimWorld.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSimWorld.js","updated":"","headings":["sim/particles/ParticleSimWorld.js","Functions","async createParticleSimWorld(gpuDevice, options = {})","destroyParticleSimWorld(world)","initAdvancedParticleBuffers(world, options = {})","async initAllAdvancedSystems(world, options = {})","createHeatConductionSystem(world)","stepHeatConduction(world, dt)","stepAdvancedSystems(world, dt, options = {})","renderWorldRibbonTrails(pass, world, viewProjMatrix, cameraPos, instanceCount)","sortParticlesForRendering(world, cameraPos)","addParticleWire(world, particleA, particleB, restLength, stiffness = 0.5)","createGPURope(world, startPos, endPos, segments, opts = {})","uploadParticleVelocities(world, particleOffset, velocities)","updateRopeAttachment(world, entityId, which, worldPos)","destroyGPURope(world, entityId)","addParticleCollider(world, type, center, radius, halfExtents)","clearParticleColliders(world)","rebuildParticleColliders(world, colliders)","seedParticles(world, count, options = {})","setParticleAtlasMode(world, mode)","initSnapshotSystem(world, options = {})","updateSnapshots(world, emitters, currentTimeMs)","captureSnapshot(world, emitters, currentTimeMs)","beginRewind(world)","endRewind(world)","updateRewind(world, emitters, dt)","rewindToTime(world, emitters, targetTimeMs)","rewindToFrame(world, emitters, frameIndex)","setRewindSpeed(world, speed)","getRewindInfo(world)","isRewinding(world)","clearSnapshots(world)","updateAdaptiveQuality(world, frameTimeMs)","getParticleStats(world)","async readbackPositionsFromGPU(world, targetPositions, particleCount)","async readbackVelocitiesFromGPU(world, targetVelocities, particleCount)","async readbackThermalFromGPU(world, targetThermal, particleCount)","attachFluidWorld(particleWorld, fluidWorld, worldMin, worldMax)","stepParticleSimWorld(world, deltaSeconds, options = {})","createLineRenderPipeline(device, format)","createLineComputePipelines(device)","createLineUniformBuffer(device)","initLineRenderingSystem(world, format)","stepLineGeneration(world, options = {})","renderParticleLines(world, pass, viewProj)","updateMouseInteraction(ndcX, ndcY, active = true)","getMouseState()","addForcePoint(point)","removeForcePoint(index)","clearForcePoints()","getForcePoints()","updateForcePoint(index, x, y, z, strength)","attachWindSystem(world, windSystem)","detachWindSystem(world)","updateKillZones(world, zones)","clearKillZones(world)","startDissolve(groupId, duration = 1.0, direction = 'out')","getDissolve(groupId)","sampleCurlNoise(x, y, z, scale = 1, time = 0)","initTrailSystem(world, historyLength = 8)","registerSubEmitter(parentType, config)","getSubEmitterConfig(parentType)","clearSubEmitters()","configureParticleLongRange(world, config = {})","getParticleLongRangeState(world)","ensureSystemEnabled(world, systemName, config)","warmUpParticleWorld(world, warmUpSeconds = 2.0, options = {})","reserveParticles(particleWorld, count, backend = 'free')","releaseParticles(particleWorld, count, backend)","uploadParticles(particleWorld, particleOffset, positions)","registerRopeChain(particleWorld, ropeMetadata)","unregisterRopeChain(particleWorld, entityId)","getTotalReservedParticles(particleWorld)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"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 Get particle system stats for performance overlay. Attach a fluid world to the particle simulation. Particles will sample and follow the fluid velocity field. Create line rendering pipeline for particle connections Create line compute pipelines for spatial grid and line generation Create line uniform buffer for compute and render In","contentHash":"c539d1ee1ad02d1580c384ab84379728d9b247aa6d438c7b5d0993c350e5e905"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSnapshot.md::0000","path":"engine/reference/sim/particles/ParticleSnapshot.md","title":"sim/particles/ParticleSnapshot.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSnapshot.js","updated":"","headings":["sim/particles/ParticleSnapshot.js","Functions","createSnapshotSystem(device, maxParticles, options = {})","initSnapshotBindGroups(snapshot, positionBuffer, velocityBuffer, metaBuffer, thermalBuffer)","takeSnapshot(snapshot, emitters, currentTimeMs)","autoSnapshot(snapshot, emitters, currentTimeMs)","restoreFrame(snapshot, emitters, frameIndex)","restoreInterpolated(snapshot, emitters, frameA, frameB, t)","seekToTime(snapshot, emitters, targetTimeMs)","startRewind(snapshot)","stopRewind(snapshot)","stepRewind(snapshot, emitters, dt)","setPlaybackSpeed(snapshot, speed)","getSnapshotInfo(snapshot)","clearHistory(snapshot)","destroySnapshotSystem(snapshot)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create particle snapshot system for time rewind Initialize bind groups with particle buffers Take a snapshot of current state Auto snapshot based on interval (call every frame) Restore exact frame from history Restore with interpolation between two frames Seek to a specific time in history Start rewind mode Stop rewind and resume simulation Step rewind playback (call each frame while rewinding) Set playback speed ( 1 = reverse, 1 = forward, 0.5 = slow forward, etc.) Get current playback info Clear all history Destroy snapshot system <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"848de25b88b2dff9d4ba0e282b127cc8787680fcedd116cc9953664785caefb8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSnapshotDelta.md::0000","path":"engine/reference/sim/particles/ParticleSnapshotDelta.md","title":"sim/particles/ParticleSnapshotDelta.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSnapshotDelta.js","updated":"","headings":["sim/particles/ParticleSnapshotDelta.js","Functions","hashParticleKeyframe(frame)","hashParticleKeyframeSemantic(frame, sampleVec4Count = 1024)","createDeltaSnapshotSystem(options = {})","async captureFrame(snapshot, particleState, emitters, currentTimeMs)","async autoCapture(snapshot, particleState, emitters, currentTimeMs)","reconstructState(snapshot, frameIndex)","restoreToFrame(snapshot, particleState, emitters, frameIndex)","restoreInterpolated(snapshot, particleState, emitters, frameA, frameB, t)","seekToTime(snapshot, particleState, emitters, targetTimeMs)","startRewind(snapshot)","stopRewind(snapshot)","stepRewind(snapshot, particleState, emitters, dtMs)","setPlaybackSpeed(snapshot, speed)","setEasingType(snapshot, easingType)","getEasingTypes()","getSnapshotInfo(snapshot)","truncateHistoryAfterTime(snapshot, timeMs)","clearHistory(snapshot)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create delta compressed particle snapshot system Capture a snapshot (keyframe or delta based on interval) Captures EVERYTHING: positions, velocities, meta, slotInfo, liveCount, freeSlots Parameters: (Object) — Snapshot system (Object) — Full particle state { positions, velocities, meta, slotInfo, liveCount, instanceCount, freeSlots } (Array) — Emitter array (number) — Current time in milliseconds Auto capture based on interval NON BLOCKING version Uses double buffered GPU readback to avoid blocking the main thread Parameters: (Object) — Snapshot system (Object) — Full particle state object (Array) — Emitter array (number) — Current time in milliseconds 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 Restore FULL particle state to a specific frame Parameters: (Object) — Snapshot system (Object) — Target particle state object to restore into (Array) — Emitter array (number) — Target frame index Restore with interpolation between two frames Parameters: (Object) — Snapshot system (Object) — Target particle state","contentHash":"9ca08f59193bb7f261baa01dd903771348b18b179339b793494a7857a15c95ee"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSnapshotDelta.md::0001","path":"engine/reference/sim/particles/ParticleSnapshotDelta.md","title":"sim/particles/ParticleSnapshotDelta.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSnapshotDelta.js","updated":"","headings":["sim/particles/ParticleSnapshotDelta.js","Functions","hashParticleKeyframe(frame)","hashParticleKeyframeSemantic(frame, sampleVec4Count = 1024)","createDeltaSnapshotSystem(options = {})","async captureFrame(snapshot, particleState, emitters, currentTimeMs)","async autoCapture(snapshot, particleState, emitters, currentTimeMs)","reconstructState(snapshot, frameIndex)","restoreToFrame(snapshot, particleState, emitters, frameIndex)","restoreInterpolated(snapshot, particleState, emitters, frameA, frameB, t)","seekToTime(snapshot, particleState, emitters, targetTimeMs)","startRewind(snapshot)","stopRewind(snapshot)","stepRewind(snapshot, particleState, emitters, dtMs)","setPlaybackSpeed(snapshot, speed)","setEasingType(snapshot, easingType)","getEasingTypes()","getSnapshotInfo(snapshot)","truncateHistoryAfterTime(snapshot, timeMs)","clearHistory(snapshot)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"array (number) — Target frame index Restore with interpolation between two frames Parameters: (Object) — Snapshot system (Object) — Target particle state object (Array) — Emitter array (number) — First frame index (number) — Second frame index (number) — Interpolation factor (0 1) Seek to specific time Parameters: (Object) — Snapshot system (Object) — Target particle state object (Array) — Emitter array (number) — Target time in milliseconds Start rewind mode Stop rewind Step rewind playback restores FULL particle state including spawn/death Parameters: (Object) — Snapshot system (Object) — Target particle state object (Array) — Emitter array (number) — Delta time in milliseconds Set playback speed Set easing type for interpolation Parameters: (Object) — Snapshot system (string) — One of: linear, easeInQuad, easeOutQuad, easeInOutQuad, Get available easing types Get snapshot info Clear all history <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"a3c7ab02d07b7d95d41ef1b489bf52e9f8c8216244ae73e18379a01e563f11b9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSoftContainment.md::0000","path":"engine/reference/sim/particles/ParticleSoftContainment.md","title":"sim/particles/ParticleSoftContainment.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSoftContainment.js","updated":"","headings":["sim/particles/ParticleSoftContainment.js","Functions","createSoftContainmentSystem(device, maxParticles)","addContainmentVolume(system, volume)","initContainmentBindGroups(system, device, positionBuffer, velocityBuffer)","executeSoftContainment(system, device, particleCount, dt)","clearContainmentVolumes(system)","destroySoftContainmentSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the soft containment system. Add a containment volume. Parameters: (Object) — No description in source JSDoc. (Object) — { type: 'sphere' 'box' 'cylinder', center, radius, halfExtent, halfHeight } Initialize bind groups. Execute the soft containment compute pass. Clear all volumes. Destroy the system. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable","contentHash":"4bbeb16a2972f61822fc59cff94c655a8d7f1c3d63d8cdefb4c207c8497c2992"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSoftContainment.md::0001","path":"engine/reference/sim/particles/ParticleSoftContainment.md","title":"sim/particles/ParticleSoftContainment.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSoftContainment.js","updated":"","headings":["sim/particles/ParticleSoftContainment.js","Functions","createSoftContainmentSystem(device, maxParticles)","addContainmentVolume(system, volume)","initContainmentBindGroups(system, device, positionBuffer, velocityBuffer)","executeSoftContainment(system, device, particleCount, dt)","clearContainmentVolumes(system)","destroySoftContainmentSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"(CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"c62126f0d27082ee9b68e066feb45fd7bb7bffa5093cab1732b6d2e7e62aa6b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSpawnShapes.md::0000","path":"engine/reference/sim/particles/ParticleSpawnShapes.md","title":"sim/particles/ParticleSpawnShapes.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSpawnShapes.js","updated":"","headings":["sim/particles/ParticleSpawnShapes.js","Functions","spawnSphere(center, radius, surfaceOnly = false)","spawnHemisphere(center, radius, axis = [0, 1, 0], surfaceOnly = false)","spawnBox(min, max, surfaceOnly = false)","spawnBoxCenter(center, halfExtents, surfaceOnly = false)","spawnCylinder(center, axis, radius, height, surfaceOnly = false)","spawnCone(apex, axis, angle, height, surfaceOnly = false)","spawnRing(center, axis, radius, thickness = 0)","spawnTorus(center, axis, majorRadius, minorRadius, surfaceOnly = false)","spawnLine(a, b, thickness = 0)","spawnDisc(center, normal, radius, innerRadius = 0)","spawnGrid(origin, axisU, axisV, countU, countV, index, jitter = 0)","spawnFromShape(shape, emitterPos, index = 0)","velocityFromNormal(normal, speed, spread = 0.2)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Spawn inside or on a sphere Parameters: (number[]) — [x, y, z] (number) — No description in source JSDoc. (boolean) — true = on surface, false = inside volume Returns: } Spawn on a hemisphere (oriented along axis) Parameters: (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. (number[]) — Hemisphere direction [x, y, z] (default up) (boolean) — No description in source JSDoc. Spawn inside or on a box (AABB) Parameters: (number[]) — [minX, minY, minZ] (number[]) — [maxX, maxY, maxZ] (boolean) — No description in source JSDoc. Spawn inside or on a box defined by center + half extents Spawn inside or on a cylinder Parameters: (number[]) — Center of cylinder (number[]) — Cylinder axis direction (will be normalized) (number) — No description in source JSDoc. (number) — Total height (extends height/2 each direction from center) (boolean) — No description in source JSDoc. Spawn inside or on a cone Parameters: (number[]) — Tip of the cone (number[]) — Cone axis direction (from apex toward base) (number) — Half angle in radians (number) — Height from apex to base (boolean) — No description in source JSDoc. Spawn on a ring (circle in 3D space) Parameters: (number[]) — No description in source JSDoc. (number[]) — Ring normal direction (number) — Ring radius (number) —","contentHash":"dca4029414b13510c3f37a438eaa4cb3f9da7cc425aa952cdc629db433d24d2b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSpawnShapes.md::0001","path":"engine/reference/sim/particles/ParticleSpawnShapes.md","title":"sim/particles/ParticleSpawnShapes.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSpawnShapes.js","updated":"","headings":["sim/particles/ParticleSpawnShapes.js","Functions","spawnSphere(center, radius, surfaceOnly = false)","spawnHemisphere(center, radius, axis = [0, 1, 0], surfaceOnly = false)","spawnBox(min, max, surfaceOnly = false)","spawnBoxCenter(center, halfExtents, surfaceOnly = false)","spawnCylinder(center, axis, radius, height, surfaceOnly = false)","spawnCone(apex, axis, angle, height, surfaceOnly = false)","spawnRing(center, axis, radius, thickness = 0)","spawnTorus(center, axis, majorRadius, minorRadius, surfaceOnly = false)","spawnLine(a, b, thickness = 0)","spawnDisc(center, normal, radius, innerRadius = 0)","spawnGrid(origin, axisU, axisV, countU, countV, index, jitter = 0)","spawnFromShape(shape, emitterPos, index = 0)","velocityFromNormal(normal, speed, spread = 0.2)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"on a ring (circle in 3D space) Parameters: (number[]) — No description in source JSDoc. (number[]) — Ring normal direction (number) — Ring radius (number) — Spread around the ring (0 = thin line) Spawn inside or on a torus Parameters: (number[]) — No description in source JSDoc. (number[]) — Torus normal (number) — Distance from center to tube center (number) — Tube radius (boolean) — No description in source JSDoc. Spawn along a line segment Parameters: (number[]) — Start point (number[]) — End point (number) — Spread perpendicular to line (0 = on line) Spawn on a disc (filled circle in 3D space) Parameters: (number[]) — No description in source JSDoc. (number[]) — Disc facing direction (number) — No description in source JSDoc. (number) — Hollow inner radius (0 = solid disc) Spawn at grid positions (deterministic placement, good for walls/floors of particles) Parameters: (number[]) — Grid origin corner (number[]) — Direction + length of U axis (number[]) — Direction + length of V axis (number) — Points along U (number) — Points along V (number) — Which grid point (0 to countU countV 1) (number) — Random offset as fraction of cell size (0 = perfect grid) Spawn a particle using a shape configuration object Parameters: (Object) — Shape config from emitter: { type, ...params } (number[]) — Emitter world position (added as offset) (number) — Particle index (for grid shapes) Returns: } Generate initial velocity from spawn shape result Parameters: (number[]) — Outward normal from spawn shape (number) — Base speed (number) — Random spread angle (0 = perfectly aligned with normal, 1 = hemisphere) Returns: velocity [vx, vy, vz] <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies","contentHash":"e67066faed2f81ecd4981958a0418312700d5812ddd078f0f59ae35870d7fda9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSpawnShapes.md::0002","path":"engine/reference/sim/particles/ParticleSpawnShapes.md","title":"sim/particles/ParticleSpawnShapes.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSpawnShapes.js","updated":"","headings":["sim/particles/ParticleSpawnShapes.js","Functions","spawnSphere(center, radius, surfaceOnly = false)","spawnHemisphere(center, radius, axis = [0, 1, 0], surfaceOnly = false)","spawnBox(min, max, surfaceOnly = false)","spawnBoxCenter(center, halfExtents, surfaceOnly = false)","spawnCylinder(center, axis, radius, height, surfaceOnly = false)","spawnCone(apex, axis, angle, height, surfaceOnly = false)","spawnRing(center, axis, radius, thickness = 0)","spawnTorus(center, axis, majorRadius, minorRadius, surfaceOnly = false)","spawnLine(a, b, thickness = 0)","spawnDisc(center, normal, radius, innerRadius = 0)","spawnGrid(origin, axisU, axisV, countU, countV, index, jitter = 0)","spawnFromShape(shape, emitterPos, index = 0)","velocityFromNormal(normal, speed, spread = 0.2)","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"vy, vz] <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (play","contentHash":"899d752c35fefcf9c7752d4878c4d36294be3deb962bc8c6c573a470ac1cab48"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSplineFollow.md::0000","path":"engine/reference/sim/particles/ParticleSplineFollow.md","title":"sim/particles/ParticleSplineFollow.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSplineFollow.js","updated":"","headings":["sim/particles/ParticleSplineFollow.js","Functions","createSplineFollowSystem(device, maxParticles)","setSplineControlPoints(system, device, points)","initSplineFollowBindGroups(system, device, positionBuffer, velocityBuffer)","setSplineFollowParams(system, params)","executeSplineFollow(system, device, particleCount, dt)","destroySplineFollowSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the spline follow system. Upload control points (array of [x, y, z]). Initialize bind groups. Update spline follow parameters. Execute the spline follow compute pass. Destroy the system. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is","contentHash":"21d71b4df4dc90004b069acfa23df45894d939e45e9024b450f0b14096403e20"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSplineFollow.md::0001","path":"engine/reference/sim/particles/ParticleSplineFollow.md","title":"sim/particles/ParticleSplineFollow.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSplineFollow.js","updated":"","headings":["sim/particles/ParticleSplineFollow.js","Functions","createSplineFollowSystem(device, maxParticles)","setSplineControlPoints(system, device, points)","initSplineFollowBindGroups(system, device, positionBuffer, velocityBuffer)","setSplineFollowParams(system, params)","executeSplineFollow(system, device, particleCount, dt)","destroySplineFollowSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b376bf848cb3620f4eb8e03f4a65400911a77ca9dbf4277bb8caa6fa9679cab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSplitting.md::0000","path":"engine/reference/sim/particles/ParticleSplitting.md","title":"sim/particles/ParticleSplitting.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSplitting.js","updated":"","headings":["sim/particles/ParticleSplitting.js","Functions","createSplittingSystem(device, maxParticles)","initSplittingBindGroups(system, device, positionBuffer, velocityBuffer, thermalBuffer, metaBuffer, sphDensityBuffer)","executeSplitting(system, device, particleCount, dt)","setSplittingParams(system, config)","destroySplittingSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the splitting system. Initialize bind groups. Execute the splitting compute pass. Update splitting parameters at runtime. Destroy splitting system. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters,","contentHash":"17df136cb4a9035763d230e76e2a30fc65a221fe58572b3136d34ecfa88cc829"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSplitting.md::0001","path":"engine/reference/sim/particles/ParticleSplitting.md","title":"sim/particles/ParticleSplitting.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSplitting.js","updated":"","headings":["sim/particles/ParticleSplitting.js","Functions","createSplittingSystem(device, maxParticles)","initSplittingBindGroups(system, device, positionBuffer, velocityBuffer, thermalBuffer, metaBuffer, sphDensityBuffer)","executeSplitting(system, device, particleCount, dt)","setSplittingParams(system, config)","destroySplittingSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2ebe30de518c9bc72be6c6df627184fa63741d937ed31b9d0e4de08770335029"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSurfaceProjection.md::0000","path":"engine/reference/sim/particles/ParticleSurfaceProjection.md","title":"sim/particles/ParticleSurfaceProjection.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSurfaceProjection.js","updated":"","headings":["sim/particles/ParticleSurfaceProjection.js","Functions","createSurfaceProjectionSystem(device, maxParticles)","addProjectionSurface(system, surface)","initProjectionBindGroups(system, device, positionBuffer, velocityBuffer)","executeSurfaceProjection(system, device, particleCount, dt)","clearProjectionSurfaces(system)","destroySurfaceProjectionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Functions Create the surface projection system. Add a projection surface. Parameters: (Object) — No description in source JSDoc. (Object) — { type: 'sphere' 'box' 'plane' 'cylinder', center, radius, halfExtent, normal, axis } Initialize bind groups. Execute the surface projection compute pass. Clear all surfaces. Destroy the system. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time","contentHash":"fefa993f725bb5549ca52aab315034ec8919f86529da0d09941694088bb324d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleSurfaceProjection.md::0001","path":"engine/reference/sim/particles/ParticleSurfaceProjection.md","title":"sim/particles/ParticleSurfaceProjection.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleSurfaceProjection.js","updated":"","headings":["sim/particles/ParticleSurfaceProjection.js","Functions","createSurfaceProjectionSystem(device, maxParticles)","addProjectionSurface(system, surface)","initProjectionBindGroups(system, device, positionBuffer, velocityBuffer)","executeSurfaceProjection(system, device, particleCount, dt)","clearProjectionSurfaces(system)","destroySurfaceProjectionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"06a607f22118b9313a8963a538dbebca63b6b8d47cc53168609ac60dfd3d1e40"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleTextureAtlas.md::0000","path":"engine/reference/sim/particles/ParticleTextureAtlas.md","title":"sim/particles/ParticleTextureAtlas.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleTextureAtlas.js","updated":"","headings":["sim/particles/ParticleTextureAtlas.js","Functions","createAtlasConfig(options = {})","createTextureAtlasSystem(device, maxParticles, config = {})","async loadAtlasTexture(atlasSystem, device, imageUrl)","createProceduralAtlas(atlasSystem, device, options = {})","initAtlasBindGroup(atlasSystem, device, positionsBuffer, velocitiesBuffer)","assignSpritesGPU(atlasSystem, device, particleCount, time)","getAtlasUniforms(atlasSystem, time)","setAssignmentMode(atlasSystem, mode)","destroyTextureAtlasSystem(atlasSystem)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create texture atlas configuration Create texture atlas system Load texture atlas from image Create procedural atlas texture (for testing) Initialize sprite assignment bind group Assign sprites to particles via GPU Get atlas uniforms for rendering Set sprite assignment mode Destroy texture atlas system Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2351f9b701d38ec2a03e5c26c3999ec177c4a07291b4a028bc540d0ae7150fdc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleVectorField.md::0000","path":"engine/reference/sim/particles/ParticleVectorField.md","title":"sim/particles/ParticleVectorField.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleVectorField.js","updated":"","headings":["sim/particles/ParticleVectorField.js","Functions","createVectorFieldTexture(device, resolution, label = 'VectorField.texture')","createVectorFieldSystem(device, options = {})","loadVectorFieldFromData(system, data, size)","generateProceduralVectorField(system, type = 'tornado')","setVectorFieldParams(system, params = {})","parseFGA(fgaText)","destroyVectorFieldSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a filterable 3D vector field texture compatible with linear sampling. Create a vector field system. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — { resolution, bounds } Load raw velocity data into the vector field. Parameters: (Object) — No description in source JSDoc. (Float32Array) — RGBA float data (res³ × 4 floats) (number[]) — [width, height, depth] Generate a procedural vector field. Parameters: (Object) — No description in source JSDoc. (string) — 'tornado', 'explosion', 'windTunnel', 'attractor' Update vector field parameters. Parameters: (Object) — No description in source JSDoc. (Object) — { center, halfExtent, strength, tiling, scroll } Parse FGA format (FluidNinja/Houdini vector field export). FGA is a simple text format: header lines then XYZ velocity per voxel. Parameters: (string) — Raw FGA file content Returns: } Destroy the vector field system. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to","contentHash":"6fbb7d8aa3087abb43c6e33c847b6f7bc21ffec05fae056b34127f873c1b3148"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticleVectorField.md::0001","path":"engine/reference/sim/particles/ParticleVectorField.md","title":"sim/particles/ParticleVectorField.js","description":"","kind":"reference","source":"engine/sim/particles/ParticleVectorField.js","updated":"","headings":["sim/particles/ParticleVectorField.js","Functions","createVectorFieldTexture(device, resolution, label = 'VectorField.texture')","createVectorFieldSystem(device, options = {})","loadVectorFieldFromData(system, data, size)","generateProceduralVectorField(system, type = 'tornado')","setVectorFieldParams(system, params = {})","parseFGA(fgaText)","destroyVectorFieldSystem(system)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"bbd1233a8772820caad07e7973d8840ea4d8650b3e9aebc2e10550a067dc888c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/ParticlesStateRegistry.md::0000","path":"engine/reference/sim/particles/ParticlesStateRegistry.md","title":"sim/particles/ParticlesStateRegistry.js","description":"","kind":"reference","source":"engine/sim/particles/ParticlesStateRegistry.js","updated":"","headings":["sim/particles/ParticlesStateRegistry.js","Functions","setActiveParticlesState(particlesState)","getActiveParticlesState()","clearActiveParticlesState()","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/RopeMaterial.md::0000","path":"engine/reference/sim/particles/RopeMaterial.md","title":"sim/particles/RopeMaterial.js","description":"","kind":"reference","source":"engine/sim/particles/RopeMaterial.js","updated":"","headings":["sim/particles/RopeMaterial.js","Functions","getSubstanceInteraction(substance)","createRopeNodeState(nodeCount, ambientTemp = 293)","getRopeInteractionMaterial(fiberMaterial)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Map particle substance to interaction type and intensity. Returns null if the substance doesn't interact with rope. Create per node interaction state for a rope. Parameters: (number) — Number of particles in the rope (number) — Starting temperature (K), default 293 (room temp) Returns: Per node state arrays Get the interaction material for a fiber material name. Falls back to hemp if unknown. Parameters: (string) — Material name (cotton, steel, chain, etc.) Returns: Interaction material properties Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics","contentHash":"ecdddb2f610042bbb4cbcdf11c0e72b294b307f1812530168e6ac9cfb7686aed"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/RopeMaterial.md::0001","path":"engine/reference/sim/particles/RopeMaterial.md","title":"sim/particles/RopeMaterial.js","description":"","kind":"reference","source":"engine/sim/particles/RopeMaterial.js","updated":"","headings":["sim/particles/RopeMaterial.js","Functions","getSubstanceInteraction(substance)","createRopeNodeState(nodeCount, ambientTemp = 293)","getRopeInteractionMaterial(fiberMaterial)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"6a1b78dfe998beba16c7c2a3a0376dab6a9db4ab9c77a1c4c100edca1af281ae"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/RopeParticleInteraction.md::0000","path":"engine/reference/sim/particles/RopeParticleInteraction.md","title":"sim/particles/RopeParticleInteraction.js","description":"","kind":"reference","source":"engine/sim/particles/RopeParticleInteraction.js","updated":"","headings":["sim/particles/RopeParticleInteraction.js","Functions","createRopeInteractionSystem()","registerRopeForInteraction(system, entityId, ropeMetadata, fiberMaterial, ambientTemp = 293)","unregisterRopeInteraction(system, entityId)","stepRopeInteraction(system, world, positionsCPU, thermalCPU, metaCPU, dt, callbacks = {})","getRopeInteractionState(system, entityId)","getRopeAverageTemperature(system, entityId)","getRopeAverageMoisture(system, entityId)","destroyRopeInteractionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions Create the rope↔particle interaction system. Attach to the particle world and call stepRopeInteraction() each tick. Returns: Interaction system state Register a rope for interaction tracking. Call this after createGPURope. Parameters: (Object) — Interaction system (number) — Rope entity ID (Object) — From createGPURope (particleStart, particleCount, etc.) (string) — Material name (hemp, steel, chain, silk, etc.) (number) — =293] Starting temperature Unregister a rope (cleanup). Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Step the rope↔particle interaction system. Parameters: (Object) — Interaction system from","contentHash":"a6b46c2be01035d4c27ba4bff465e09c7d3192d4da7cfb01616ee004c5ae5ef5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/RopeParticleInteraction.md::0001","path":"engine/reference/sim/particles/RopeParticleInteraction.md","title":"sim/particles/RopeParticleInteraction.js","description":"","kind":"reference","source":"engine/sim/particles/RopeParticleInteraction.js","updated":"","headings":["sim/particles/RopeParticleInteraction.js","Functions","createRopeInteractionSystem()","registerRopeForInteraction(system, entityId, ropeMetadata, fiberMaterial, ambientTemp = 293)","unregisterRopeInteraction(system, entityId)","stepRopeInteraction(system, world, positionsCPU, thermalCPU, metaCPU, dt, callbacks = {})","getRopeInteractionState(system, entityId)","getRopeAverageTemperature(system, entityId)","getRopeAverageMoisture(system, entityId)","destroyRopeInteractionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"in source JSDoc. (number) — No description in source JSDoc. Step the rope↔particle interaction system. Parameters: (Object) — Interaction system from createRopeInteractionSystem() (Object) — Particle sim world (has ropeChains, position readback, etc.) (Float32Array) — CPU side particle positions (vec4 per particle) (Float32Array) — CPU side thermal data (vec4 per particle: temp, phase, packedGroupMat, latent) (Float32Array null) — CPU side meta buffer (vec4 per particle: r,g,b,packed) (number) — Time step in seconds (Object) — Optional callbacks for spawning effects (Function) — (entityId, nodeIndex, position) (Function) — (entityId, nodeIndex, position) (Function) — (entityId, nodeIndex, childA, childB) (Function) — (entityId, nodeIndex, newMass) Get the current interaction state for a rope. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: { temperature[], moisture[], integrity[], burning[], isBurning, burningNodes } Get average temperature of a rope. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: Average temperature in K, or 293 if not found Get average moisture saturation of a rope. Parameters: (Object) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: Average moisture 0 1 Destroy the interaction system and release all state. Parameters: (Object) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies","contentHash":"86c2244681ca6bac7df03377cf81949028299f107298bd87134cfa5969962ba6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/RopeParticleInteraction.md::0002","path":"engine/reference/sim/particles/RopeParticleInteraction.md","title":"sim/particles/RopeParticleInteraction.js","description":"","kind":"reference","source":"engine/sim/particles/RopeParticleInteraction.js","updated":"","headings":["sim/particles/RopeParticleInteraction.js","Functions","createRopeInteractionSystem()","registerRopeForInteraction(system, entityId, ropeMetadata, fiberMaterial, ambientTemp = 293)","unregisterRopeInteraction(system, entityId)","stepRopeInteraction(system, world, positionsCPU, thermalCPU, metaCPU, dt, callbacks = {})","getRopeInteractionState(system, entityId)","getRopeAverageTemperature(system, entityId)","getRopeAverageMoisture(system, entityId)","destroyRopeInteractionSystem(system)","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d1ab8185319565a3f3c4929a6b8a4f63a6318560a534b690c644eb3d21c25633"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/RopePhysics.md::0000","path":"engine/reference/sim/particles/RopePhysics.md","title":"sim/particles/RopePhysics.js","description":"","kind":"reference","source":"engine/sim/particles/RopePhysics.js","updated":"","headings":["sim/particles/RopePhysics.js","Classes","class RopePhysicsSystem","Functions","createRopePhysicsSystem(device, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Register a rope for physics simulation Add attachment constraint to a rope Update attachment target position Cut a rope at specified particle index Create bind group for a rope Step rope physics simulation Get rope tension data (requires GPU readback) Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"79ebf9649af0f466708373d51bb9fafd81ba512aaa8c4c444c8e6868b485a447"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/SnapshotWorker.md::0000","path":"engine/reference/sim/particles/SnapshotWorker.md","title":"sim/particles/SnapshotWorker.js","description":"","kind":"reference","source":"engine/sim/particles/SnapshotWorker.js","updated":"","headings":["sim/particles/SnapshotWorker.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"089724de6758094f8a8ab9fcf77aeedbcd560c7a6d0a22222e2c8c60e27f45e4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/SpellEffectComposer.md::0000","path":"engine/reference/sim/particles/SpellEffectComposer.md","title":"sim/particles/SpellEffectComposer.js","description":"","kind":"reference","source":"engine/sim/particles/SpellEffectComposer.js","updated":"","headings":["sim/particles/SpellEffectComposer.js","Functions","composeSpellEffect(elements, baseConfig = {}, options = {})","getAvailableRecipes()","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Compose a multi layer spell effect from an element mix. Parameters: (Object) — Base emitter config from the parent emitter (rate, size, lifetime, etc.) (Object) — Additional options (string) — Custom name for the spell Returns: } Array of layer configs Get","contentHash":"34db121b96c4ed9b095f4d75a58e1b339f5435815e01ddaa5236e8b6a6606dc3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/SpellEffectComposer.md::0001","path":"engine/reference/sim/particles/SpellEffectComposer.md","title":"sim/particles/SpellEffectComposer.js","description":"","kind":"reference","source":"engine/sim/particles/SpellEffectComposer.js","updated":"","headings":["sim/particles/SpellEffectComposer.js","Functions","composeSpellEffect(elements, baseConfig = {}, options = {})","getAvailableRecipes()","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"from the parent emitter (rate, size, lifetime, etc.) (Object) — Additional options (string) — Custom name for the spell Returns: } Array of layer configs Get available element recipe IDs. Re exports , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"baf2cbdfb0fd6cb0e7e7128c467e12f05159899f86674eb4d45b72f960064150"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/data/index.md::0000","path":"engine/reference/sim/particles/data/index.md","title":"sim/particles/data/index.js","description":"","kind":"reference","source":"engine/sim/particles/data/index.js","updated":"","headings":["sim/particles/data/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: data/index.js — Re exports for schema, config, attributes, and compression. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"107e9c1971642c96a464104bfcf52464add0dcd61040cc65c3da2b0335c608d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/effects/index.md::0000","path":"engine/reference/sim/particles/effects/index.md","title":"sim/particles/effects/index.js","description":"","kind":"reference","source":"engine/sim/particles/effects/index.js","updated":"","headings":["sim/particles/effects/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: effects/index.js — Re exports for visual effects, trails, and lines. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"5938afab966ea9f23a19a9c2c5f9941e74855f71d53802616f6ddbe3af140815"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/emitters/index.md::0000","path":"engine/reference/sim/particles/emitters/index.md","title":"sim/particles/emitters/index.js","description":"","kind":"reference","source":"engine/sim/particles/emitters/index.js","updated":"","headings":["sim/particles/emitters/index.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: emitters/index.js — Organized re exports for emitter creation, presets, and lifecycle. New code should import from here. Original files remain in parent directory. Re exports , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"7eb59149e3671790a807f19bab0fbe93b8b34d7bd13269ad7780e9db681a19c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/events/index.md::0000","path":"engine/reference/sim/particles/events/index.md","title":"sim/particles/events/index.js","description":"","kind":"reference","source":"engine/sim/particles/events/index.js","updated":"","headings":["sim/particles/events/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: events/index.js — Re exports for event system, audio, and decals. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"5b3d30ef5b16fa4da7422866b778765d751d0e0e2e379b81436010dd010dfb54"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/mesh/index.md::0000","path":"engine/reference/sim/particles/mesh/index.md","title":"sim/particles/mesh/index.js","description":"","kind":"reference","source":"engine/sim/particles/mesh/index.js","updated":"","headings":["sim/particles/mesh/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: mesh/index.js — Re exports for mesh to particle conversion and instancing. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"35630bf32e076f4bdc992416d25b47bf036dba6ce7a03b8efd55ea81973dfd1d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/physics/collision/index.md::0000","path":"engine/reference/sim/particles/physics/collision/index.md","title":"sim/particles/physics/collision/index.js","description":"","kind":"reference","source":"engine/sim/particles/physics/collision/index.js","updated":"","headings":["sim/particles/physics/collision/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: physics/collision/index.js — Re exports for collision systems. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"e3415ee6f06acca515830cacaa01e20fd78cb794a7c1c2f8a4a97def1933669a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/physics/compute/index.md::0000","path":"engine/reference/sim/particles/physics/compute/index.md","title":"sim/particles/physics/compute/index.js","description":"","kind":"reference","source":"engine/sim/particles/physics/compute/index.js","updated":"","headings":["sim/particles/physics/compute/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: physics/compute/index.js — Re exports for compute utilities. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"967d195db8b460cd8ed4d021a7d6c7072e9e7e46587d169177a6cfbf96f2b83f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/physics/constraints/index.md::0000","path":"engine/reference/sim/particles/physics/constraints/index.md","title":"sim/particles/physics/constraints/index.js","description":"","kind":"reference","source":"engine/sim/particles/physics/constraints/index.js","updated":"","headings":["sim/particles/physics/constraints/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: physics/constraints/index.js — Re exports for constraint solvers. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"5e86fadf98bdc5ac0407220db48f966d14f03b847f71ee5dbcdcb038130367e8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/physics/fluids/index.md::0000","path":"engine/reference/sim/particles/physics/fluids/index.md","title":"sim/particles/physics/fluids/index.js","description":"","kind":"reference","source":"engine/sim/particles/physics/fluids/index.js","updated":"","headings":["sim/particles/physics/fluids/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: physics/fluids/index.js — Re exports for fluid solvers. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"08521aaa6d096a5a5e72efcb2d2449e521d66f9e75ef835d0f7067fd5466017c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/physics/forces/index.md::0000","path":"engine/reference/sim/particles/physics/forces/index.md","title":"sim/particles/physics/forces/index.js","description":"","kind":"reference","source":"engine/sim/particles/physics/forces/index.js","updated":"","headings":["sim/particles/physics/forces/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: physics/forces/index.js — Re exports for force systems. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"8efeeae2bd001bd766685cdb6a5b1d95a433a79d84f44031c7e97b3a9f487da3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/physics/index.md::0000","path":"engine/reference/sim/particles/physics/index.md","title":"sim/particles/physics/index.js","description":"","kind":"reference","source":"engine/sim/particles/physics/index.js","updated":"","headings":["sim/particles/physics/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: physics/index.js — Organized re exports for GPU physics compute solvers. New code should import from here. Original files remain in parent directory. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"67450073694c14d7501fb4d2873b99221106b21c20617a6deaea2ad83c791647"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/rope/index.md::0000","path":"engine/reference/sim/particles/rope/index.md","title":"sim/particles/rope/index.js","description":"","kind":"reference","source":"engine/sim/particles/rope/index.js","updated":"","headings":["sim/particles/rope/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: rope/index.js — Re exports for rope/wire constraint systems. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b8fe8e57f7849183392820ebe9eca7773027477f0af921d24c3d9511280647a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/snapshots/index.md::0000","path":"engine/reference/sim/particles/snapshots/index.md","title":"sim/particles/snapshots/index.js","description":"","kind":"reference","source":"engine/sim/particles/snapshots/index.js","updated":"","headings":["sim/particles/snapshots/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: snapshots/index.js — Re exports for snapshot, playback, and async management. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"c6c3d1eab9c5e0baddcae28db333904ef5fa8b32f1b79248ffcd36fcffc6e62c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/SandboxMaterialCatalog.md::0000","path":"engine/reference/sim/particles/substances/SandboxMaterialCatalog.md","title":"sim/particles/substances/SandboxMaterialCatalog.js","description":"","kind":"reference","source":"engine/sim/particles/substances/SandboxMaterialCatalog.js","updated":"","headings":["sim/particles/substances/SandboxMaterialCatalog.js","Functions","createSandboxMaterialCatalog()","createSandboxSpeciesLut(catalog = createSandboxMaterialCatalog()","temperatureToSandboxBucket(temperatureK)","sandboxBucketToTemperature(bucket)","packSandboxCell(speciesCode, temperatureK = SANDBOXREFERENCETEMPERATUREK, life = 255, variant = 0)","unpackSandboxCell(cell)","packSandboxObject(objectId, sourceSpeciesCode = 0, strength = 255, direction = 0)","unpackSandboxObject(objectWord)","sandboxSpeciesIdForSubstance(materialId)","validateSandboxMaterialCatalog(catalog)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build an immutable shared element/substance/object view for dense sandboxes. Compile the shared catalog into one vec4<u32 record per cell code. Constants — Pairwise interaction traits compiled into the high byte of LUT word 3. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"e9336c32e10bc598d7ba6e3718dd9d89b103f7ce4b80cdb7af9cbcc1ce898e45"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/SubstanceMixer.md::0000","path":"engine/reference/sim/particles/substances/SubstanceMixer.md","title":"sim/particles/substances/SubstanceMixer.js","description":"","kind":"reference","source":"engine/sim/particles/substances/SubstanceMixer.js","updated":"","headings":["sim/particles/substances/SubstanceMixer.js","Functions","mixSubstances(layers)","deriveFromElements(elementLayers)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Mix multiple substances into a blended definition. Returns: — blended substance like object with interpolated properties Derive a substance approximation from element layers (used by emitter system). Maps element IDs to substance IDs and mixes them. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"55efc8e2467af71add7369097becfed5074024feef9a0cb421709876d19e8f69"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/SubstanceRegistry.md::0000","path":"engine/reference/sim/particles/substances/SubstanceRegistry.md","title":"sim/particles/substances/SubstanceRegistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/SubstanceRegistry.js","updated":"","headings":["sim/particles/substances/SubstanceRegistry.js","Functions","registerSubstance(def)","unregisterSubstance(id)","getSubstance(id)","getSubstanceByMaterialId(matId)","getAllSubstances()","getSubstancesByCategory(category)","getSubstancesByTag(tag)","getSubstanceIds()","resolveSubstance(key)","deriveState(substanceId, temperature)","derivePhysicsProfile(substanceId, temperature)","getSSFRTint(substanceId)","getThermalPreset(substanceId)","getSPHParams(substanceId)","getEmitterDefaults(substanceId)","getAudioCues(substanceId)","getReactions(substanceId)","getMaterialForSubstance(key)","buildThermalPresets()","buildSubstanceToMaterial()","getSubstanceCount()","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Register a substance definition. Overwrites if id already exists. Parameters: (Object) — — substance definition (must have and ) Unregister a substance by id. Parameters: (string) — No description in source JSDoc. Get substance by id (e.g. 'water', 'lava', 'fire'). Parameters: (string) — No description in source JSDoc. Get substance by material ID number. Parameters: (number) — No description in source JSDoc. Get all registered substances. Get substances filtered by category. Parameters: (string) — No description in source JSDoc. Get substances filtered by tag. Parameters: (string) — No description in source JSDoc. Get substance IDs as an array. Resolve a substance key (preset name, element symbol, compound) to a substance definition. Falls back to partial matching. Parameters: (string) — No description in source JSDoc. Derive the phase of matter for a substance at a given temperature. Parameters: (string) — No description in source JSDoc. (number) — — Kelvin Returns: } Derive which physics systems to enable for a substance at a given temperature. Parameters:","contentHash":"e3f56a2fdfd151aa2ae673f302aa755ee6ae968151d64c05524ecd944fbe3ce9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/SubstanceRegistry.md::0001","path":"engine/reference/sim/particles/substances/SubstanceRegistry.md","title":"sim/particles/substances/SubstanceRegistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/SubstanceRegistry.js","updated":"","headings":["sim/particles/substances/SubstanceRegistry.js","Functions","registerSubstance(def)","unregisterSubstance(id)","getSubstance(id)","getSubstanceByMaterialId(matId)","getAllSubstances()","getSubstancesByCategory(category)","getSubstancesByTag(tag)","getSubstanceIds()","resolveSubstance(key)","deriveState(substanceId, temperature)","derivePhysicsProfile(substanceId, temperature)","getSSFRTint(substanceId)","getThermalPreset(substanceId)","getSPHParams(substanceId)","getEmitterDefaults(substanceId)","getAudioCues(substanceId)","getReactions(substanceId)","getMaterialForSubstance(key)","buildThermalPresets()","buildSubstanceToMaterial()","getSubstanceCount()","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"— No description in source JSDoc. (number) — — Kelvin Returns: } Derive which physics systems to enable for a substance at a given temperature. Parameters: (string) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: — { enableLJ, enableSPH, enableEM, enableNBody, enableChemistry, enableBlackbody } Get SSFR tint for a substance. Parameters: (string) — No description in source JSDoc. Returns: — [r, g, b] or null Get thermal preset for a substance. Parameters: (string) — No description in source JSDoc. Get SPH fluid parameters for a substance. Parameters: (string) — No description in source JSDoc. Get emitter defaults for a substance. Parameters: (string) — No description in source JSDoc. Get audio cues for a substance. Parameters: (string) — No description in source JSDoc. Get reactions for a substance. Parameters: (string) — No description in source JSDoc. Get material ID for a substance key (replaces SUBSTANCE TO MATERIAL lookup). Parameters: (string) — No description in source JSDoc. Build THERMAL MATERIAL PRESETS compatible object from all registered substances. For backward compatibility with ParticleConstraints.js consumers. Build SUBSTANCE TO MATERIAL compatible object from all registered substances. For backward compatibility with ParticleReactionTable.js consumers. Total number of registered substances. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced:","contentHash":"40ac81bc1e59eabebd44f60ed1fc2288add4404cca24cc687107b6b3bbbde626"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/SubstanceRegistry.md::0002","path":"engine/reference/sim/particles/substances/SubstanceRegistry.md","title":"sim/particles/substances/SubstanceRegistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/SubstanceRegistry.js","updated":"","headings":["sim/particles/substances/SubstanceRegistry.js","Functions","registerSubstance(def)","unregisterSubstance(id)","getSubstance(id)","getSubstanceByMaterialId(matId)","getAllSubstances()","getSubstancesByCategory(category)","getSubstancesByTag(tag)","getSubstanceIds()","resolveSubstance(key)","deriveState(substanceId, temperature)","derivePhysicsProfile(substanceId, temperature)","getSSFRTint(substanceId)","getThermalPreset(substanceId)","getSPHParams(substanceId)","getEmitterDefaults(substanceId)","getAudioCues(substanceId)","getReactions(substanceId)","getMaterialForSubstance(key)","buildThermalPresets()","buildSubstanceToMaterial()","getSubstanceCount()","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2e90dd6c3b88823a0d4751d41e227733200240f57e0db88f11c5826dcf8e9a50"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/SubstanceSchema.md::0000","path":"engine/reference/sim/particles/substances/SubstanceSchema.md","title":"sim/particles/substances/SubstanceSchema.js","description":"","kind":"reference","source":"engine/sim/particles/substances/SubstanceSchema.js","updated":"","headings":["sim/particles/substances/SubstanceSchema.js","Functions","getPhaseName(phase)","getPhaseFromName(name)","getMaterialName(materialId)","getMaterialId(name)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Get phase name string from phase constant. Parameters: (number) — No description in source JSDoc. Get phase constant from name string. Parameters: (string) — No description in source JSDoc. Get material name from material ID. Parameters: (number) — No description in source JSDoc. Get material ID from name string. Parameters: (string) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"3026daeda4b8d1d89620cbc9812e90db7325752b31b100feb9d90f97cdfd0424"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/elements/MoleculePresets.md::0000","path":"engine/reference/sim/particles/substances/elements/MoleculePresets.md","title":"sim/particles/substances/elements/MoleculePresets.js","description":"","kind":"reference","source":"engine/sim/particles/substances/elements/MoleculePresets.js","updated":"","headings":["sim/particles/substances/elements/MoleculePresets.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MoleculePresets.js — Common molecule/compound definitions. Re export of MOLECULE PRESETS from ParticleElementTable.js. Lives in substances/elements/ for organizational clarity. Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"dbfe351e11dd57574b86c1ad91f4e892728623764d01f65ba8529ffd7c5d8254"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/elements/PeriodicTable.md::0000","path":"engine/reference/sim/particles/substances/elements/PeriodicTable.md","title":"sim/particles/substances/elements/PeriodicTable.js","description":"","kind":"reference","source":"engine/sim/particles/substances/elements/PeriodicTable.js","updated":"","headings":["sim/particles/substances/elements/PeriodicTable.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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.) Re exports , , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"bd2a9e855b7f151d1c5e91329436ffb54394ba085d4e25887a52940acc82428c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/index.md::0000","path":"engine/reference/sim/particles/substances/index.md","title":"sim/particles/substances/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/index.js","updated":"","headings":["sim/particles/substances/index.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: substances/index.js — Barrel export for the substance system. Single import point: import { getSubstance, MATERIAL, PHASE LIQUID, ... } from './substances/index.js'; Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b996d6fc682106ac6baff28ed41e99dde05f4230ab5fd4c17174c27263d4de8b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/audio.md","title":"sim/particles/substances/materials/acid/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/audio.js","updated":"","headings":["sim/particles/substances/materials/acid/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/chemistry.md","title":"sim/particles/substances/materials/acid/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/chemistry.js","updated":"","headings":["sim/particles/substances/materials/acid/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/decals.md","title":"sim/particles/substances/materials/acid/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/decals.js","updated":"","headings":["sim/particles/substances/materials/acid/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/emitter.md","title":"sim/particles/substances/materials/acid/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/emitter.js","updated":"","headings":["sim/particles/substances/materials/acid/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/identity.md","title":"sim/particles/substances/materials/acid/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/identity.js","updated":"","headings":["sim/particles/substances/materials/acid/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/index.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/index.md","title":"sim/particles/substances/materials/acid/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/index.js","updated":"","headings":["sim/particles/substances/materials/acid/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/physics.md","title":"sim/particles/substances/materials/acid/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/physics.js","updated":"","headings":["sim/particles/substances/materials/acid/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/reactions.md","title":"sim/particles/substances/materials/acid/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/reactions.js","updated":"","headings":["sim/particles/substances/materials/acid/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/spell.md","title":"sim/particles/substances/materials/acid/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/spell.js","updated":"","headings":["sim/particles/substances/materials/acid/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/sph.md","title":"sim/particles/substances/materials/acid/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/sph.js","updated":"","headings":["sim/particles/substances/materials/acid/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/thermal.md","title":"sim/particles/substances/materials/acid/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/thermal.js","updated":"","headings":["sim/particles/substances/materials/acid/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/acid/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/acid/visual.md","title":"sim/particles/substances/materials/acid/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/acid/visual.js","updated":"","headings":["sim/particles/substances/materials/acid/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/audio.md","title":"sim/particles/substances/materials/blood/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/audio.js","updated":"","headings":["sim/particles/substances/materials/blood/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/chemistry.md","title":"sim/particles/substances/materials/blood/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/chemistry.js","updated":"","headings":["sim/particles/substances/materials/blood/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/decals.md","title":"sim/particles/substances/materials/blood/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/decals.js","updated":"","headings":["sim/particles/substances/materials/blood/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/emitter.md","title":"sim/particles/substances/materials/blood/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/emitter.js","updated":"","headings":["sim/particles/substances/materials/blood/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/identity.md","title":"sim/particles/substances/materials/blood/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/identity.js","updated":"","headings":["sim/particles/substances/materials/blood/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/index.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/index.md","title":"sim/particles/substances/materials/blood/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/index.js","updated":"","headings":["sim/particles/substances/materials/blood/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/physics.md","title":"sim/particles/substances/materials/blood/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/physics.js","updated":"","headings":["sim/particles/substances/materials/blood/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/reactions.md","title":"sim/particles/substances/materials/blood/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/reactions.js","updated":"","headings":["sim/particles/substances/materials/blood/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/spell.md","title":"sim/particles/substances/materials/blood/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/spell.js","updated":"","headings":["sim/particles/substances/materials/blood/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/sph.md","title":"sim/particles/substances/materials/blood/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/sph.js","updated":"","headings":["sim/particles/substances/materials/blood/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/thermal.md","title":"sim/particles/substances/materials/blood/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/thermal.js","updated":"","headings":["sim/particles/substances/materials/blood/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/blood/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/blood/visual.md","title":"sim/particles/substances/materials/blood/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/blood/visual.js","updated":"","headings":["sim/particles/substances/materials/blood/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/audio.md","title":"sim/particles/substances/materials/debris/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/audio.js","updated":"","headings":["sim/particles/substances/materials/debris/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/chemistry.md","title":"sim/particles/substances/materials/debris/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/chemistry.js","updated":"","headings":["sim/particles/substances/materials/debris/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/decals.md","title":"sim/particles/substances/materials/debris/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/decals.js","updated":"","headings":["sim/particles/substances/materials/debris/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/emitter.md","title":"sim/particles/substances/materials/debris/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/emitter.js","updated":"","headings":["sim/particles/substances/materials/debris/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/identity.md","title":"sim/particles/substances/materials/debris/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/identity.js","updated":"","headings":["sim/particles/substances/materials/debris/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/index.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/index.md","title":"sim/particles/substances/materials/debris/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/index.js","updated":"","headings":["sim/particles/substances/materials/debris/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/physics.md","title":"sim/particles/substances/materials/debris/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/physics.js","updated":"","headings":["sim/particles/substances/materials/debris/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/reactions.md","title":"sim/particles/substances/materials/debris/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/reactions.js","updated":"","headings":["sim/particles/substances/materials/debris/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/spell.md","title":"sim/particles/substances/materials/debris/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/spell.js","updated":"","headings":["sim/particles/substances/materials/debris/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/sph.md","title":"sim/particles/substances/materials/debris/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/sph.js","updated":"","headings":["sim/particles/substances/materials/debris/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/thermal.md","title":"sim/particles/substances/materials/debris/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/thermal.js","updated":"","headings":["sim/particles/substances/materials/debris/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/debris/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/debris/visual.md","title":"sim/particles/substances/materials/debris/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/debris/visual.js","updated":"","headings":["sim/particles/substances/materials/debris/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/audio.md","title":"sim/particles/substances/materials/fire/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/audio.js","updated":"","headings":["sim/particles/substances/materials/fire/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/chemistry.md","title":"sim/particles/substances/materials/fire/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/chemistry.js","updated":"","headings":["sim/particles/substances/materials/fire/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/decals.md","title":"sim/particles/substances/materials/fire/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/decals.js","updated":"","headings":["sim/particles/substances/materials/fire/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/emitter.md","title":"sim/particles/substances/materials/fire/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/emitter.js","updated":"","headings":["sim/particles/substances/materials/fire/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/identity.md","title":"sim/particles/substances/materials/fire/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/identity.js","updated":"","headings":["sim/particles/substances/materials/fire/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/index.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/index.md","title":"sim/particles/substances/materials/fire/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/index.js","updated":"","headings":["sim/particles/substances/materials/fire/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/physics.md","title":"sim/particles/substances/materials/fire/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/physics.js","updated":"","headings":["sim/particles/substances/materials/fire/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/reactions.md","title":"sim/particles/substances/materials/fire/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/reactions.js","updated":"","headings":["sim/particles/substances/materials/fire/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/spell.md","title":"sim/particles/substances/materials/fire/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/spell.js","updated":"","headings":["sim/particles/substances/materials/fire/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/sph.md","title":"sim/particles/substances/materials/fire/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/sph.js","updated":"","headings":["sim/particles/substances/materials/fire/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/thermal.md","title":"sim/particles/substances/materials/fire/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/thermal.js","updated":"","headings":["sim/particles/substances/materials/fire/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/fire/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/fire/visual.md","title":"sim/particles/substances/materials/fire/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/fire/visual.js","updated":"","headings":["sim/particles/substances/materials/fire/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/audio.md","title":"sim/particles/substances/materials/glass/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/audio.js","updated":"","headings":["sim/particles/substances/materials/glass/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/chemistry.md","title":"sim/particles/substances/materials/glass/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/chemistry.js","updated":"","headings":["sim/particles/substances/materials/glass/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/decals.md","title":"sim/particles/substances/materials/glass/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/decals.js","updated":"","headings":["sim/particles/substances/materials/glass/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/emitter.md","title":"sim/particles/substances/materials/glass/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/emitter.js","updated":"","headings":["sim/particles/substances/materials/glass/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/identity.md","title":"sim/particles/substances/materials/glass/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/identity.js","updated":"","headings":["sim/particles/substances/materials/glass/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/index.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/index.md","title":"sim/particles/substances/materials/glass/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/index.js","updated":"","headings":["sim/particles/substances/materials/glass/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/physics.md","title":"sim/particles/substances/materials/glass/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/physics.js","updated":"","headings":["sim/particles/substances/materials/glass/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/reactions.md","title":"sim/particles/substances/materials/glass/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/reactions.js","updated":"","headings":["sim/particles/substances/materials/glass/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/spell.md","title":"sim/particles/substances/materials/glass/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/spell.js","updated":"","headings":["sim/particles/substances/materials/glass/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/sph.md","title":"sim/particles/substances/materials/glass/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/sph.js","updated":"","headings":["sim/particles/substances/materials/glass/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/thermal.md","title":"sim/particles/substances/materials/glass/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/thermal.js","updated":"","headings":["sim/particles/substances/materials/glass/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/glass/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/glass/visual.md","title":"sim/particles/substances/materials/glass/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/glass/visual.js","updated":"","headings":["sim/particles/substances/materials/glass/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/audio.md","title":"sim/particles/substances/materials/honey/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/audio.js","updated":"","headings":["sim/particles/substances/materials/honey/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/chemistry.md","title":"sim/particles/substances/materials/honey/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/chemistry.js","updated":"","headings":["sim/particles/substances/materials/honey/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/decals.md","title":"sim/particles/substances/materials/honey/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/decals.js","updated":"","headings":["sim/particles/substances/materials/honey/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/emitter.md","title":"sim/particles/substances/materials/honey/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/emitter.js","updated":"","headings":["sim/particles/substances/materials/honey/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/identity.md","title":"sim/particles/substances/materials/honey/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/identity.js","updated":"","headings":["sim/particles/substances/materials/honey/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/index.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/index.md","title":"sim/particles/substances/materials/honey/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/index.js","updated":"","headings":["sim/particles/substances/materials/honey/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/physics.md","title":"sim/particles/substances/materials/honey/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/physics.js","updated":"","headings":["sim/particles/substances/materials/honey/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/reactions.md","title":"sim/particles/substances/materials/honey/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/reactions.js","updated":"","headings":["sim/particles/substances/materials/honey/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/spell.md","title":"sim/particles/substances/materials/honey/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/spell.js","updated":"","headings":["sim/particles/substances/materials/honey/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/sph.md","title":"sim/particles/substances/materials/honey/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/sph.js","updated":"","headings":["sim/particles/substances/materials/honey/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/thermal.md","title":"sim/particles/substances/materials/honey/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/thermal.js","updated":"","headings":["sim/particles/substances/materials/honey/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/honey/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/honey/visual.md","title":"sim/particles/substances/materials/honey/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/honey/visual.js","updated":"","headings":["sim/particles/substances/materials/honey/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/audio.md","title":"sim/particles/substances/materials/ice/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/audio.js","updated":"","headings":["sim/particles/substances/materials/ice/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/chemistry.md","title":"sim/particles/substances/materials/ice/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/chemistry.js","updated":"","headings":["sim/particles/substances/materials/ice/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/decals.md","title":"sim/particles/substances/materials/ice/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/decals.js","updated":"","headings":["sim/particles/substances/materials/ice/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/emitter.md","title":"sim/particles/substances/materials/ice/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/emitter.js","updated":"","headings":["sim/particles/substances/materials/ice/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/identity.md","title":"sim/particles/substances/materials/ice/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/identity.js","updated":"","headings":["sim/particles/substances/materials/ice/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/index.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/index.md","title":"sim/particles/substances/materials/ice/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/index.js","updated":"","headings":["sim/particles/substances/materials/ice/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/physics.md","title":"sim/particles/substances/materials/ice/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/physics.js","updated":"","headings":["sim/particles/substances/materials/ice/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/reactions.md","title":"sim/particles/substances/materials/ice/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/reactions.js","updated":"","headings":["sim/particles/substances/materials/ice/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/spell.md","title":"sim/particles/substances/materials/ice/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/spell.js","updated":"","headings":["sim/particles/substances/materials/ice/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/sph.md","title":"sim/particles/substances/materials/ice/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/sph.js","updated":"","headings":["sim/particles/substances/materials/ice/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/thermal.md","title":"sim/particles/substances/materials/ice/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/thermal.js","updated":"","headings":["sim/particles/substances/materials/ice/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/ice/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/ice/visual.md","title":"sim/particles/substances/materials/ice/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/ice/visual.js","updated":"","headings":["sim/particles/substances/materials/ice/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/index.md::0000","path":"engine/reference/sim/particles/substances/materials/index.md","title":"sim/particles/substances/materials/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/index.js","updated":"","headings":["sim/particles/substances/materials/index.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"490e0fb6de27957a919879ce7a4723e07b0361554983e1c1f29cf71673f318ae"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/audio.md","title":"sim/particles/substances/materials/lava/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/audio.js","updated":"","headings":["sim/particles/substances/materials/lava/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/chemistry.md","title":"sim/particles/substances/materials/lava/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/chemistry.js","updated":"","headings":["sim/particles/substances/materials/lava/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/decals.md","title":"sim/particles/substances/materials/lava/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/decals.js","updated":"","headings":["sim/particles/substances/materials/lava/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/emitter.md","title":"sim/particles/substances/materials/lava/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/emitter.js","updated":"","headings":["sim/particles/substances/materials/lava/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/identity.md","title":"sim/particles/substances/materials/lava/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/identity.js","updated":"","headings":["sim/particles/substances/materials/lava/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/index.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/index.md","title":"sim/particles/substances/materials/lava/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/index.js","updated":"","headings":["sim/particles/substances/materials/lava/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/physics.md","title":"sim/particles/substances/materials/lava/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/physics.js","updated":"","headings":["sim/particles/substances/materials/lava/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/reactions.md","title":"sim/particles/substances/materials/lava/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/reactions.js","updated":"","headings":["sim/particles/substances/materials/lava/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/spell.md","title":"sim/particles/substances/materials/lava/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/spell.js","updated":"","headings":["sim/particles/substances/materials/lava/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/sph.md","title":"sim/particles/substances/materials/lava/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/sph.js","updated":"","headings":["sim/particles/substances/materials/lava/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/thermal.md","title":"sim/particles/substances/materials/lava/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/thermal.js","updated":"","headings":["sim/particles/substances/materials/lava/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/lava/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/lava/visual.md","title":"sim/particles/substances/materials/lava/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/lava/visual.js","updated":"","headings":["sim/particles/substances/materials/lava/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/audio.md","title":"sim/particles/substances/materials/mercury/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/audio.js","updated":"","headings":["sim/particles/substances/materials/mercury/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/chemistry.md","title":"sim/particles/substances/materials/mercury/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/chemistry.js","updated":"","headings":["sim/particles/substances/materials/mercury/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/decals.md","title":"sim/particles/substances/materials/mercury/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/decals.js","updated":"","headings":["sim/particles/substances/materials/mercury/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/emitter.md","title":"sim/particles/substances/materials/mercury/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/emitter.js","updated":"","headings":["sim/particles/substances/materials/mercury/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/identity.md","title":"sim/particles/substances/materials/mercury/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/identity.js","updated":"","headings":["sim/particles/substances/materials/mercury/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/index.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/index.md","title":"sim/particles/substances/materials/mercury/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/index.js","updated":"","headings":["sim/particles/substances/materials/mercury/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/physics.md","title":"sim/particles/substances/materials/mercury/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/physics.js","updated":"","headings":["sim/particles/substances/materials/mercury/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/reactions.md","title":"sim/particles/substances/materials/mercury/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/reactions.js","updated":"","headings":["sim/particles/substances/materials/mercury/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/spell.md","title":"sim/particles/substances/materials/mercury/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/spell.js","updated":"","headings":["sim/particles/substances/materials/mercury/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/sph.md","title":"sim/particles/substances/materials/mercury/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/sph.js","updated":"","headings":["sim/particles/substances/materials/mercury/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/thermal.md","title":"sim/particles/substances/materials/mercury/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/thermal.js","updated":"","headings":["sim/particles/substances/materials/mercury/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/mercury/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/mercury/visual.md","title":"sim/particles/substances/materials/mercury/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/mercury/visual.js","updated":"","headings":["sim/particles/substances/materials/mercury/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/audio.md","title":"sim/particles/substances/materials/metal/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/audio.js","updated":"","headings":["sim/particles/substances/materials/metal/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/chemistry.md","title":"sim/particles/substances/materials/metal/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/chemistry.js","updated":"","headings":["sim/particles/substances/materials/metal/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/decals.md","title":"sim/particles/substances/materials/metal/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/decals.js","updated":"","headings":["sim/particles/substances/materials/metal/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/emitter.md","title":"sim/particles/substances/materials/metal/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/emitter.js","updated":"","headings":["sim/particles/substances/materials/metal/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/identity.md","title":"sim/particles/substances/materials/metal/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/identity.js","updated":"","headings":["sim/particles/substances/materials/metal/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/index.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/index.md","title":"sim/particles/substances/materials/metal/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/index.js","updated":"","headings":["sim/particles/substances/materials/metal/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/physics.md","title":"sim/particles/substances/materials/metal/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/physics.js","updated":"","headings":["sim/particles/substances/materials/metal/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/reactions.md","title":"sim/particles/substances/materials/metal/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/reactions.js","updated":"","headings":["sim/particles/substances/materials/metal/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/spell.md","title":"sim/particles/substances/materials/metal/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/spell.js","updated":"","headings":["sim/particles/substances/materials/metal/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/sph.md","title":"sim/particles/substances/materials/metal/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/sph.js","updated":"","headings":["sim/particles/substances/materials/metal/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/thermal.md","title":"sim/particles/substances/materials/metal/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/thermal.js","updated":"","headings":["sim/particles/substances/materials/metal/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/metal/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/metal/visual.md","title":"sim/particles/substances/materials/metal/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/metal/visual.js","updated":"","headings":["sim/particles/substances/materials/metal/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/audio.md","title":"sim/particles/substances/materials/oil/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/audio.js","updated":"","headings":["sim/particles/substances/materials/oil/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/chemistry.md","title":"sim/particles/substances/materials/oil/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/chemistry.js","updated":"","headings":["sim/particles/substances/materials/oil/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/decals.md","title":"sim/particles/substances/materials/oil/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/decals.js","updated":"","headings":["sim/particles/substances/materials/oil/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/emitter.md","title":"sim/particles/substances/materials/oil/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/emitter.js","updated":"","headings":["sim/particles/substances/materials/oil/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/identity.md","title":"sim/particles/substances/materials/oil/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/identity.js","updated":"","headings":["sim/particles/substances/materials/oil/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/index.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/index.md","title":"sim/particles/substances/materials/oil/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/index.js","updated":"","headings":["sim/particles/substances/materials/oil/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/physics.md","title":"sim/particles/substances/materials/oil/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/physics.js","updated":"","headings":["sim/particles/substances/materials/oil/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/reactions.md","title":"sim/particles/substances/materials/oil/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/reactions.js","updated":"","headings":["sim/particles/substances/materials/oil/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/spell.md","title":"sim/particles/substances/materials/oil/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/spell.js","updated":"","headings":["sim/particles/substances/materials/oil/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/sph.md","title":"sim/particles/substances/materials/oil/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/sph.js","updated":"","headings":["sim/particles/substances/materials/oil/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/thermal.md","title":"sim/particles/substances/materials/oil/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/thermal.js","updated":"","headings":["sim/particles/substances/materials/oil/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/oil/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/oil/visual.md","title":"sim/particles/substances/materials/oil/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/oil/visual.js","updated":"","headings":["sim/particles/substances/materials/oil/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/audio.md","title":"sim/particles/substances/materials/plasma/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/audio.js","updated":"","headings":["sim/particles/substances/materials/plasma/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/chemistry.md","title":"sim/particles/substances/materials/plasma/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/chemistry.js","updated":"","headings":["sim/particles/substances/materials/plasma/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/decals.md","title":"sim/particles/substances/materials/plasma/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/decals.js","updated":"","headings":["sim/particles/substances/materials/plasma/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/emitter.md","title":"sim/particles/substances/materials/plasma/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/emitter.js","updated":"","headings":["sim/particles/substances/materials/plasma/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/identity.md","title":"sim/particles/substances/materials/plasma/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/identity.js","updated":"","headings":["sim/particles/substances/materials/plasma/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/index.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/index.md","title":"sim/particles/substances/materials/plasma/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/index.js","updated":"","headings":["sim/particles/substances/materials/plasma/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/physics.md","title":"sim/particles/substances/materials/plasma/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/physics.js","updated":"","headings":["sim/particles/substances/materials/plasma/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/reactions.md","title":"sim/particles/substances/materials/plasma/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/reactions.js","updated":"","headings":["sim/particles/substances/materials/plasma/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/spell.md","title":"sim/particles/substances/materials/plasma/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/spell.js","updated":"","headings":["sim/particles/substances/materials/plasma/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/sph.md","title":"sim/particles/substances/materials/plasma/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/sph.js","updated":"","headings":["sim/particles/substances/materials/plasma/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/thermal.md","title":"sim/particles/substances/materials/plasma/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/thermal.js","updated":"","headings":["sim/particles/substances/materials/plasma/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/plasma/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/plasma/visual.md","title":"sim/particles/substances/materials/plasma/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/plasma/visual.js","updated":"","headings":["sim/particles/substances/materials/plasma/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/audio.md","title":"sim/particles/substances/materials/sand/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/audio.js","updated":"","headings":["sim/particles/substances/materials/sand/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/chemistry.md","title":"sim/particles/substances/materials/sand/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/chemistry.js","updated":"","headings":["sim/particles/substances/materials/sand/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/decals.md","title":"sim/particles/substances/materials/sand/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/decals.js","updated":"","headings":["sim/particles/substances/materials/sand/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/emitter.md","title":"sim/particles/substances/materials/sand/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/emitter.js","updated":"","headings":["sim/particles/substances/materials/sand/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/identity.md","title":"sim/particles/substances/materials/sand/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/identity.js","updated":"","headings":["sim/particles/substances/materials/sand/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/index.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/index.md","title":"sim/particles/substances/materials/sand/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/index.js","updated":"","headings":["sim/particles/substances/materials/sand/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/physics.md","title":"sim/particles/substances/materials/sand/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/physics.js","updated":"","headings":["sim/particles/substances/materials/sand/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/reactions.md","title":"sim/particles/substances/materials/sand/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/reactions.js","updated":"","headings":["sim/particles/substances/materials/sand/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/spell.md","title":"sim/particles/substances/materials/sand/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/spell.js","updated":"","headings":["sim/particles/substances/materials/sand/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/sph.md","title":"sim/particles/substances/materials/sand/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/sph.js","updated":"","headings":["sim/particles/substances/materials/sand/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/thermal.md","title":"sim/particles/substances/materials/sand/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/thermal.js","updated":"","headings":["sim/particles/substances/materials/sand/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sand/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/sand/visual.md","title":"sim/particles/substances/materials/sand/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sand/visual.js","updated":"","headings":["sim/particles/substances/materials/sand/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/audio.md","title":"sim/particles/substances/materials/smoke/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/audio.js","updated":"","headings":["sim/particles/substances/materials/smoke/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/chemistry.md","title":"sim/particles/substances/materials/smoke/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/chemistry.js","updated":"","headings":["sim/particles/substances/materials/smoke/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/decals.md","title":"sim/particles/substances/materials/smoke/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/decals.js","updated":"","headings":["sim/particles/substances/materials/smoke/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/emitter.md","title":"sim/particles/substances/materials/smoke/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/emitter.js","updated":"","headings":["sim/particles/substances/materials/smoke/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/identity.md","title":"sim/particles/substances/materials/smoke/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/identity.js","updated":"","headings":["sim/particles/substances/materials/smoke/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/index.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/index.md","title":"sim/particles/substances/materials/smoke/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/index.js","updated":"","headings":["sim/particles/substances/materials/smoke/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/physics.md","title":"sim/particles/substances/materials/smoke/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/physics.js","updated":"","headings":["sim/particles/substances/materials/smoke/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/reactions.md","title":"sim/particles/substances/materials/smoke/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/reactions.js","updated":"","headings":["sim/particles/substances/materials/smoke/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/spell.md","title":"sim/particles/substances/materials/smoke/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/spell.js","updated":"","headings":["sim/particles/substances/materials/smoke/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/sph.md","title":"sim/particles/substances/materials/smoke/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/sph.js","updated":"","headings":["sim/particles/substances/materials/smoke/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/thermal.md","title":"sim/particles/substances/materials/smoke/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/thermal.js","updated":"","headings":["sim/particles/substances/materials/smoke/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/smoke/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/smoke/visual.md","title":"sim/particles/substances/materials/smoke/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/smoke/visual.js","updated":"","headings":["sim/particles/substances/materials/smoke/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/audio.md","title":"sim/particles/substances/materials/snow/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/audio.js","updated":"","headings":["sim/particles/substances/materials/snow/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/chemistry.md","title":"sim/particles/substances/materials/snow/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/chemistry.js","updated":"","headings":["sim/particles/substances/materials/snow/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/decals.md","title":"sim/particles/substances/materials/snow/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/decals.js","updated":"","headings":["sim/particles/substances/materials/snow/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/emitter.md","title":"sim/particles/substances/materials/snow/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/emitter.js","updated":"","headings":["sim/particles/substances/materials/snow/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/identity.md","title":"sim/particles/substances/materials/snow/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/identity.js","updated":"","headings":["sim/particles/substances/materials/snow/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/index.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/index.md","title":"sim/particles/substances/materials/snow/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/index.js","updated":"","headings":["sim/particles/substances/materials/snow/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/physics.md","title":"sim/particles/substances/materials/snow/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/physics.js","updated":"","headings":["sim/particles/substances/materials/snow/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/reactions.md","title":"sim/particles/substances/materials/snow/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/reactions.js","updated":"","headings":["sim/particles/substances/materials/snow/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/spell.md","title":"sim/particles/substances/materials/snow/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/spell.js","updated":"","headings":["sim/particles/substances/materials/snow/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/sph.md","title":"sim/particles/substances/materials/snow/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/sph.js","updated":"","headings":["sim/particles/substances/materials/snow/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/thermal.md","title":"sim/particles/substances/materials/snow/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/thermal.js","updated":"","headings":["sim/particles/substances/materials/snow/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/snow/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/snow/visual.md","title":"sim/particles/substances/materials/snow/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/snow/visual.js","updated":"","headings":["sim/particles/substances/materials/snow/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/audio.md","title":"sim/particles/substances/materials/sparks/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/audio.js","updated":"","headings":["sim/particles/substances/materials/sparks/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/chemistry.md","title":"sim/particles/substances/materials/sparks/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/chemistry.js","updated":"","headings":["sim/particles/substances/materials/sparks/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/decals.md","title":"sim/particles/substances/materials/sparks/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/decals.js","updated":"","headings":["sim/particles/substances/materials/sparks/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/emitter.md","title":"sim/particles/substances/materials/sparks/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/emitter.js","updated":"","headings":["sim/particles/substances/materials/sparks/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/identity.md","title":"sim/particles/substances/materials/sparks/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/identity.js","updated":"","headings":["sim/particles/substances/materials/sparks/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/index.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/index.md","title":"sim/particles/substances/materials/sparks/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/index.js","updated":"","headings":["sim/particles/substances/materials/sparks/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/physics.md","title":"sim/particles/substances/materials/sparks/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/physics.js","updated":"","headings":["sim/particles/substances/materials/sparks/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/reactions.md","title":"sim/particles/substances/materials/sparks/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/reactions.js","updated":"","headings":["sim/particles/substances/materials/sparks/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/spell.md","title":"sim/particles/substances/materials/sparks/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/spell.js","updated":"","headings":["sim/particles/substances/materials/sparks/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/sph.md","title":"sim/particles/substances/materials/sparks/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/sph.js","updated":"","headings":["sim/particles/substances/materials/sparks/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/thermal.md","title":"sim/particles/substances/materials/sparks/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/thermal.js","updated":"","headings":["sim/particles/substances/materials/sparks/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/sparks/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/sparks/visual.md","title":"sim/particles/substances/materials/sparks/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/sparks/visual.js","updated":"","headings":["sim/particles/substances/materials/sparks/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/audio.md","title":"sim/particles/substances/materials/steam/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/audio.js","updated":"","headings":["sim/particles/substances/materials/steam/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/chemistry.md","title":"sim/particles/substances/materials/steam/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/chemistry.js","updated":"","headings":["sim/particles/substances/materials/steam/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/decals.md","title":"sim/particles/substances/materials/steam/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/decals.js","updated":"","headings":["sim/particles/substances/materials/steam/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/emitter.md","title":"sim/particles/substances/materials/steam/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/emitter.js","updated":"","headings":["sim/particles/substances/materials/steam/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/identity.md","title":"sim/particles/substances/materials/steam/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/identity.js","updated":"","headings":["sim/particles/substances/materials/steam/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/index.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/index.md","title":"sim/particles/substances/materials/steam/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/index.js","updated":"","headings":["sim/particles/substances/materials/steam/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/physics.md","title":"sim/particles/substances/materials/steam/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/physics.js","updated":"","headings":["sim/particles/substances/materials/steam/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/reactions.md","title":"sim/particles/substances/materials/steam/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/reactions.js","updated":"","headings":["sim/particles/substances/materials/steam/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/spell.md","title":"sim/particles/substances/materials/steam/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/spell.js","updated":"","headings":["sim/particles/substances/materials/steam/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/sph.md","title":"sim/particles/substances/materials/steam/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/sph.js","updated":"","headings":["sim/particles/substances/materials/steam/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/thermal.md","title":"sim/particles/substances/materials/steam/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/thermal.js","updated":"","headings":["sim/particles/substances/materials/steam/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/steam/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/steam/visual.md","title":"sim/particles/substances/materials/steam/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/steam/visual.js","updated":"","headings":["sim/particles/substances/materials/steam/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/audio.md","title":"sim/particles/substances/materials/stone/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/audio.js","updated":"","headings":["sim/particles/substances/materials/stone/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/chemistry.md","title":"sim/particles/substances/materials/stone/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/chemistry.js","updated":"","headings":["sim/particles/substances/materials/stone/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/decals.md","title":"sim/particles/substances/materials/stone/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/decals.js","updated":"","headings":["sim/particles/substances/materials/stone/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/emitter.md","title":"sim/particles/substances/materials/stone/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/emitter.js","updated":"","headings":["sim/particles/substances/materials/stone/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/identity.md","title":"sim/particles/substances/materials/stone/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/identity.js","updated":"","headings":["sim/particles/substances/materials/stone/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/index.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/index.md","title":"sim/particles/substances/materials/stone/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/index.js","updated":"","headings":["sim/particles/substances/materials/stone/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/physics.md","title":"sim/particles/substances/materials/stone/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/physics.js","updated":"","headings":["sim/particles/substances/materials/stone/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/reactions.md","title":"sim/particles/substances/materials/stone/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/reactions.js","updated":"","headings":["sim/particles/substances/materials/stone/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/spell.md","title":"sim/particles/substances/materials/stone/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/spell.js","updated":"","headings":["sim/particles/substances/materials/stone/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/sph.md","title":"sim/particles/substances/materials/stone/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/sph.js","updated":"","headings":["sim/particles/substances/materials/stone/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/thermal.md","title":"sim/particles/substances/materials/stone/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/thermal.js","updated":"","headings":["sim/particles/substances/materials/stone/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/stone/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/stone/visual.md","title":"sim/particles/substances/materials/stone/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/stone/visual.js","updated":"","headings":["sim/particles/substances/materials/stone/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/water/audio.md","title":"sim/particles/substances/materials/water/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/audio.js","updated":"","headings":["sim/particles/substances/materials/water/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/water/chemistry.md","title":"sim/particles/substances/materials/water/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/chemistry.js","updated":"","headings":["sim/particles/substances/materials/water/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/water/decals.md","title":"sim/particles/substances/materials/water/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/decals.js","updated":"","headings":["sim/particles/substances/materials/water/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/water/emitter.md","title":"sim/particles/substances/materials/water/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/emitter.js","updated":"","headings":["sim/particles/substances/materials/water/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/water/identity.md","title":"sim/particles/substances/materials/water/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/identity.js","updated":"","headings":["sim/particles/substances/materials/water/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/index.md::0000","path":"engine/reference/sim/particles/substances/materials/water/index.md","title":"sim/particles/substances/materials/water/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/index.js","updated":"","headings":["sim/particles/substances/materials/water/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/water/physics.md","title":"sim/particles/substances/materials/water/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/physics.js","updated":"","headings":["sim/particles/substances/materials/water/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/water/reactions.md","title":"sim/particles/substances/materials/water/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/reactions.js","updated":"","headings":["sim/particles/substances/materials/water/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/water/spell.md","title":"sim/particles/substances/materials/water/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/spell.js","updated":"","headings":["sim/particles/substances/materials/water/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/water/sph.md","title":"sim/particles/substances/materials/water/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/sph.js","updated":"","headings":["sim/particles/substances/materials/water/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/water/thermal.md","title":"sim/particles/substances/materials/water/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/thermal.js","updated":"","headings":["sim/particles/substances/materials/water/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/water/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/water/visual.md","title":"sim/particles/substances/materials/water/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/water/visual.js","updated":"","headings":["sim/particles/substances/materials/water/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/audio.md","title":"sim/particles/substances/materials/wax/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/audio.js","updated":"","headings":["sim/particles/substances/materials/wax/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/chemistry.md","title":"sim/particles/substances/materials/wax/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/chemistry.js","updated":"","headings":["sim/particles/substances/materials/wax/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/decals.md","title":"sim/particles/substances/materials/wax/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/decals.js","updated":"","headings":["sim/particles/substances/materials/wax/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/emitter.md","title":"sim/particles/substances/materials/wax/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/emitter.js","updated":"","headings":["sim/particles/substances/materials/wax/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/identity.md","title":"sim/particles/substances/materials/wax/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/identity.js","updated":"","headings":["sim/particles/substances/materials/wax/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/index.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/index.md","title":"sim/particles/substances/materials/wax/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/index.js","updated":"","headings":["sim/particles/substances/materials/wax/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/physics.md","title":"sim/particles/substances/materials/wax/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/physics.js","updated":"","headings":["sim/particles/substances/materials/wax/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/reactions.md","title":"sim/particles/substances/materials/wax/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/reactions.js","updated":"","headings":["sim/particles/substances/materials/wax/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/spell.md","title":"sim/particles/substances/materials/wax/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/spell.js","updated":"","headings":["sim/particles/substances/materials/wax/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/sph.md","title":"sim/particles/substances/materials/wax/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/sph.js","updated":"","headings":["sim/particles/substances/materials/wax/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/thermal.md","title":"sim/particles/substances/materials/wax/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/thermal.js","updated":"","headings":["sim/particles/substances/materials/wax/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wax/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/wax/visual.md","title":"sim/particles/substances/materials/wax/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wax/visual.js","updated":"","headings":["sim/particles/substances/materials/wax/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/audio.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/audio.md","title":"sim/particles/substances/materials/wood/audio.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/audio.js","updated":"","headings":["sim/particles/substances/materials/wood/audio.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/chemistry.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/chemistry.md","title":"sim/particles/substances/materials/wood/chemistry.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/chemistry.js","updated":"","headings":["sim/particles/substances/materials/wood/chemistry.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/decals.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/decals.md","title":"sim/particles/substances/materials/wood/decals.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/decals.js","updated":"","headings":["sim/particles/substances/materials/wood/decals.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/emitter.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/emitter.md","title":"sim/particles/substances/materials/wood/emitter.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/emitter.js","updated":"","headings":["sim/particles/substances/materials/wood/emitter.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/identity.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/identity.md","title":"sim/particles/substances/materials/wood/identity.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/identity.js","updated":"","headings":["sim/particles/substances/materials/wood/identity.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/index.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/index.md","title":"sim/particles/substances/materials/wood/index.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/index.js","updated":"","headings":["sim/particles/substances/materials/wood/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/physics.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/physics.md","title":"sim/particles/substances/materials/wood/physics.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/physics.js","updated":"","headings":["sim/particles/substances/materials/wood/physics.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/reactions.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/reactions.md","title":"sim/particles/substances/materials/wood/reactions.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/reactions.js","updated":"","headings":["sim/particles/substances/materials/wood/reactions.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/spell.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/spell.md","title":"sim/particles/substances/materials/wood/spell.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/spell.js","updated":"","headings":["sim/particles/substances/materials/wood/spell.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/sph.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/sph.md","title":"sim/particles/substances/materials/wood/sph.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/sph.js","updated":"","headings":["sim/particles/substances/materials/wood/sph.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/thermal.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/thermal.md","title":"sim/particles/substances/materials/wood/thermal.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/thermal.js","updated":"","headings":["sim/particles/substances/materials/wood/thermal.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/substances/materials/wood/visual.md::0000","path":"engine/reference/sim/particles/substances/materials/wood/visual.md","title":"sim/particles/substances/materials/wood/visual.js","description":"","kind":"reference","source":"engine/sim/particles/substances/materials/wood/visual.js","updated":"","headings":["sim/particles/substances/materials/wood/visual.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/particles/thermal/index.md::0000","path":"engine/reference/sim/particles/thermal/index.md","title":"sim/particles/thermal/index.js","description":"","kind":"reference","source":"engine/sim/particles/thermal/index.js","updated":"","headings":["sim/particles/thermal/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: thermal/index.js — Re exports for heat, phase transitions, and chemistry. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d2d0f426297ba0dfd3585b159b13887195e134c6ccdde3dcc43a0d5a334ff69a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/ConnectivityCompute.md::0000","path":"engine/reference/sim/physics/ConnectivityCompute.md","title":"sim/physics/ConnectivityCompute.js","description":"","kind":"reference","source":"engine/sim/physics/ConnectivityCompute.js","updated":"","headings":["sim/physics/ConnectivityCompute.js","Classes","class ConnectivityCompute","Functions","indexTo3D(idx, size)","positionToIndex(x, y, z, size)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Initialize GPU resources and pipelines Initialize component IDs from voxel data Run connectivity propagation until convergence Read back component IDs to CPU Get connected components as separate groups Get indices of floating (unanchored) voxels Destroy GPU resources Functions Convert 1D index to 3D position Parameters: (number) — Linear index (number) — Grid size Convert 3D position to 1D index Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Grid size Constants — Maximum iterations before forcing stop (prevents infinite loops) — Workgroup size for compute shaders — Component ID for anchored voxels (ground, supports) — Component ID for empty/air voxels <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision","contentHash":"8f807ac4175b10753d038eeded9c2fca1128372e2178de28f3c85dd7c4f6aef0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/ConnectivityCompute.md::0001","path":"engine/reference/sim/physics/ConnectivityCompute.md","title":"sim/physics/ConnectivityCompute.js","description":"","kind":"reference","source":"engine/sim/physics/ConnectivityCompute.js","updated":"","headings":["sim/physics/ConnectivityCompute.js","Classes","class ConnectivityCompute","Functions","indexTo3D(idx, size)","positionToIndex(x, y, z, size)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— Component ID for empty/air voxels <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"6ef754fae1155016f97ba3d2d3e59882321a6e9bb3462e4e70c7abd35b102061"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/ConvexDecomposition.md::0000","path":"engine/reference/sim/physics/ConvexDecomposition.md","title":"sim/physics/ConvexDecomposition.js","description":"","kind":"reference","source":"engine/sim/physics/ConvexDecomposition.js","updated":"","headings":["sim/physics/ConvexDecomposition.js","Functions","voxelizeMesh(vertices, indices, resolution = 64)","decomposeMesh(vertices, indices, options = {})","hullsToCompoundCollider(hulls)","createDecomposedCollider(vertices, indices, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Voxelize a mesh into a 3D grid Parameters: (Float32Array) — Vertex positions (x, y, z, x, y, z, ...) (Uint32Array Uint16Array) — Triangle indices (number) — Grid resolution Returns: Voxel grid data Decompose a mesh into convex hulls Parameters: (Float32Array) — Vertex positions (Uint32Array Uint16Array) — Triangle indices (Object) — Decomposition options Returns: Array of convex hulls Convert decomposition result to PhysX compound collider format Parameters: (Array) — Array of convex hulls from decomposeMesh Returns: Collider config with compoundColliders array High level function: Decompose mesh and create PhysX collider Parameters: (Float32Array) — Vertex positions (Uint32Array Uint16Array) — Triangle indices (Object) — Decomposition options Returns: Collider config ready for PhysX Constants — Default decomposition parameters <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle","contentHash":"ac2b712ab3a9c0b8b9326c797a78c13773d89da66e104908b2a1232848d5443f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/ConvexDecomposition.md::0001","path":"engine/reference/sim/physics/ConvexDecomposition.md","title":"sim/physics/ConvexDecomposition.js","description":"","kind":"reference","source":"engine/sim/physics/ConvexDecomposition.js","updated":"","headings":["sim/physics/ConvexDecomposition.js","Functions","voxelizeMesh(vertices, indices, resolution = 64)","decomposeMesh(vertices, indices, options = {})","hullsToCompoundCollider(hulls)","createDecomposedCollider(vertices, indices, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b7e480568709a6ed467674c825f60dd6d8280c25f1867845bc494e2af83c8366"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/DynamicMeshCollider.md::0000","path":"engine/reference/sim/physics/DynamicMeshCollider.md","title":"sim/physics/DynamicMeshCollider.js","description":"","kind":"reference","source":"engine/sim/physics/DynamicMeshCollider.js","updated":"","headings":["sim/physics/DynamicMeshCollider.js","Functions","cookMeshColliderFromVertices(world, meshId, positions)","cookMeshColliderFromRenderMesh(world, renderMesh)","getColliderConfigForMesh(meshId, halfExtents = [0.5, 0.5, 0.5])","createUniversalCollider(world, meshType, geometryFn, halfExtents = [0.5, 0.5, 0.5], material = null, density = 1.0)","clearMeshColliderCache()","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/FragmentPhysics.md::0000","path":"engine/reference/sim/physics/FragmentPhysics.md","title":"sim/physics/FragmentPhysics.js","description":"","kind":"reference","source":"engine/sim/physics/FragmentPhysics.js","updated":"","headings":["sim/physics/FragmentPhysics.js","Classes","class StructuralConnection","class PhysicsFragment","class FragmentManager","Functions","meshFragmentToIndexedMesh(meshFragment, options = null)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Represents a connection between two fragments Method Signature Summary Apply stress to connection Reset stress (for iterative solvers) A mesh fragment with physics properties Method Signature Summary Compute mass and inertia from mesh Check if fragment is too small (should become particles) Get convex hull points for PhysX Apply impulse at point Check if fragment is at rest Manages all physics fragments in the world Method Signature Summary Initialize the fragment manager Fracture a mesh at impact point Update all fragments Apply damage to structural connections Create cell lookup function from seeds Convert small fragment to particles Create GPU buffers for fragment rendering Add fragment to PhysX world Sync fragment state from PhysX Build connection graph between fragments Check if two bounding boxes overlap Estimate contact area between fragments Remove a fragment Load configuration from engine.cfg section Destroy all resources Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints","contentHash":"404c581c020e8ffd737af834cfd3637e659785b0d480957644976101e7a01902"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/FragmentPhysics.md::0001","path":"engine/reference/sim/physics/FragmentPhysics.md","title":"sim/physics/FragmentPhysics.js","description":"","kind":"reference","source":"engine/sim/physics/FragmentPhysics.js","updated":"","headings":["sim/physics/FragmentPhysics.js","Classes","class StructuralConnection","class PhysicsFragment","class FragmentManager","Functions","meshFragmentToIndexedMesh(meshFragment, options = null)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"29c8aaa45bb4aa7f28a996d3c3493e208013a8f6a7c82d0d03109b678a421efb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/GPUArticulationSolver.md::0000","path":"engine/reference/sim/physics/GPUArticulationSolver.md","title":"sim/physics/GPUArticulationSolver.js","description":"","kind":"reference","source":"engine/sim/physics/GPUArticulationSolver.js","updated":"","headings":["sim/physics/GPUArticulationSolver.js","Classes","class GPUArticulationSolver","Functions","async getGPUArticulationSolver(device)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Create a rope articulation Step simulation on GPU Read particle positions back to CPU Get particles synchronously (uses last known positions) Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"1ebc288656e21cc9071d83c2ac7aa235a2bedebbaadcefb448a00574ef4dc1b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/GPUClothSolver.md::0000","path":"engine/reference/sim/physics/GPUClothSolver.md","title":"sim/physics/GPUClothSolver.js","description":"","kind":"reference","source":"engine/sim/physics/GPUClothSolver.js","updated":"","headings":["sim/physics/GPUClothSolver.js","Classes","class GPUClothSolver","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Step cloth simulation using small substeps approach Per Miles Macklin (NVIDIA 2019): n small timesteps with 1 iteration each is more stable than 1 large timestep with n iterations. Add a sphere collider Add a plane collider (infinite half space) Add a capsule collider (OGC enabled) Clear all colliders Set OGC contact parameters at runtime Create cloth mesh from grid Constants — Default substeps (small substeps approach) — Default iterations per substep <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt","contentHash":"041e0517533046293927ccfde1a39a8f2f79aef723df13b3abe3070c5651c8d6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/GPUClothSolver.md::0001","path":"engine/reference/sim/physics/GPUClothSolver.md","title":"sim/physics/GPUClothSolver.js","description":"","kind":"reference","source":"engine/sim/physics/GPUClothSolver.js","updated":"","headings":["sim/physics/GPUClothSolver.js","Classes","class GPUClothSolver","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"4f080804cc92fe6e52e98c8c5d60d5e10a762b0a0b25d2f79dd92a5658ab489d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/GPUSpatialHash.md::0000","path":"engine/reference/sim/physics/GPUSpatialHash.md","title":"sim/physics/GPUSpatialHash.js","description":"","kind":"reference","source":"engine/sim/physics/GPUSpatialHash.js","updated":"","headings":["sim/physics/GPUSpatialHash.js","Classes","class SpatialHashGrid","class GPUSpatialHashGrid","Functions","morton3D(x, y, z)","hashCell(x, y, z, tableSize)","async createSpatialHashFromVGPU(vgpu, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes CPU based spatial hash grid for physics broad phase Method Signature Summary Clear all objects from the grid Get cell coordinates from world position Insert an object with AABB into the grid Remove an object from the grid Update an object's position in the grid Query potential collision candidates for an AABB Get all potential collision pairs Uses the \"home cell\" optimization from GPU Gems to avoid duplicate pairs AABB overlap test Get statistics about the grid GPU accelerated spatial hash grid using WebGPU compute shaders Method Signature Summary Update object AABBs from CPU data Run broad phase collision detection Functions Calculate Morton code for 3D position Parameters: (number) — X coordinate (0 1023) (number) — Y coordinate (0 1023) (number) — Z coordinate (0 1023) Returns: Morton code Simple hash function for cell coordinates Factory function to create GPUSpatialHashGrid from VirtualGPU Parameters: (Object) — VirtualGPU instance (Object) — Grid options Returns: Initialized grid <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable","contentHash":"d35b1b5f750438c9bf554e2554c25a2b03cae6d88a7c93c999de9653e37e0f65"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/GPUSpatialHash.md::0001","path":"engine/reference/sim/physics/GPUSpatialHash.md","title":"sim/physics/GPUSpatialHash.js","description":"","kind":"reference","source":"engine/sim/physics/GPUSpatialHash.js","updated":"","headings":["sim/physics/GPUSpatialHash.js","Classes","class SpatialHashGrid","class GPUSpatialHashGrid","Functions","morton3D(x, y, z)","hashCell(x, y, z, tableSize)","async createSpatialHashFromVGPU(vgpu, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"14cc2538c8b001714e76948d334920585743d113901e64773a35810439444284"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/MLSMPMSolver.md::0000","path":"engine/reference/sim/physics/MLSMPMSolver.md","title":"sim/physics/MLSMPMSolver.js","description":"","kind":"reference","source":"engine/sim/physics/MLSMPMSolver.js","updated":"","headings":["sim/physics/MLSMPMSolver.js","Classes","class MPMParticle","class GridCell","class MLSMPMSolver","Functions","quadraticBSpline(x)","quadraticBSplineGrad(x)","computeWeight(px, py, pz, gx, gy, gz, cellSize = 1.0)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Compute Lamé parameters from Young's modulus and Poisson's ratio Method Signature Summary Method Signature Summary Initialize GPU resources Add a particle Add a box of particles Upload particles to GPU Update uniform buffer Step simulation (CPU fallback for debugging) Destroy GPU resources Functions Quadratic B spline weight Parameters: (number) — Distance in grid cells Returns: Weight Quadratic B spline derivative Parameters: (number) — No description in source JSDoc. Compute 3D weight and gradient for a particle grid pair Constants — Grid cell size (1 unit typical) — Default grid dimensions — Quadratic B spline support radius (3 cells) — Constitutive model types — Material presets <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase","contentHash":"9ef9169e787b141dfd2e9b5a3da5139426d6004fb1334c6c4830645f6e892bcf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/MLSMPMSolver.md::0001","path":"engine/reference/sim/physics/MLSMPMSolver.md","title":"sim/physics/MLSMPMSolver.js","description":"","kind":"reference","source":"engine/sim/physics/MLSMPMSolver.js","updated":"","headings":["sim/physics/MLSMPMSolver.js","Classes","class MPMParticle","class GridCell","class MLSMPMSolver","Functions","quadraticBSpline(x)","quadraticBSplineGrad(x)","computeWeight(px, py, pz, gx, gy, gz, cellSize = 1.0)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"767e31ac84d7713615831865c35cbc1b59d89ed4bf0472a3ca459fe2a5281784"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/MeshCutter.md::0000","path":"engine/reference/sim/physics/MeshCutter.md","title":"sim/physics/MeshCutter.js","description":"","kind":"reference","source":"engine/sim/physics/MeshCutter.js","updated":"","headings":["sim/physics/MeshCutter.js","Classes","class Plane","class Vertex","class Triangle","class MeshFragment","class MeshCutter","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Create plane from point and normal Create plane from three points Signed distance from point to plane Classify point relative to plane Get intersection point of line segment with plane Method Signature Summary Interpolate between two vertices Method Signature Summary Get triangle normal Get triangle centroid Classify triangle vs plane Split triangle by plane, returns { front: [], back: [] } Triangulate a convex polygon Method Signature Summary Add triangle to fragment Add cap triangle (cut surface) Compute bounding box Compute centroid Estimate volume using bounding box Generate convex hull points for PhysX Convert to GPU ready vertex/index arrays Method Signature Summary Cut a mesh by a single plane Cut mesh by multiple planes (from Voronoi boundaries) Cut mesh using Voronoi cell assignments (centroid based, fast but imprecise). Only assigns whole triangles — does NOT split triangles across cell boundaries. Use cutByVoronoiExact for low poly meshes that need proper clipping. Cut mesh into exact Voronoi cells using bisecting plane clipping. For each seed, clips the full mesh against bisecting planes with every other seed, keeping only the region closest to that seed. Properly splits triangles that span cell boundaries and generates cap geometry at cuts. Collect edges that lie on","contentHash":"b9d5b04a68c110c04a3e0bb67ae94d8d5a3ae30478dddef51ec8cc17b722ef3f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/MeshCutter.md::0001","path":"engine/reference/sim/physics/MeshCutter.md","title":"sim/physics/MeshCutter.js","description":"","kind":"reference","source":"engine/sim/physics/MeshCutter.js","updated":"","headings":["sim/physics/MeshCutter.js","Classes","class Plane","class Vertex","class Triangle","class MeshFragment","class MeshCutter","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"keeping only the region closest to that seed. Properly splits triangles that span cell boundaries and generates cap geometry at cuts. Collect edges that lie on the cutting plane Generate cap triangles for cut surface Get a tangent vector perpendicular to normal <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"1c48e0879671b5125e8811a22afdd455704059294be8eabd8446f7bc53609cf1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/MeshDecimation.md::0000","path":"engine/reference/sim/physics/MeshDecimation.md","title":"sim/physics/MeshDecimation.js","description":"","kind":"reference","source":"engine/sim/physics/MeshDecimation.js","updated":"","headings":["sim/physics/MeshDecimation.js","Classes","class Vertex","class Triangle","class Quadric","class Edge","class MeshDecimator","Functions","decimateGrid(vertices, indices, gridSize = DEFAULTGRIDSIZE)","decimateQEM(vertices, indices, targetRatio = DEFAULTTARGETRATIO, maxIterations = Infinity, options = null)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Method Signature Summary Method Signature Summary Create from plane equation ax + by + cz + d = 0 Create from triangle Add another quadric Evaluate error at point Find optimal point that minimizes error Returns null if matrix is singular Method Signature Summary Method Signature Summary Decimate a mesh Decimate with automatic method selection based on size Functions Fast grid based mesh decimation Parameters: (number[]) — Flat array [x,y,z, x,y,z, ...] (number[]) — Triangle indices (number) — Cell size for vertex snapping Returns: } QEM based mesh decimation Parameters: (number[]) — Flat array [x,y,z, ...] (number[]) — Triangle indices (number) — Target vertex count ratio (0.1 = 10% of original) (number) — Max edge collapses (for realtime) Returns: } Constants — Default grid cell size for grid based decimation — Default target reduction ratio — Maximum QEM iterations per frame (for realtime) <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase","contentHash":"4b755376055868579b00cb2b42fba60ceb9adc5e45799f46ed68e4d0539d527c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/MeshDecimation.md::0001","path":"engine/reference/sim/physics/MeshDecimation.md","title":"sim/physics/MeshDecimation.js","description":"","kind":"reference","source":"engine/sim/physics/MeshDecimation.js","updated":"","headings":["sim/physics/MeshDecimation.js","Classes","class Vertex","class Triangle","class Quadric","class Edge","class MeshDecimator","Functions","decimateGrid(vertices, indices, gridSize = DEFAULTGRIDSIZE)","decimateQEM(vertices, indices, targetRatio = DEFAULTTARGETRATIO, maxIterations = Infinity, options = null)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"767e31ac84d7713615831865c35cbc1b59d89ed4bf0472a3ca459fe2a5281784"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/MeshParticles.md::0000","path":"engine/reference/sim/physics/MeshParticles.md","title":"sim/physics/MeshParticles.js","description":"","kind":"reference","source":"engine/sim/physics/MeshParticles.js","updated":"","headings":["sim/physics/MeshParticles.js","Classes","class DebrisParticle","class MeshParticleSystem","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Single debris chunk with mesh, physics, and rendering state Method Signature Summary Reset for pool reuse Initialize from cluster data Generate LOD meshes Update LOD based on camera distance Get current mesh for rendering Method Signature Summary Initialize GPU resources Spawn debris from a cluster Spawn multiple debris from connectivity result Update all particles Get instance data for GPU rendering Upload instance data to GPU Get active particles for rendering Clear all particles Destroy GPU resources Get stats Constants — Maximum active debris particles — LOD distance thresholds — LOD decimation ratios — Minimum voxels to create debris (smaller clusters become particles) — Maximum voxels per debris chunk — Debris lifetime in seconds — Debris states Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See","contentHash":"b2218378276fb6bd3428f1509a07ac41cadcd0bf77db3899c081420b05410e23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/MeshParticles.md::0001","path":"engine/reference/sim/physics/MeshParticles.md","title":"sim/physics/MeshParticles.js","description":"","kind":"reference","source":"engine/sim/physics/MeshParticles.js","updated":"","headings":["sim/physics/MeshParticles.js","Classes","class DebrisParticle","class MeshParticleSystem","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"dcb0de51eb851c021991d8506fb88d946be137f3c8abf884f3173607a6b31dc0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/OGCContact.md::0000","path":"engine/reference/sim/physics/OGCContact.md","title":"sim/physics/OGCContact.js","description":"","kind":"reference","source":"engine/sim/physics/OGCContact.js","updated":"","headings":["sim/physics/OGCContact.js","Classes","class OGCContactManager","Functions","barrierEnergy(d, r)","barrierForce(d, r)","normalizedBarrierEnergy(d, r)","conservativeDisplacementBound(currentDistance, contactRadius)","distanceToOffsetSphere(p, center, radius, r)","distanceToOffsetPlane(p, planePoint, planeNormal, r)","distanceToOffsetCapsule(p, a, b, radius, r)","distanceToOffsetBox(p, center, halfExtents, rotation, r)","evaluateAnalyticSDF(shape, params, lx, ly, lz)","distanceToOffsetEdge(p, a, b, r)","distanceToOffsetTriangle(p, v0, v1, v2, r)","applyOGCForce(particle, distance, normal, contactRadius, stiffness, dt)","applyOGCPositionCorrection(particle, distance, normal, contactRadius, compliance, dt)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Manages OGC contacts for a simulation Method Signature Summary Clear all colliders Add a sphere collider Add a plane collider Add a capsule collider Add a ground plane at y=0 Find closest contact for a point Solve contacts for an array of particles (PBD style) Functions OGC Barrier energy function g(d) = d²(2r d)² Smooth C1 continuous, zero at d=0 and d=2r Maximum at d=r Parameters: (number) — Distance to offset surface (number) — Contact radius Returns: Barrier energy Derivative of barrier energy: g'(d) = 2d(2r d)(2r 2d) Used for force computation Parameters: (number) — Distance to offset surface (number) — Contact radius Returns: Barrier force magnitude (negative = repulsive) Normalized barrier energy for stability Scales to [0, 1] range with maximum at d=r Parameters: (number) — Distance (number) — Contact radius Returns: Normalized energy [0, 1] Compute conservative displacement bound for a vertex This is the maximum safe movement before barrier check is needed Parameters: (number) — Current distance to nearest obstacle (number) — Contact radius r Returns: Maximum safe","contentHash":"488303a072ee902d936968340a3e9fd5174507870b5540987e9427d5e0b366be"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/OGCContact.md::0001","path":"engine/reference/sim/physics/OGCContact.md","title":"sim/physics/OGCContact.js","description":"","kind":"reference","source":"engine/sim/physics/OGCContact.js","updated":"","headings":["sim/physics/OGCContact.js","Classes","class OGCContactManager","Functions","barrierEnergy(d, r)","barrierForce(d, r)","normalizedBarrierEnergy(d, r)","conservativeDisplacementBound(currentDistance, contactRadius)","distanceToOffsetSphere(p, center, radius, r)","distanceToOffsetPlane(p, planePoint, planeNormal, r)","distanceToOffsetCapsule(p, a, b, radius, r)","distanceToOffsetBox(p, center, halfExtents, rotation, r)","evaluateAnalyticSDF(shape, params, lx, ly, lz)","distanceToOffsetEdge(p, a, b, r)","distanceToOffsetTriangle(p, v0, v1, v2, r)","applyOGCForce(particle, distance, normal, contactRadius, stiffness, dt)","applyOGCPositionCorrection(particle, distance, normal, contactRadius, compliance, dt)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"safe movement before barrier check is needed Parameters: (number) — Current distance to nearest obstacle (number) — Contact radius r Returns: Maximum safe displacement Distance from point to offset sphere (sphere with radius inflated by r) Parameters: (Array) — Point [x, y, z] (Array) — Sphere center [x, y, z] (number) — Original sphere radius (number) — Contact offset radius Returns: } Distance and contact normal Distance from point to offset plane (plane pushed by r along normal) Parameters: (Array) — Point [x, y, z] (Array) — Point on plane (Array) — Plane normal (unit vector) (number) — Contact offset radius Returns: } Distance from point to offset capsule Parameters: (Array) — Point [x, y, z] (Array) — Capsule start [x, y, z] (Array) — Capsule end [x, y, z] (number) — Capsule radius (number) — Contact offset radius Returns: } Distance from point to offset box (OBB with offset shell) Handles rotated boxes by transforming into local space. Parameters: (Array) — Point [x, y, z] (Array) — Box center [x, y, z] (Array) — Half extents [hx, hy, hz] (Array) — Quaternion [x, y, z, w] (identity = [0,0,0,1]) (number) — Contact offset radius (particle radius added by caller) Returns: } Evaluate an analytic SDF in local space (no transform — caller handles that). Parameters: (string) — SDF shape type ('box','sphere','capsule','cylinder','torus') (Array) — Shape parameters [p0, p1, p2, p3] (number) — Local space X (number) — Local space Y (number) — Local space Z Returns: } Signed distance and outward normal Distance from point to offset edge (line segment with offset radius) Parameters: (Array) — Point [x, y, z] (Array) — Edge start [x, y, z] (Array) — Edge end [x, y, z] (number) — Contact offset radius Returns: } Distance from point to offset triangle (triangle with offset","contentHash":"6ba64e2c318b41f8a12a09b8ca01dab54c26e52bee56491cea0d64af9db4128d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/OGCContact.md::0002","path":"engine/reference/sim/physics/OGCContact.md","title":"sim/physics/OGCContact.js","description":"","kind":"reference","source":"engine/sim/physics/OGCContact.js","updated":"","headings":["sim/physics/OGCContact.js","Classes","class OGCContactManager","Functions","barrierEnergy(d, r)","barrierForce(d, r)","normalizedBarrierEnergy(d, r)","conservativeDisplacementBound(currentDistance, contactRadius)","distanceToOffsetSphere(p, center, radius, r)","distanceToOffsetPlane(p, planePoint, planeNormal, r)","distanceToOffsetCapsule(p, a, b, radius, r)","distanceToOffsetBox(p, center, halfExtents, rotation, r)","evaluateAnalyticSDF(shape, params, lx, ly, lz)","distanceToOffsetEdge(p, a, b, r)","distanceToOffsetTriangle(p, v0, v1, v2, r)","applyOGCForce(particle, distance, normal, contactRadius, stiffness, dt)","applyOGCPositionCorrection(particle, distance, normal, contactRadius, compliance, dt)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"— Edge start [x, y, z] (Array) — Edge end [x, y, z] (number) — Contact offset radius Returns: } Distance from point to offset triangle (triangle with offset shell) Uses the face normal for orthogonal contact Parameters: (Array) — Point [x, y, z] (Array) — Triangle vertex 0 (Array) — Triangle vertex 1 (Array) — Triangle vertex 2 (number) — Contact offset radius Returns: } Apply OGC barrier force to a particle Parameters: (Object) — Particle with position, velocity, invMass (number) — Distance to offset surface (Array) — Contact normal (number) — Contact radius r (number) — Barrier stiffness (number) — Time step Apply OGC position correction (for PBD style solvers) Parameters: (Object) — Particle with position, i","contentHash":"b641887e1856ceefe0c01412100f2d490c94f401f545c94deabff5928b30184b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PBDRagdoll.md::0000","path":"engine/reference/sim/physics/PBDRagdoll.md","title":"sim/physics/PBDRagdoll.js","description":"","kind":"reference","source":"engine/sim/physics/PBDRagdoll.js","updated":"","headings":["sim/physics/PBDRagdoll.js","Classes","class CapsuleCollider","class RagdollBoneData","class PBDRagdoll","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Update world position from bone transform Check collision with point Check collision with another capsule Method Signature Summary Method Signature Summary Build the skeleton structure Assign each bone's jointType + jointLimits from the canonical RagdollBuilder/JointLimits anatomical profile (CANONICAL JOINT LIMITS, keyed by canonical slot via RAGDOLL BONE TO SLOT) instead of a hand duplicated local table — the single source of truth every other humanoid ragdoll consumer already reads from. Initialize from animation pose Activate ragdoll physics Deactivate ragdoll, return to animation Apply impulse to a bone Apply explosion force Update ragdoll physics Get bone world position Get all bone transforms for rendering Check if currently ragdolling Set gravity direction Initialize earthquake response system Apply earthquake shaking to ragdoll Get earthquake response state Set earthquake sensitivity Integrate with SeismicSystem Constants — Bone identifiers — Joint types — Ragdoll states — Default humanoid measurements (meters) — Joint angle limits (radians) <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters,","contentHash":"a48c9d4bd8ca1956823f8f2fd34f9832665700208770139b6a25a616fd0772b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PBDRagdoll.md::0001","path":"engine/reference/sim/physics/PBDRagdoll.md","title":"sim/physics/PBDRagdoll.js","description":"","kind":"reference","source":"engine/sim/physics/PBDRagdoll.js","updated":"","headings":["sim/physics/PBDRagdoll.js","Classes","class CapsuleCollider","class RagdollBoneData","class PBDRagdoll","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2ebe30de518c9bc72be6c6df627184fa63741d937ed31b9d0e4de08770335029"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PBDSolver.md::0000","path":"engine/reference/sim/physics/PBDSolver.md","title":"sim/physics/PBDSolver.js","description":"","kind":"reference","source":"engine/sim/physics/PBDSolver.js","updated":"","headings":["sim/physics/PBDSolver.js","Classes","class PBDParticle","class PBDConstraint","class DistanceConstraint extends PBDConstraint","class AngleConstraint extends PBDConstraint","class AttachmentConstraint extends PBDConstraint","class BendingConstraint extends PBDConstraint","class SpringConstraint extends PBDConstraint","class CohesionConstraint extends PBDConstraint","class LongRangeAttachmentConstraint extends PBDConstraint","class VolumeConstraint extends PBDConstraint","class ShapeMatchingConstraint extends PBDConstraint","class PressureConstraint extends PBDConstraint","class DensityConstraint extends PBDConstraint","class PBDSolver","Functions","colorConstraints(constraints, particles)","groupByColor(constraints, numColors)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes PBD Particle with position, velocity, and inverse mass Method Signature Summary Set position and sync previous Set velocity (adjusts previous position) Check if particle is fixed Base constraint class Method Signature Summary Set stiffness via compliance (XPBD) Lower compliance = stiffer Distance constraint maintains rest length between two particles Method Signature Summary Project constraint (Gauss Seidel) Angle constraint limits angle between three particles Method Signature Summary Attachment constraint pins particle to world position Simple and stable: directly moves particle toward target Method Signature Summary Bending constraint maintains angle between 3 particles UNTESTED Used for hair, grass, stiff ropes Method Signature","contentHash":"b03a48dae81128a86abe764bc63582f6ad5af40e05670660c5671dccfdb5335a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PBDSolver.md::0001","path":"engine/reference/sim/physics/PBDSolver.md","title":"sim/physics/PBDSolver.js","description":"","kind":"reference","source":"engine/sim/physics/PBDSolver.js","updated":"","headings":["sim/physics/PBDSolver.js","Classes","class PBDParticle","class PBDConstraint","class DistanceConstraint extends PBDConstraint","class AngleConstraint extends PBDConstraint","class AttachmentConstraint extends PBDConstraint","class BendingConstraint extends PBDConstraint","class SpringConstraint extends PBDConstraint","class CohesionConstraint extends PBDConstraint","class LongRangeAttachmentConstraint extends PBDConstraint","class VolumeConstraint extends PBDConstraint","class ShapeMatchingConstraint extends PBDConstraint","class PressureConstraint extends PBDConstraint","class DensityConstraint extends PBDConstraint","class PBDSolver","Functions","colorConstraints(constraints, particles)","groupByColor(constraints, numColors)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"toward target Method Signature Summary Bending constraint maintains angle between 3 particles UNTESTED Used for hair, grass, stiff ropes Method Signature Summary Spring constraint UNTESTED Unlike distance constraint, springs can compress AND extend (Hooke's law) Method Signature Summary Cohesion constraint UNTESTED Particles attract each other within a radius (like water droplets) Method Signature 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. Method Signature Summary Volume constraint preserves volume of a tetrahedron (4 particles) C = V V0 = 0, where V = (1/6) (p1 p0) · ((p2 p0) × (p3 p0)) Method Signature Summary Shape Matching constraint restores N particles to their original shape Based on \"Meshless Deformations Based on Shape Matching\" (Müller 2005) Method Signature Summary Pressure constraint internal pressure for closed meshes (balloons) Works with N particles forming a closed surface Method Signature Summary SPH Density constraint maintains constant density (fluids) Based on \"Position Based Fluids\" (Macklin & Müller 2013) Method Signature Summary Method Signature Summary Add a particle Add a distance constraint Add an angle constraint Add attachment constraint Add Long Range Attachment (LRA) constraints","contentHash":"95fb0b266abe816376d4499f360de63505063d1cf41feb1ab1a09c7dee8b7efc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PBDSolver.md::0002","path":"engine/reference/sim/physics/PBDSolver.md","title":"sim/physics/PBDSolver.js","description":"","kind":"reference","source":"engine/sim/physics/PBDSolver.js","updated":"","headings":["sim/physics/PBDSolver.js","Classes","class PBDParticle","class PBDConstraint","class DistanceConstraint extends PBDConstraint","class AngleConstraint extends PBDConstraint","class AttachmentConstraint extends PBDConstraint","class BendingConstraint extends PBDConstraint","class SpringConstraint extends PBDConstraint","class CohesionConstraint extends PBDConstraint","class LongRangeAttachmentConstraint extends PBDConstraint","class VolumeConstraint extends PBDConstraint","class ShapeMatchingConstraint extends PBDConstraint","class PressureConstraint extends PBDConstraint","class DensityConstraint extends PBDConstraint","class PBDSolver","Functions","colorConstraints(constraints, particles)","groupByColor(constraints, numColors)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"Method Signature Summary Add a particle Add a distance constraint Add an angle constraint Add attachment constraint Add Long Range Attachment (LRA) constraints for a rope/chain This dramatically improves convergence for long ropes (100+ particles) Add a bending constraint between 3 particles UNTESTED Maintains angle at center particle (particleB) Add a spring constraint UNTESTED Unlike distance, springs can compress AND extend (Hooke's law) Add a cohesion constraint Particles attract each other within a radius Add volume constraint (4 particles forming tetrahedron) Used for soft body simulation Add shape matching constraint (N particles) Restores particles to original shape works with ANY number of particle","contentHash":"3f2b0b64a3e84a46f680e993290105a603f673e8451730f51a123a6106bc47d4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXArticulations.md::0000","path":"engine/reference/sim/physics/PhysXArticulations.md","title":"sim/physics/PhysXArticulations.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXArticulations.js","updated":"","headings":["sim/physics/PhysXArticulations.js","Functions","createArticulation(world, options = {})","createRootLink(articulation, options = {})","createChildLink(articulation, parentLink, options = {})","addArticulationToScene(articulation)","createRope(world, startPos, endPos, segments = 10, options = {})","getArticulationLinkTransforms(articulation)","destroyArticulation(articulation)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Create a reduced coordinate articulation (PhysX 5.x) Parameters: (Object) — Physics world (Object) — Articulation options Returns: Articulation handle Create the root link of an articulation Parameters: (Object) — Articulation handle (Object) — Link options (position, geometry, etc.) Returns: Link handle Create a child link attached to a parent link Parameters: (Object) — Articulation handle (Object) — Parent link handle (Object) — Link and joint options Returns: Link handle Add articulation to scene (must be called after all links are created) Parameters: (Object) — Articulation handle Create a rope using articulations Per NVIDIA: \"Use spheres instead of capsules. A rope made of spheres will be more stable.\" Parameters: (Object) — Physics world (Array) — Start position [x, y, z] (Array) — End position [x, y, z] (number) — Number of rope segments (Object) — Rope options Returns: Articulation handle Update articulation link positions from simulation Parameters: (Object) — Articulation handle Returns: Array of {position, rotation} for each link Destroy an articulation and clean up resources Parameters: (Object) — Articulation handle","contentHash":"d2bbef0f8fc75fe7b5ab8a4d93a3a6ae396d740dd0d2e75bd9e85ecfd1010e41"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXArticulations.md::0001","path":"engine/reference/sim/physics/PhysXArticulations.md","title":"sim/physics/PhysXArticulations.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXArticulations.js","updated":"","headings":["sim/physics/PhysXArticulations.js","Functions","createArticulation(world, options = {})","createRootLink(articulation, options = {})","createChildLink(articulation, parentLink, options = {})","addArticulationToScene(articulation)","createRope(world, startPos, endPos, segments = 10, options = {})","getArticulationLinkTransforms(articulation)","destroyArticulation(articulation)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"handle Returns: Array of {position, rotation} for each link Destroy an articulation and clean up resources Parameters: (Object) — Articulation handle <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"4e13cb7e802f07c0f766ba5a6edb263e1039a301f5acd5b9c6b69900f3aba0f9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXJoints.md::0000","path":"engine/reference/sim/physics/PhysXJoints.md","title":"sim/physics/PhysXJoints.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXJoints.js","updated":"","headings":["sim/physics/PhysXJoints.js","Functions","getPhysXJointCapabilities(world)","createD6Joint(world, bodyA, bodyB, options = {})","createRevoluteJoint(world, bodyA, bodyB, options = {})","createSphericalJoint(world, bodyA, bodyB, options = {})","createDistanceJoint(world, bodyA, bodyB, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PhysX Joint Creation API Exposes D6, revolute, distance, and spherical joints for articulated bodies Functions PhysX Joint Creation API Exposes D6, revolute, distance, and spherical joints for articulated bodies Create a D6 joint (6 degrees of freedom most flexible joint type) Parameters: (Object) — PhysX world (Object) — First body (or null for world anchor) (Object) — Second body (Object) — Joint configuration Returns: Joint handle with control methods Create a revolute joint (hinge joint 1 rotational DOF) Parameters: (Object) — PhysX world (Object) — First body (Object) — Second body (Object) — Joint configuration Returns: Joint handle Create a spherical joint (ball and socket 3 rotational DOF) Parameters: (Object) — PhysX world (Object) — First body (Object) — Second body (Object) — Joint configuration Returns: Joint handle Create a distance joint (maintains distance between two points) Parameters: (Object) — PhysX world (Object) — First body (Object) — Second body (Object) — Joint configuration Returns: Joint handle <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use","contentHash":"bff2777a828f92c6641a541387dd55b71fd15b276a7beda1a89527223c000042"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXJoints.md::0001","path":"engine/reference/sim/physics/PhysXJoints.md","title":"sim/physics/PhysXJoints.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXJoints.js","updated":"","headings":["sim/physics/PhysXJoints.js","Functions","getPhysXJointCapabilities(world)","createD6Joint(world, bodyA, bodyB, options = {})","createRevoluteJoint(world, bodyA, bodyB, options = {})","createSphericalJoint(world, bodyA, bodyB, options = {})","createDistanceJoint(world, bodyA, bodyB, options = {})","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"0e57563f3ab5aa412de9ea6c2b1d4ae87edef6018d88173348ae4a63dc357ebf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXMeshCooking.md::0000","path":"engine/reference/sim/physics/PhysXMeshCooking.md","title":"sim/physics/PhysXMeshCooking.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXMeshCooking.js","updated":"","headings":["sim/physics/PhysXMeshCooking.js","Functions","cookAndRegisterConvexMeshForWorld(world, meshId, positions)","cookAndRegisterTriangleMeshForWorld(world, meshId, positions, indices)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Local register helpers (avoid circular import with PhysXPhysicsWorld) Functions Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"fc39f824b78777c5da9b51225bd5101fcda229a75e98b8c8dae91446a4efc747"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXModule.md::0000","path":"engine/reference/sim/physics/PhysXModule.md","title":"sim/physics/PhysXModule.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXModule.js","updated":"","headings":["sim/physics/PhysXModule.js","Functions","ensurePhysXModule()","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"580b75b8b695b8a04da8363c435efb795b7eb14be1e0be58449c8edf0ab8856b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXPhysicsWorld.md::0000","path":"engine/reference/sim/physics/PhysXPhysicsWorld.md","title":"sim/physics/PhysXPhysicsWorld.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXPhysicsWorld.js","updated":"","headings":["sim/physics/PhysXPhysicsWorld.js","Functions","createPhysicsWorld(options = {})","registerConvexMesh(world, meshId, pxConvexMesh)","registerTriangleMesh(world, meshId, pxTriangleMesh)","destroyPhysicsWorld(world)","createBody(world, desc)","getBody(world, handle)","setBodyKinematic(world, handle, enabled)","setKinematicPose(world, handle, position, rotation = [0, 0, 0, 1])","removeBody(world, handle)","updateBodyFilterData(world, handle, entityFlags)","updateWorldMaterial(world, materialOptions)","raycastWorld(world, origin, direction, maxDistance)","stepPhysicsWorld(world, deltaTime)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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). Parameters: (object) — No description in source JSDoc. (number) — body handle from createBody (simMode 'kinematic') (number[]) — [x,y,z] (number[]) — [x,y,z,w] Update a body's collision filter data based on EntityFlags Call this when EntityFlags.collisionLayer, collisionMask, or collisionMode changes Parameters: (object) — Physics world (number object) — Body handle or body object (object) — Updated EntityFlags component data Returns: True if update succeeded Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics ·","contentHash":"7c1a590e74b997e604c119b194020baaba853f3301638815d8d2ad1ae9306778"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXPhysicsWorld.md::0001","path":"engine/reference/sim/physics/PhysXPhysicsWorld.md","title":"sim/physics/PhysXPhysicsWorld.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXPhysicsWorld.js","updated":"","headings":["sim/physics/PhysXPhysicsWorld.js","Functions","createPhysicsWorld(options = {})","registerConvexMesh(world, meshId, pxConvexMesh)","registerTriangleMesh(world, meshId, pxTriangleMesh)","destroyPhysicsWorld(world)","createBody(world, desc)","getBody(world, handle)","setBodyKinematic(world, handle, enabled)","setKinematicPose(world, handle, position, rotation = [0, 0, 0, 1])","removeBody(world, handle)","updateBodyFilterData(world, handle, entityFlags)","updateWorldMaterial(world, materialOptions)","raycastWorld(world, origin, direction, maxDistance)","stepPhysicsWorld(world, deltaTime)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"91c4e8c1f04387736aa0729dfb8844c06125b06721be003fc302898226c1f6d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysXVehicle.md::0000","path":"engine/reference/sim/physics/PhysXVehicle.md","title":"sim/physics/PhysXVehicle.js","description":"","kind":"reference","source":"engine/sim/physics/PhysXVehicle.js","updated":"","headings":["sim/physics/PhysXVehicle.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Compatibility entry point. Implementation is split by vehicle subsystem in ./vehicle so existing engine and playground import paths remain stable. Re exports , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"448fe023a0a992f4372e7b7a50373c39489e0086614ec024495ebfbb635ffda0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysicalMaterialPresets.md::0000","path":"engine/reference/sim/physics/PhysicalMaterialPresets.md","title":"sim/physics/PhysicalMaterialPresets.js","description":"","kind":"reference","source":"engine/sim/physics/PhysicalMaterialPresets.js","updated":"","headings":["sim/physics/PhysicalMaterialPresets.js","Functions","getMaterialPreset(key)","createPhysicalMaterial(presetKey, overrides = {})","computeMassFromMaterial(material, halfExtents, colliderShape)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Get a full material preset by key (returns a shallow copy). Parameters: (string) — — e.g. 'steel', 'wood' Create a PhysicalMaterial component value from a preset key, with optional property overrides. Parameters: (string) — No description in source JSDoc. (Object) — No description in source JSDoc. Compute mass from material density and collider volume. Parameters: (Object) — — PhysicalMaterial component (number[]) — — [hx, hy, hz] from collider (string) — — 'box', 'sphere', 'capsule', etc. Returns: mass in kg Constants — All preset keys. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying","contentHash":"66ec8c9b8f940164f11fdfc013b653b1f61ce8882d059a8a8b08b0b8ddafd3a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysicalMaterialPresets.md::0001","path":"engine/reference/sim/physics/PhysicalMaterialPresets.md","title":"sim/physics/PhysicalMaterialPresets.js","description":"","kind":"reference","source":"engine/sim/physics/PhysicalMaterialPresets.js","updated":"","headings":["sim/physics/PhysicalMaterialPresets.js","Functions","getMaterialPreset(key)","createPhysicalMaterial(presetKey, overrides = {})","computeMassFromMaterial(material, halfExtents, colliderShape)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":": Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"599f7894cb15f6421f2ed6ae7241f1c3d31e94fa2e59275117eb65aecf6f4581"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysicsSchema.md::0000","path":"engine/reference/sim/physics/PhysicsSchema.md","title":"sim/physics/PhysicsSchema.js","description":"","kind":"reference","source":"engine/sim/physics/PhysicsSchema.js","updated":"","headings":["sim/physics/PhysicsSchema.js","Functions","getSimModeId(modeName)","getSimModeName(modeId)","getColliderShapeId(shapeName)","getColliderShapeName(shapeId)","getCollisionMask(...layerNames)","layersCollide(maskA, maskB)","validatePhysicsBody(config)","validateCollider(config)","validatePhysicsMaterial(config)","createDefaultPhysicsBody()","createDefaultCollider(shape = \"box\")","createDefaultJoint(type = \"fixed\")","createDefaultPhysicsWorld()","getPhysicsMaterial(name)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Get simulation mode ID from name Get simulation mode name from ID Get collider shape ID from name Get collider shape name from ID Get collision layer mask from layer names Check if two layer masks collide Validate physics body configuration Validate collider configuration Validate physics material Create default physics body config Create default collider config Create default joint config Create default physics world config Get physics material by name Constants — Physics simulation modes — Collider shape types — Joint types for articulated bodies — D6 joint axis motion types — D6 joint axes — Collision layer definitions (bitmask) — 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) — Preset physics materials Note: Negative restitution enables compliant (spring damper) contacts — Physics body schema — Collider schema — Joint schema — Physics world configuration — Standard convex collider mesh IDs <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides","contentHash":"7b8f361f367a118f1943fc64e933d0ea0609a3d95e0ed26e9b700b5c44fb34fc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysicsSchema.md::0001","path":"engine/reference/sim/physics/PhysicsSchema.md","title":"sim/physics/PhysicsSchema.js","description":"","kind":"reference","source":"engine/sim/physics/PhysicsSchema.js","updated":"","headings":["sim/physics/PhysicsSchema.js","Functions","getSimModeId(modeName)","getSimModeName(modeId)","getColliderShapeId(shapeName)","getColliderShapeName(shapeId)","getCollisionMask(...layerNames)","layersCollide(maskA, maskB)","validatePhysicsBody(config)","validateCollider(config)","validatePhysicsMaterial(config)","createDefaultPhysicsBody()","createDefaultCollider(shape = \"box\")","createDefaultJoint(type = \"fixed\")","createDefaultPhysicsWorld()","getPhysicsMaterial(name)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"schema — Physics world configuration — Standard convex collider mesh IDs <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"ed59f02b34a63fe8500d92fd9d7c0399f811d84e6779ae7b7ae34075aff02a29"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/PhysicsWorld.md::0000","path":"engine/reference/sim/physics/PhysicsWorld.md","title":"sim/physics/PhysicsWorld.js","description":"","kind":"reference","source":"engine/sim/physics/PhysicsWorld.js","updated":"","headings":["sim/physics/PhysicsWorld.js","Functions","createPhysicsWorld(options = {})","destroyPhysicsWorld(physicsWorld)","createBody(physicsWorld, desc)","getBody(physicsWorld, handle)","removeBody(physicsWorld, handle)","stepPhysicsWorld(physicsWorld, deltaSeconds)","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"580b75b8b695b8a04da8363c435efb795b7eb14be1e0be58449c8edf0ab8856b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/SDFCollision.md::0000","path":"engine/reference/sim/physics/SDFCollision.md","title":"sim/physics/SDFCollision.js","description":"","kind":"reference","source":"engine/sim/physics/SDFCollision.js","updated":"","headings":["sim/physics/SDFCollision.js","Classes","class SDFGrid","Functions","createSDFFromMesh(vertices, indices, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes 3D SDF Grid for collision detection Method Signature Summary Sample an SDF function into the grid Get the signed distance at a world position using trilinear interpolation Get gradient (surface normal) at a point using central differences Get voxel value at grid coordinates Sphere cast against SDF Check collision between a point/sphere and the SDF Functions Create SDF collider from mesh using jump flooding algorithm This is a simplified CPU version GPU version would be faster Parameters: (Float32Array) — Mesh vertices (Uint32Array) — Mesh triangle indices (Object) — Options Returns: SDF grid Constants — SDF primitive functions — SDF combination operations <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters,","contentHash":"bca65b6503bf1882ca50f5816087d29f350ed9303fa85afb1388dc41d39a4890"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/SDFCollision.md::0001","path":"engine/reference/sim/physics/SDFCollision.md","title":"sim/physics/SDFCollision.js","description":"","kind":"reference","source":"engine/sim/physics/SDFCollision.js","updated":"","headings":["sim/physics/SDFCollision.js","Classes","class SDFGrid","Functions","createSDFFromMesh(vertices, indices, options = {})","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"2ebe30de518c9bc72be6c6df627184fa63741d937ed31b9d0e4de08770335029"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/SeismicSystem.md::0000","path":"engine/reference/sim/physics/SeismicSystem.md","title":"sim/physics/SeismicSystem.js","description":"","kind":"reference","source":"engine/sim/physics/SeismicSystem.js","updated":"","headings":["sim/physics/SeismicSystem.js","Classes","class FaultLine","class SeismicWave","class Earthquake","class SeismicSystem","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Represents a tectonic fault line Method Signature Summary Accumulate stress over time Release stress (earthquake) Get closest point on fault to a position Propagating seismic wave Method Signature Summary Update wave propagation Get wave amplitude at distance from epicenter Get wave intensity at a position Get shaking vector at position Complete earthquake event with multiple wave types Method Signature Summary Update earthquake Get combined shaking at position Get magnitude category Method Signature Summary Add a fault line Manually trigger an earthquake Update seismic simulation Get total shaking at a position Check if destruction should occur at position Add event listener Remove event listener Get nearest fault to position Generate random fault network Get stats Constants — Wave types — Wave speeds (m/s, scaled for game) — Earthquake magnitude scales — Default seismic parameters <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision","contentHash":"d1144d4c6a44432eed0f61335a252e29d89a2a771f0f181a94a57ec8b127ba14"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/SeismicSystem.md::0001","path":"engine/reference/sim/physics/SeismicSystem.md","title":"sim/physics/SeismicSystem.js","description":"","kind":"reference","source":"engine/sim/physics/SeismicSystem.js","updated":"","headings":["sim/physics/SeismicSystem.js","Classes","class FaultLine","class SeismicWave","class Earthquake","class SeismicSystem","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"25532b25cb51f1a6ba3ff01af4f31d7d4b6370a9c4fd2ccd41754f7780f4edb0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/ShockPropagation.md::0000","path":"engine/reference/sim/physics/ShockPropagation.md","title":"sim/physics/ShockPropagation.js","description":"","kind":"reference","source":"engine/sim/physics/ShockPropagation.js","updated":"","headings":["sim/physics/ShockPropagation.js","Classes","class ShockPropagationSolver","Functions","applyShockPropagation(world, contacts, dt)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Shock propagation solver for stable stacking Method Signature Summary Clear all contacts for a new frame Add a body to the contact graph Add a contact between two bodies Build level structure from contact graph Uses BFS from static (ground) bodies Solve all contacts using shock propagation Solve a single contact constraint Solve friction constraint Get debug info about the contact graph Functions Integrate shock propagation with existing physics world Call this after broad/narrow phase but before velocity integration Parameters: (Object) — Physics world (Array) — Contact pairs from narrow phase (number) — Time step <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced:","contentHash":"26f55f0126038a161be46d6889db44db8f021d5de0b939396d4a7ba9220aa0c9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/ShockPropagation.md::0001","path":"engine/reference/sim/physics/ShockPropagation.md","title":"sim/physics/ShockPropagation.js","description":"","kind":"reference","source":"engine/sim/physics/ShockPropagation.js","updated":"","headings":["sim/physics/ShockPropagation.js","Classes","class ShockPropagationSolver","Functions","applyShockPropagation(world, contacts, dt)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"efd1ca13904aa21da05b59a4fed504e5001933941803e88bf0035fcc068270ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/SpatialIntegritySystem.md::0000","path":"engine/reference/sim/physics/SpatialIntegritySystem.md","title":"sim/physics/SpatialIntegritySystem.js","description":"","kind":"reference","source":"engine/sim/physics/SpatialIntegritySystem.js","updated":"","headings":["sim/physics/SpatialIntegritySystem.js","Classes","class SpatialIntegritySystem","class ChunkIntegrityTracker","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Initialize with external systems Get current tick from world time Register an entity's position Unregister an entity Update an entity's position Generate position key from coordinates Add entity to position index Remove entity from position index Validate a single entity's position Validate and auto correct an entity Batch validate entities (call each frame) Validates a subset of entities per frame for minimal overhead Take a snapshot of all positions at current tick Get snapshot at or before a specific tick Rollback an entity to a previous snapshot Call each frame to perform maintenance Update memory usage statistics Get all entities at a position Get entity's registered position Get all entities in a category Check if position is occupied Get record for entity Get system statistics Print stats to console Verify integrity of all records Clear all data Specialized integrity tracking for chunk positions Uses integer coordinates for exact matching Method Signature Summary Register a chunk Unregister a chunk Validate chunk position Check if chunk is registered Get all registered chunk keys Compute checksum for chunk coordinates Get stats Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and","contentHash":"d20acf5c18276f924277df16f9eaa10e6c5c62af071c5879c755288345a5a126"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/SpatialIntegritySystem.md::0001","path":"engine/reference/sim/physics/SpatialIntegritySystem.md","title":"sim/physics/SpatialIntegritySystem.js","description":"","kind":"reference","source":"engine/sim/physics/SpatialIntegritySystem.js","updated":"","headings":["sim/physics/SpatialIntegritySystem.js","Classes","class SpatialIntegritySystem","class ChunkIntegrityTracker","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Get stats Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"91f65356a89a97b9979171b2bf2ca6bfeeec2e8aacf2ea89c9f87c39fe1ff4a6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/SpeculativeContacts.md::0000","path":"engine/reference/sim/physics/SpeculativeContacts.md","title":"sim/physics/SpeculativeContacts.js","description":"","kind":"reference","source":"engine/sim/physics/SpeculativeContacts.js","updated":"","headings":["sim/physics/SpeculativeContacts.js","Classes","class SpeculativeContactsSolver","Functions","expandAABBByVelocity(aabb, velocity, dt, margin = 0.01)","timeOfClosestApproach(posA, velA, radiusA, posB, velB, radiusB)","enablePhysXSpeculativeCCD(actor, PhysX)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Speculative contacts solver Method Signature Summary Clear all contacts Generate speculative contacts for potentially colliding pairs Solve all speculative contacts Solve a single speculative contact Solve friction for a contact Get debug info Functions Expand AABB by velocity to get speculative bounds Parameters: (Object) — Original AABB {minX, minY, minZ, maxX, maxY, maxZ} (Array) — Linear velocity [vx, vy, vz] (number) — Time step (number) — Extra margin for numerical safety Returns: Expanded AABB Calculate time of closest approach between two moving spheres Used for speculative contact timing Parameters: (Array) — Position of sphere A (Array) — Velocity of sphere A (number) — Radius of sphere A (Array) — Position of sphere B (Array) — Velocity of sphere B (number) — Radius of sphere B Returns: Time of closest approach (0 to Infinity) Enable speculative CCD on a PhysX rigid body This configures the PhysX specific flags for speculative contacts Parameters: (Object) — PhysX rigid dynamic actor (Object) — PhysX","contentHash":"c7770293869e4fdbe7e98fc095c7b4cdd0062d5a51b2590589d4c512a0fd55ab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/SpeculativeContacts.md::0001","path":"engine/reference/sim/physics/SpeculativeContacts.md","title":"sim/physics/SpeculativeContacts.js","description":"","kind":"reference","source":"engine/sim/physics/SpeculativeContacts.js","updated":"","headings":["sim/physics/SpeculativeContacts.js","Classes","class SpeculativeContactsSolver","Functions","expandAABBByVelocity(aabb, velocity, dt, margin = 0.01)","timeOfClosestApproach(posA, velA, radiusA, posB, velB, radiusB)","enablePhysXSpeculativeCCD(actor, PhysX)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"CCD on a PhysX rigid body This configures the PhysX specific flags for speculative contacts Parameters: (Object) — PhysX rigid dynamic actor (Object) — PhysX module <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"6cf9ac448be2f5c8a492e79b7cc74d374594289be06af7a487c4fcc11fb18a42"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/StandardColliderMeshes.md::0000","path":"engine/reference/sim/physics/StandardColliderMeshes.md","title":"sim/physics/StandardColliderMeshes.js","description":"","kind":"reference","source":"engine/sim/physics/StandardColliderMeshes.js","updated":"","headings":["sim/physics/StandardColliderMeshes.js","Functions","getStandardColliderBaseHalfExtents(meshId)","ensureStandardColliderMeshes(world)","Constants","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9e01635dc0e5c3d3306098c0afded29914d29a43f30adde1dbe42300f19765a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/StructuralIntegrity.md::0000","path":"engine/reference/sim/physics/StructuralIntegrity.md","title":"sim/physics/StructuralIntegrity.js","description":"","kind":"reference","source":"engine/sim/physics/StructuralIntegrity.js","updated":"","headings":["sim/physics/StructuralIntegrity.js","Classes","class StructuralNode","class StructuralEdge","class StructuralIntegritySolver","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes A node in the structural graph (corresponds to a fragment or chunk) Method Signature Summary Get total weight (mass gravity) Check if this node is an anchor Apply damage to this node Reset per frame state An edge connecting two structural nodes Method Signature Summary Get the other node in this edge Apply load to this edge Reset per frame state Check if edge can transmit force Main structural integrity system Method Signature Summary Add a node to the structure Remove a node and its connections Connect two nodes Set a node as an anchor (connected to ground) Auto detect anchors based on Y position (nodes touching ground) Main update run one frame of structural simulation Propagate anchor distances using BFS Calculate loads from top down (weight accumulation) One iteration of stress relaxation Check for and handle breaks Find regions disconnected from anchors Apply slow natural stress relief Apply damage at a point (explosion, impact, etc.) Apply impulse (directional force) at a point Build structure from fragments Build structure from voxel chunks Clear all structure data Get all falling nodes Get stress visualization data Load configuration from engine.cfg section Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics","contentHash":"9f6587c037c43197b2820df1487e4dcc5d6fb52c5dbfdd97e19b03862a7b1359"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/StructuralIntegrity.md::0001","path":"engine/reference/sim/physics/StructuralIntegrity.md","title":"sim/physics/StructuralIntegrity.js","description":"","kind":"reference","source":"engine/sim/physics/StructuralIntegrity.js","updated":"","headings":["sim/physics/StructuralIntegrity.js","Classes","class StructuralNode","class StructuralEdge","class StructuralIntegritySolver","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"nodes Get stress visualization data Load configuration from engine.cfg section Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"a29ab99fcacd4768f88f97c47d9ad20334cd60d0b15f742f8986efde098e7463"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/TreePhysics.md::0000","path":"engine/reference/sim/physics/TreePhysics.md","title":"sim/physics/TreePhysics.js","description":"","kind":"reference","source":"engine/sim/physics/TreePhysics.js","updated":"","headings":["sim/physics/TreePhysics.js","Classes","class TreeVoxelBody","class TreePhysicsSystem","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Represents a tree's voxel structure for physics Method Signature Summary Calculate mass, center of mass, bounding box Check if tree has valid root connection to ground Start falling (called when disconnected from ground) Update physics simulation Find ground Y level at current position Called when tree settles on ground after falling Get world positions of all voxels (accounting for physics transform) Manages all tree physics in the world Method Signature Summary Set chunk manager reference for world queries Check if a world position has solid ground Validate tree placement location Check if position is underwater Register a tree for physics tracking Remove a tree from tracking Called when voxels are modified check affected trees Update physics simulation Check all trees for root connection Update statistics Get all falling trees for rendering Force a tree to fall (for testing or player actions) Get debug info <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and","contentHash":"429d2a5a0e070810c06b1095cc242a13f8bb2f6e5ef2dcc61c63f31f9bcc9234"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/TreePhysics.md::0001","path":"engine/reference/sim/physics/TreePhysics.md","title":"sim/physics/TreePhysics.js","description":"","kind":"reference","source":"engine/sim/physics/TreePhysics.js","updated":"","headings":["sim/physics/TreePhysics.js","Classes","class TreeVoxelBody","class TreePhysicsSystem","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"95e0549bf39717380b0759e44657d8cf41c6dfad3e062cacbf4311376e824280"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/UnifiedDamageSystem.md::0000","path":"engine/reference/sim/physics/UnifiedDamageSystem.md","title":"sim/physics/UnifiedDamageSystem.js","description":"","kind":"reference","source":"engine/sim/physics/UnifiedDamageSystem.js","updated":"","headings":["sim/physics/UnifiedDamageSystem.js","Classes","class DamageEvent","class UnifiedDamageSystem","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Represents a damage event that propagates through systems Method Signature Summary Central damage system that coordinates between all subsystems Method Signature Summary Initialize with system references Initialize GPU connectivity (requires device) Queue a damage event for processing Create explosion damage Process all pending damage events Check particle collisions and create damage events Process a single damage event Handle particle impacting voxels/meshes Handle mesh debris creating craters Handle explosion damage to all systems Handle generic damage Damage voxels in a radius Remove voxels in sphere (guaranteed removal) Create debris particles from removed voxels Check for chain reaction explosions Get material name from ID Get damage history for replay Clear damage history Load configuration from engine.cfg section Constants — Damage types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics","contentHash":"c4c2fb7488568285a9d787d72ffb2fc87afe41eadb52e8c4ae77e6a17b3539f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/UnifiedDamageSystem.md::0001","path":"engine/reference/sim/physics/UnifiedDamageSystem.md","title":"sim/physics/UnifiedDamageSystem.js","description":"","kind":"reference","source":"engine/sim/physics/UnifiedDamageSystem.js","updated":"","headings":["sim/physics/UnifiedDamageSystem.js","Classes","class DamageEvent","class UnifiedDamageSystem","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"fd641c40915de82744e0d0eda50e949bcb3cfe1b8717f2cd045136c7709a45f8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/VoronoiFracture.md::0000","path":"engine/reference/sim/physics/VoronoiFracture.md","title":"sim/physics/VoronoiFracture.js","description":"","kind":"reference","source":"engine/sim/physics/VoronoiFracture.js","updated":"","headings":["sim/physics/VoronoiFracture.js","Classes","class VoronoiFracture","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Initialize the fracture system Compute Voronoi diagram for fracturing Destroy GPU resources Constants — Predefined fracture patterns for different impact types <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"f3d689376218974e00e2f968b244ca2668b13d4a53d937419fdb6303c5bc5691"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/VoxelMeshCollision.md::0000","path":"engine/reference/sim/physics/VoxelMeshCollision.md","title":"sim/physics/VoxelMeshCollision.js","description":"","kind":"reference","source":"engine/sim/physics/VoxelMeshCollision.js","updated":"","headings":["sim/physics/VoxelMeshCollision.js","Classes","class VoxelMeshCollider","class CascadedVoxelCollider","class VoxelCacheManager","Functions","meshToTriangleBuffer(vertices, indices)","computeMeshBounds(vertices)","createVoxelMeshCollider(device, options = {})","createCascadedVoxelCollider(device, options = {})","createVoxelCacheManager(dbName = 'VoxelMeshCache')","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Upload mesh triangles and voxelize Create collision bind group for particle buffers Run particle voxel collision Clear the mesh cache 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 Method Signature Summary Voxelize mesh at all LOD levels Get appropriate LOD collider based on distance VoxelCacheManager Persistent cache for voxelized meshes Saves/loads voxelized mesh data to avoid re voxelization. Uses IndexedDB for persistence. Method Signature Summary Save voxel data to persistent cache Load voxel data from cache Check if key exists in cache Clear all cached data Functions Helper: Convert mesh vertices/indices to triangle buffer format Parameters: (Float32Array) — Vertex positions (x,y,z,x,y,z,...) (Uint32Array Uint16Array) — Triangle","contentHash":"339db29668d71275fec56d3ff35a28a7de0849db08b798d2f14e66435029db58"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/VoxelMeshCollision.md::0001","path":"engine/reference/sim/physics/VoxelMeshCollision.md","title":"sim/physics/VoxelMeshCollision.js","description":"","kind":"reference","source":"engine/sim/physics/VoxelMeshCollision.js","updated":"","headings":["sim/physics/VoxelMeshCollision.js","Classes","class VoxelMeshCollider","class CascadedVoxelCollider","class VoxelCacheManager","Functions","meshToTriangleBuffer(vertices, indices)","computeMeshBounds(vertices)","createVoxelMeshCollider(device, options = {})","createCascadedVoxelCollider(device, options = {})","createVoxelCacheManager(dbName = 'VoxelMeshCache')","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Convert mesh vertices/indices to triangle buffer format Parameters: (Float32Array) — Vertex positions (x,y,z,x,y,z,...) (Uint32Array Uint16Array) — Triangle indices Returns: Triangle data for voxelization Helper: Compute mesh AABB Parameters: (Float32Array) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d060fa5a97811192c7d73dfdbc5680b084ef972e865459ba678995a2c3306919"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUBroadphase.md::0000","path":"engine/reference/sim/physics/gpu/GPUBroadphase.md","title":"sim/physics/gpu/GPUBroadphase.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUBroadphase.js","updated":"","headings":["sim/physics/gpu/GPUBroadphase.js","Classes","class GPUBroadphase","Functions","async createBroadphase(device, worldBuffers, options = {})","destroyBroadphase(bp)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Dispatch broadphase into a command encoder. Async readback of pair count from GPU. Functions Create and initialize a GPU broadphase. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — GPURigidBodyWorld. buffers (Object) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also:","contentHash":"09e0231cf09179f1630be51cb4ae3de213883c39d446f163aee5503fd8735bf3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUBroadphase.md::0001","path":"engine/reference/sim/physics/gpu/GPUBroadphase.md","title":"sim/physics/gpu/GPUBroadphase.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUBroadphase.js","updated":"","headings":["sim/physics/gpu/GPUBroadphase.js","Classes","class GPUBroadphase","Functions","async createBroadphase(device, worldBuffers, options = {})","destroyBroadphase(bp)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"1f29ffa2fc0799723af9505552f88103e11cd7e39e43c21e765656c6b5f7b67e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUCharacterController.md::0000","path":"engine/reference/sim/physics/gpu/GPUCharacterController.md","title":"sim/physics/gpu/GPUCharacterController.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUCharacterController.js","updated":"","headings":["sim/physics/gpu/GPUCharacterController.js","Classes","class GPUCharacterController","class GPUCharacterControllerManager","Functions","createCharacterControllerManager()","destroyCharacterControllerManager(mgr)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Sync position from world body state. Call once after creating the body to initialize. Main update: move the character by displacement. Handles gravity, ground detection, slope sliding, step climbing. Jump: set vertical velocity. Teleport character to position. Method Signature Summary Create a character controller. Remove a character controller. Get controller by body handle. Update all controllers. Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems.","contentHash":"4fda1c65ed38eff66ad6a3ff79b83c590ba1c2367a6daf77378d601a601230da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUCharacterController.md::0001","path":"engine/reference/sim/physics/gpu/GPUCharacterController.md","title":"sim/physics/gpu/GPUCharacterController.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUCharacterController.js","updated":"","headings":["sim/physics/gpu/GPUCharacterController.js","Classes","class GPUCharacterController","class GPUCharacterControllerManager","Functions","createCharacterControllerManager()","destroyCharacterControllerManager(mgr)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"3e9a1ac078c3c5d10f28dd55fdcf44a1a8d93f679bc6713b0acbab5a18ea1994"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUConstraintSolver.md::0000","path":"engine/reference/sim/physics/gpu/GPUConstraintSolver.md","title":"sim/physics/gpu/GPUConstraintSolver.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUConstraintSolver.js","updated":"","headings":["sim/physics/gpu/GPUConstraintSolver.js","Classes","class GPUConstraintSolver","Functions","async createConstraintSolver(device, worldBuffers, narrowphaseBuffers, options = {})","destroyConstraintSolver(solver)","gpuAddJoint(solver, desc)","gpuRemoveJoint(solver, handle)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Update a hinge joint's angular motor at runtime (live tuning). Dispatch constraint solving into a command encoder. Called per substep from GPURigidBodyWorld.step(). Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses","contentHash":"57a4edc6fc207f46c2cf4a915410ec4ee48c381aed404c3fae862ca292a8a915"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUConstraintSolver.md::0001","path":"engine/reference/sim/physics/gpu/GPUConstraintSolver.md","title":"sim/physics/gpu/GPUConstraintSolver.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUConstraintSolver.js","updated":"","headings":["sim/physics/gpu/GPUConstraintSolver.js","Classes","class GPUConstraintSolver","Functions","async createConstraintSolver(device, worldBuffers, narrowphaseBuffers, options = {})","destroyConstraintSolver(solver)","gpuAddJoint(solver, desc)","gpuRemoveJoint(solver, handle)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"48b67b0789415aa4d28ee95c96864e0b21c3cbf020cd46a3aeb88db4ca5757e8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUContinuousCollision.md::0000","path":"engine/reference/sim/physics/gpu/GPUContinuousCollision.md","title":"sim/physics/gpu/GPUContinuousCollision.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUContinuousCollision.js","updated":"","headings":["sim/physics/gpu/GPUContinuousCollision.js","Classes","class GPUContinuousCollision","Functions","async createContinuousCollision(device, worldBuffers, narrowphaseBuffers, options = {})","destroyContinuousCollision(ccd)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Set CCD pairs found during broadphase (call from CPU after broadphase readback). Dispatch CCD passes. 1. Expand AABBs (use expanded AABBs for broadphase) 2. TOI computation for CCD pairs (generates speculative contacts) Get expanded AABB buffers (feed to broadphase instead of regular AABBs). Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints","contentHash":"08589477194b4e95339482416e4903e634729368c3a5ab5a6afb603d00976254"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUContinuousCollision.md::0001","path":"engine/reference/sim/physics/gpu/GPUContinuousCollision.md","title":"sim/physics/gpu/GPUContinuousCollision.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUContinuousCollision.js","updated":"","headings":["sim/physics/gpu/GPUContinuousCollision.js","Classes","class GPUContinuousCollision","Functions","async createContinuousCollision(device, worldBuffers, narrowphaseBuffers, options = {})","destroyContinuousCollision(ccd)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"29c8aaa45bb4aa7f28a996d3c3493e208013a8f6a7c82d0d03109b678a421efb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUConvexHull.md::0000","path":"engine/reference/sim/physics/gpu/GPUConvexHull.md","title":"sim/physics/gpu/GPUConvexHull.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUConvexHull.js","updated":"","headings":["sim/physics/gpu/GPUConvexHull.js","Functions","computeConvexHull(vertices, options = {})","buildSupportMap(hull, numDirections = SUPPORTMAPDIRECTIONS)","hullToGPUBuffer(device, hull, supportMap = null)","hullHalfExtents(hull)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Functions Compute a 3D convex hull from a set of vertices. Parameters: (Float32Array number[]) — Flat array of xyz positions (length = N 3) (Object) — No description in source JSDoc. (number) — =64] Max vertices in output hull Returns: } 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. Parameters: (number) — =128] Returns: Support vertex indices (one per direction) Upload hull data to a GPU buffer for narrowphase use. Layout: [vertexCount(u32), faceCount(u32), pad, pad] + [vertices (vec4)] + [normals (vec4)] + [supportMap (u32)] Parameters: (GPUDevice) — No description in source JSDoc. (Uint32Array) — From buildSupportMap() Compute AABB half extents from hull vertices (for broadphase). Returns: [halfX, halfY, halfZ] Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU","contentHash":"61a3946c4b804dfdf7492d22842cb6af4b6a0f00d24d11f7ec24a6681aa88aaf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUConvexHull.md::0001","path":"engine/reference/sim/physics/gpu/GPUConvexHull.md","title":"sim/physics/gpu/GPUConvexHull.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUConvexHull.js","updated":"","headings":["sim/physics/gpu/GPUConvexHull.js","Functions","computeConvexHull(vertices, options = {})","buildSupportMap(hull, numDirections = SUPPORTMAPDIRECTIONS)","hullToGPUBuffer(device, hull, supportMap = null)","hullHalfExtents(hull)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"778db4b16f998f99482be8d70f6afc6df5cfd0294bfa91ffec153215c71b3846"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUHeightfield.md::0000","path":"engine/reference/sim/physics/gpu/GPUHeightfield.md","title":"sim/physics/gpu/GPUHeightfield.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUHeightfield.js","updated":"","headings":["sim/physics/gpu/GPUHeightfield.js","Classes","class GPUHeightfield","Functions","async createHeightfield(device, worldBuffers, narrowphaseBuffers, options = {})","destroyHeightfield(hf)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Set the entire heightmap from a Float32Array. Set a single height sample. Set a rectangular region of heights. Mark a cell as a hole (bodies pass through). Get height at a world position (CPU side bilinear interpolation). Get surface normal at a world position (CPU side finite difference). Set per cell material index (for surface type queries). Get material index at world position. Generate heightfield from a noise function. Dispatch heightfield contact generation. Call after broadphase but adds contacts to the same narrowphase contact buffer. Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced:","contentHash":"715feb603f75641921bfa7d819fdb6db27a2672a37e8efd2df884356aab5bf83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUHeightfield.md::0001","path":"engine/reference/sim/physics/gpu/GPUHeightfield.md","title":"sim/physics/gpu/GPUHeightfield.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUHeightfield.js","updated":"","headings":["sim/physics/gpu/GPUHeightfield.js","Classes","class GPUHeightfield","Functions","async createHeightfield(device, worldBuffers, narrowphaseBuffers, options = {})","destroyHeightfield(hf)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"7ea398bac1f7e20a3b5c20591e21f5316c9bb0dc536a25659bad6b9197e6652f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUMeshDeform.md::0000","path":"engine/reference/sim/physics/gpu/GPUMeshDeform.md","title":"sim/physics/gpu/GPUMeshDeform.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUMeshDeform.js","updated":"","headings":["sim/physics/gpu/GPUMeshDeform.js","Classes","class GPUMeshDeform","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Apply a dent to mesh vertices and recalculate normals on GPU. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"63e6face00fb29fa989670e59d24dcb1fe1d25d0b82039783234e73c3d5373aa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUNarrowphase.md::0000","path":"engine/reference/sim/physics/gpu/GPUNarrowphase.md","title":"sim/physics/gpu/GPUNarrowphase.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUNarrowphase.js","updated":"","headings":["sim/physics/gpu/GPUNarrowphase.js","Classes","class GPUNarrowphase","Functions","async createNarrowphase(device, worldBuffers, broadphaseBuffers, options = {})","destroyNarrowphase(np)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Dispatch narrowphase contact generation. Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping :","contentHash":"6b10748ad4bed12f9b9faae4dc7757e1de72d94ec8ffcd7d4a5b400c1ca32609"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUNarrowphase.md::0001","path":"engine/reference/sim/physics/gpu/GPUNarrowphase.md","title":"sim/physics/gpu/GPUNarrowphase.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUNarrowphase.js","updated":"","headings":["sim/physics/gpu/GPUNarrowphase.js","Classes","class GPUNarrowphase","Functions","async createNarrowphase(device, worldBuffers, broadphaseBuffers, options = {})","destroyNarrowphase(np)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"a922f47433d8d34c42ec0406f52b1b23b8dbe9c195b9c657757e0e7b80abfdb7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPURaycast.md::0000","path":"engine/reference/sim/physics/gpu/GPURaycast.md","title":"sim/physics/gpu/GPURaycast.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPURaycast.js","updated":"","headings":["sim/physics/gpu/GPURaycast.js","Classes","class GPURaycast","Functions","gpuRaycastCPU(world, origin, direction, maxDistance = 1000)","async createGPURaycast(device, worldBuffers, options = {})","destroyGPURaycast(rc)","async gpuRaycast(rc, world, origin, direction, maxDistance = 1000)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Cast a ray on GPU. Returns a Promise with the closest hit. Functions Synchronous CPU raycast against CPU shadow data (1 frame lag). Use when async GPU raycast is too slow or when GPU is busy. Parameters: (GPURigidBodyWorld) — No description in source JSDoc. (number[]) — No description in source JSDoc. (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: } GPU raycast (async). <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At","contentHash":"48e4d0bc6c5cdc233f6b83773aef6488f9003d178b90c7271bf39619e3c7dd49"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPURaycast.md::0001","path":"engine/reference/sim/physics/gpu/GPURaycast.md","title":"sim/physics/gpu/GPURaycast.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPURaycast.js","updated":"","headings":["sim/physics/gpu/GPURaycast.js","Classes","class GPURaycast","Functions","gpuRaycastCPU(world, origin, direction, maxDistance = 1000)","async createGPURaycast(device, worldBuffers, options = {})","destroyGPURaycast(rc)","async gpuRaycast(rc, world, origin, direction, maxDistance = 1000)","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"35031864caa736e124aa0dfd64aed4e0518a8b4d935ed590abfa378c36f52f28"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPURigidBodyWorld.md::0000","path":"engine/reference/sim/physics/gpu/GPURigidBodyWorld.md","title":"sim/physics/gpu/GPURigidBodyWorld.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPURigidBodyWorld.js","updated":"","headings":["sim/physics/gpu/GPURigidBodyWorld.js","Classes","class GPURigidBodyWorld","Functions","async createGPUPhysicsWorld(device, options = {})","destroyGPUPhysicsWorld(world)","gpuCreateBody(world, desc)","gpuRemoveBody(world, handle)","gpuGetBody(world, handle)","gpuSetBodyKinematic(world, handle, enabled)","gpuApplyForce(world, handle, fx, fy, fz)","gpuApplyTorque(world, handle, tx, ty, tz)","gpuStepWorld(world, dt, broadphase, narrowphase, solver)","async gpuReadbackAsync(world)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Create a rigid body. Remove a body by handle. Get body state from CPU shadow (1 frame lag from GPU readback). Set body to kinematic or dynamic. Apply external force to a body (accumulated until next step). Apply external torque to a body (accumulated until next step). Set body position directly (for kinematic or teleportation). Set body rotation directly (quaternion xyzw). Set body linear velocity directly. Step the physics world. Dispatches GPU compute shaders for integration, broadphase, narrowphase, constraint solving, velocity derivation, and sleep detection. Async readback GPU → CPU shadow arrays. Call once per frame AFTER step(). Updates getBody() data. Functions Create a GPU physics world.","contentHash":"4a94bb6446aa796f00899c6fbc2307e608481c071b2629414b426158d3844bf6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPURigidBodyWorld.md::0001","path":"engine/reference/sim/physics/gpu/GPURigidBodyWorld.md","title":"sim/physics/gpu/GPURigidBodyWorld.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPURigidBodyWorld.js","updated":"","headings":["sim/physics/gpu/GPURigidBodyWorld.js","Classes","class GPURigidBodyWorld","Functions","async createGPUPhysicsWorld(device, options = {})","destroyGPUPhysicsWorld(world)","gpuCreateBody(world, desc)","gpuRemoveBody(world, handle)","gpuGetBody(world, handle)","gpuSetBodyKinematic(world, handle, enabled)","gpuApplyForce(world, handle, fx, fy, fz)","gpuApplyTorque(world, handle, tx, ty, tz)","gpuStepWorld(world, dt, broadphase, narrowphase, solver)","async gpuReadbackAsync(world)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"and sleep detection. Async readback GPU → CPU shadow arrays. Call once per frame AFTER step(). Updates getBody() data. Functions Create a GPU physics world. Parameters: (GPUDevice) — No description in source JSDoc. (Object) — No description in source JSDoc. Step the GPU physics world. Parameters: (GPURigidBodyWorld) — No description in source JSDoc. (number) — Time step in seconds (Object) — GPUBroadphase instance (Object) — GPUNarrowphase instance (Object) — GPUConstraintSolver instance Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"36c0edf13ea77695105373537e1f5bc17028fbc962ec9d3273dbc4ebcaa3c88a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUSceneQuery.md::0000","path":"engine/reference/sim/physics/gpu/GPUSceneQuery.md","title":"sim/physics/gpu/GPUSceneQuery.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUSceneQuery.js","updated":"","headings":["sim/physics/gpu/GPUSceneQuery.js","Classes","class GPUSceneQuery","Functions","createSceneQuery(world)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Find all bodies overlapping a sphere. Find all bodies overlapping a box (AABB). Boolean overlap test: does anything overlap the sphere? Boolean overlap test: does anything overlap the box? Sphere sweep (shape cast): move a sphere along a direction, find first hit. Box sweep: move an AABB along a direction, find first hit. Multi hit sphere sweep: find ALL hits along the path. Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints","contentHash":"fcf5a27c4d8d40c43daf508b46ea1f382d89b8fc0565c12e58216e09bd5da3e8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUSceneQuery.md::0001","path":"engine/reference/sim/physics/gpu/GPUSceneQuery.md","title":"sim/physics/gpu/GPUSceneQuery.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUSceneQuery.js","updated":"","headings":["sim/physics/gpu/GPUSceneQuery.js","Classes","class GPUSceneQuery","Functions","createSceneQuery(world)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"29c8aaa45bb4aa7f28a996d3c3493e208013a8f6a7c82d0d03109b678a421efb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUSoftBody.md::0000","path":"engine/reference/sim/physics/gpu/GPUSoftBody.md","title":"sim/physics/gpu/GPUSoftBody.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUSoftBody.js","updated":"","headings":["sim/physics/gpu/GPUSoftBody.js","Classes","class GPUSoftBody","Functions","lameParameters(youngsModulus, poissonRatio)","async createSoftBodySolver(device, options = {})","destroySoftBodySolver(sb)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Add a material. Create a soft body from tetrahedral mesh data. Generate a simple cube soft body for testing. Step soft body simulation. Async readback of node positions. Functions Lamé parameters from Young's modulus and Poisson's ratio. Constants — Material presets (Young's modulus in Pa, Poisson's ratio). <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced:","contentHash":"a4952a5810623e09389b2e1450b87ff200b514322ceceacc10e04461e930b4bf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUSoftBody.md::0001","path":"engine/reference/sim/physics/gpu/GPUSoftBody.md","title":"sim/physics/gpu/GPUSoftBody.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUSoftBody.js","updated":"","headings":["sim/physics/gpu/GPUSoftBody.js","Classes","class GPUSoftBody","Functions","lameParameters(youngsModulus, poissonRatio)","async createSoftBodySolver(device, options = {})","destroySoftBodySolver(sb)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"efd1ca13904aa21da05b59a4fed504e5001933941803e88bf0035fcc068270ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUTriangleMesh.md::0000","path":"engine/reference/sim/physics/gpu/GPUTriangleMesh.md","title":"sim/physics/gpu/GPUTriangleMesh.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUTriangleMesh.js","updated":"","headings":["sim/physics/gpu/GPUTriangleMesh.js","Classes","class GPUTriangleMesh","Functions","buildTriangleMeshBVH(vertices, indices)","async createTriangleMesh(device, worldBuffers, narrowphaseBuffers, options = {})","destroyTriangleMesh(tm)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Register a triangle mesh for collision. Unregister a triangle mesh. Dispatch collision detection for all registered meshes. Adds contacts to the narrowphase contact buffer. Functions Build a BVH from triangle data for GPU traversal. Uses surface area heuristic (SAH) median split. Parameters: (Float32Array) — Flat xyz positions (Uint32Array) — Triangle indices (length = triCount 3) Returns: } Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and","contentHash":"ce4b49d0c93f3740d575f3c100638237784185173b214360c05f9b022cb16676"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUTriangleMesh.md::0001","path":"engine/reference/sim/physics/gpu/GPUTriangleMesh.md","title":"sim/physics/gpu/GPUTriangleMesh.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUTriangleMesh.js","updated":"","headings":["sim/physics/gpu/GPUTriangleMesh.js","Classes","class GPUTriangleMesh","Functions","buildTriangleMeshBVH(vertices, indices)","async createTriangleMesh(device, worldBuffers, narrowphaseBuffers, options = {})","destroyTriangleMesh(tm)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"95e0549bf39717380b0759e44657d8cf41c6dfad3e062cacbf4311376e824280"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUTriggerSystem.md::0000","path":"engine/reference/sim/physics/gpu/GPUTriggerSystem.md","title":"sim/physics/gpu/GPUTriggerSystem.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUTriggerSystem.js","updated":"","headings":["sim/physics/gpu/GPUTriggerSystem.js","Classes","class GPUTriggerSystem","Functions","async createTriggerSystem(device, worldBuffers, broadphaseBuffers, narrowphaseBuffers, options = {})","destroyTriggerSystem(sys)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes Method Signature Summary Dispatch trigger and contact event generation. Call after broadphase (needs AABBs) and after narrowphase (needs contacts). Async readback + event processing. Resolves enter/stay/exit for triggers and begin/persist/end for contacts. Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides","contentHash":"c3151ab8577eefe780212ef4ed1363c08c97bd87b0807ee47f9ae6fc96ce18f9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUTriggerSystem.md::0001","path":"engine/reference/sim/physics/gpu/GPUTriggerSystem.md","title":"sim/physics/gpu/GPUTriggerSystem.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUTriggerSystem.js","updated":"","headings":["sim/physics/gpu/GPUTriggerSystem.js","Classes","class GPUTriggerSystem","Functions","async createTriggerSystem(device, worldBuffers, broadphaseBuffers, narrowphaseBuffers, options = {})","destroyTriggerSystem(sys)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"00d84e6a845b8fbd1e17c7d90e72db419c28cb8c8a264afd2670baca39e81f68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUVehicle.md::0000","path":"engine/reference/sim/physics/gpu/GPUVehicle.md","title":"sim/physics/gpu/GPUVehicle.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUVehicle.js","updated":"","headings":["sim/physics/gpu/GPUVehicle.js","Classes","class GPUVehicleManager","Functions","async createVehicleManager(device, worldBuffers, options = {})","destroyVehicleManager(mgr)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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)) Classes Method Signature Summary Create a vehicle. Set vehicle input state. Update vehicle states before GPU dispatch. Computes engine torque, gear ratio, etc. from inputs. Dispatch vehicle physics compute. Call BEFORE the main rigid body step so forces are ready. After dispatch, accumulated wheel forces need to be applied to chassis bodies. After GPU dispatch + readback, apply accumulated wheel forces to chassis rigid bodies. Called on CPU after readback. Get vehicle state for UI/audio. Functions Constants — Default wheel presets for common vehicle types. — Default engine/transmission presets. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and","contentHash":"73df7b255409f7b5843918effea1b659542db53f3d97c58a6371845d736e4b78"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/GPUVehicle.md::0001","path":"engine/reference/sim/physics/gpu/GPUVehicle.md","title":"sim/physics/gpu/GPUVehicle.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/GPUVehicle.js","updated":"","headings":["sim/physics/gpu/GPUVehicle.js","Classes","class GPUVehicleManager","Functions","async createVehicleManager(device, worldBuffers, options = {})","destroyVehicleManager(mgr)","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"09f7ab3994b93a456722dd2047e932bc3ba1366f5865870ef08084363ee89ba2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/index.md::0000","path":"engine/reference/sim/physics/gpu/index.md","title":"sim/physics/gpu/index.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/index.js","updated":"","headings":["sim/physics/gpu/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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)","contentHash":"27f2ed1fa8cff1f763e1188a4e8f63d568b712b1cfd96ef2fcb9c621cb0b5e4e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/gpu/index.md::0001","path":"engine/reference/sim/physics/gpu/index.md","title":"sim/physics/gpu/index.js","description":"","kind":"reference","source":"engine/sim/physics/gpu/index.js","updated":"","headings":["sim/physics/gpu/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"— 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 No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"4cf96919aab91df073af52ea6b27dd16c2ea7d23bc9e2fc3cc5b5f554ffaf433"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/index.md::0000","path":"engine/reference/sim/physics/index.md","title":"sim/physics/index.js","description":"","kind":"reference","source":"engine/sim/physics/index.js","updated":"","headings":["sim/physics/index.js","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: engine/sim/physics/index.js Physics Systems Barrel Export Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"888f8af28fc82b82396ea73c9b261ce8592ea19c25240a4fa67a99b3e94977bd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/ActiveRigController.md::0000","path":"engine/reference/sim/physics/rig/ActiveRigController.md","title":"sim/physics/rig/ActiveRigController.js","description":"","kind":"reference","source":"engine/sim/physics/rig/ActiveRigController.js","updated":"","headings":["sim/physics/rig/ActiveRigController.js","Classes","class ActiveRigController","Functions","createActiveRigController(options = {})","Notes & Examples","Fallback chain (Phase 2 of the Ragdoll Stack Consolidation Roadmap)","Physics Engine Integration","Physics Engine Integration"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Build a passive Verlet/PBD ragdoll (engine/assets/rig/RagdollSim.js) from the rig's parts. Works with EITHER adapter's part shape (both set as a numeric index): full fidelity (real axis/swingDeg/ twistDeg, hinge vs ball) when the rig came from CharacterPhysicsAssetAdapter; generic ball joints when it came from the legacy StickmanActiveRigAdapter (whose are PhysX D6 axis keyed, not swingDeg/twistDeg/axis). RagdollSim is intentionally passive (no muscle/drive concept) — this tier is a physical fallback, not an active motor replacement. Last resort tier: no physics at all, purely pose driven. Always succeeds. Functions <! HUMAN NOTES Notes & Examples Fallback chain (Phase 2 of the Ragdoll Stack Consolidation Roadmap) no longer picks a single backend and gives up on failure — it cascades through four tiers, updating to reflect whichever tier actually activated: 1. PhysX reduced articulation ( ) — tried first if and a PhysX was passed. 2. PhysX D6 ragdoll ( ) — tried if articulation wasn't requested/available, still requires a . 3. Verlet/PBD ( , new) — no PhysX required at all. Builds bones directly from (works with either or output, since both set as a numeric index). Full axis/swing/twist fidelity when the rig came from ; degrades to generic ball joints for the legacy shape. This tier is intentionally passive — no drives/muscles, just gravity + constraints. 4. Kinematic only ( , new) — always succeeds; no physics at all, is forced to and the controller becomes purely pose driven (render pose === blended/balanced pose every frame). , , and all branch","contentHash":"ccaea1091cfaa55606a490e0bf6f910a57fc496c5fd2fab3f1ac8b126dd3407e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/ActiveRigController.md::0001","path":"engine/reference/sim/physics/rig/ActiveRigController.md","title":"sim/physics/rig/ActiveRigController.js","description":"","kind":"reference","source":"engine/sim/physics/rig/ActiveRigController.js","updated":"","headings":["sim/physics/rig/ActiveRigController.js","Classes","class ActiveRigController","Functions","createActiveRigController(options = {})","Notes & Examples","Fallback chain (Phase 2 of the Ragdoll Stack Consolidation Roadmap)","Physics Engine Integration","Physics Engine Integration"],"chunkIndex":1,"chunkCount":3,"text":"succeeds; no physics at all, is forced to and the controller becomes purely pose driven (render pose === blended/balanced pose every frame). , , and all branch on (now including and ) so the rest of the API is identical regardless of which tier is active — callers don't need to know or care which backend actually initialized. Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision","contentHash":"620ccb268c8f4867f99bd73372ec8c8a1186bf300245f88c30b4cd1fc31db8e8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/ActiveRigController.md::0002","path":"engine/reference/sim/physics/rig/ActiveRigController.md","title":"sim/physics/rig/ActiveRigController.js","description":"","kind":"reference","source":"engine/sim/physics/rig/ActiveRigController.js","updated":"","headings":["sim/physics/rig/ActiveRigController.js","Classes","class ActiveRigController","Functions","createActiveRigController(options = {})","Notes & Examples","Fallback chain (Phase 2 of the Ragdoll Stack Consolidation Roadmap)","Physics Engine Integration","Physics Engine Integration"],"chunkIndex":2,"chunkCount":3,"text":"seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"0ae29ff8c44ef9cc536b4b89911d4d0ffa4ccd04baa17500b862fb6289744983"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/ActiveRigSchema.md::0000","path":"engine/reference/sim/physics/rig/ActiveRigSchema.md","title":"sim/physics/rig/ActiveRigSchema.js","description":"","kind":"reference","source":"engine/sim/physics/rig/ActiveRigSchema.js","updated":"","headings":["sim/physics/rig/ActiveRigSchema.js","Functions","createDriveAxis(options = {})","frequencyToDrive({ frequencyHz = 4.5, dampingRatio = 1.0, effectiveMass = 1, mode = DRIVEMODES.acceleration } = {})","getJointTorqueBudget(jointType, massKg = 80, presetName = 'HumanAverage', tier = 'avg')","createDriveProfile({ joints = [], massKg = 80, preset = 'HumanAverage', frequencyHz = 4.5, dampingRatio = 1.0, driveMode = DRIVEMODES.acceleration } = {})","createPoseBufferFromRig(rig = {})","createActiveRigConfig(options = {})","inferJointDriveType(name = '')","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"8703f925943587ecc02c4ad93ed9505f2d51b73f9c0c7fad7f5411251768abcb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/BalanceController.md::0000","path":"engine/reference/sim/physics/rig/BalanceController.md","title":"sim/physics/rig/BalanceController.js","description":"","kind":"reference","source":"engine/sim/physics/rig/BalanceController.js","updated":"","headings":["sim/physics/rig/BalanceController.js","Classes","class BalanceController","Functions","estimateCenterOfMass(joints = {}, fallback = [0, 0, 0])","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9b97cd3acfb4fa1ac07864f8ac68502824dc30e17c28222490ceafc27e8039bc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/CharacterPhysicsAssetAdapter.md::0000","path":"engine/reference/sim/physics/rig/CharacterPhysicsAssetAdapter.md","title":"sim/physics/rig/CharacterPhysicsAssetAdapter.js","description":"","kind":"reference","source":"engine/sim/physics/rig/CharacterPhysicsAssetAdapter.js","updated":"","headings":["sim/physics/rig/CharacterPhysicsAssetAdapter.js","Functions","createActiveRigFromCharacterPhysicsAsset(asset, options = {})","createActiveRigControllerOptionsFromCharacterPhysicsAsset(asset, options = {})","createRetargetGraphFromBodyDefs(bodyDefs = [])","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build an ActiveRigController compatible rig descriptor from a CharacterPhysicsAsset. Parameters: (object) — A CharacterPhysicsAsset (see engine/assets/rig/CharacterPhysicsAsset.js) (object) — No description in source JSDoc. Returns: rig — { id, name, backend, root, parts, joints, bodies, bonePairs, pose, retarget, driveProfile } Build the full option bag expects, from a CharacterPhysicsAsset — the CharacterPhysicsAsset equivalent of . Parameters: (object) — A CharacterPhysicsAsset (object) — No description in source JSDoc. Returns: { rig, retargetGraph, initialPoseState, config } Trivial identity retarget graph (physics joint id === render bone id/slot). <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection","contentHash":"fe489df3b2e303638f92a8d0ffef5843bb489446ab0568e06ef0c2c86b30bc80"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/CharacterPhysicsAssetAdapter.md::0001","path":"engine/reference/sim/physics/rig/CharacterPhysicsAssetAdapter.md","title":"sim/physics/rig/CharacterPhysicsAssetAdapter.js","description":"","kind":"reference","source":"engine/sim/physics/rig/CharacterPhysicsAssetAdapter.js","updated":"","headings":["sim/physics/rig/CharacterPhysicsAssetAdapter.js","Functions","createActiveRigFromCharacterPhysicsAsset(asset, options = {})","createActiveRigControllerOptionsFromCharacterPhysicsAsset(asset, options = {})","createRetargetGraphFromBodyDefs(bodyDefs = [])","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"cb53885abbb2997c48d5ad2cc1ab2fed65ca7582ae5cc3f252ce0c0addf3c7bd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/MuscleLayer.md::0000","path":"engine/reference/sim/physics/rig/MuscleLayer.md","title":"sim/physics/rig/MuscleLayer.js","description":"","kind":"reference","source":"engine/sim/physics/rig/MuscleLayer.js","updated":"","headings":["sim/physics/rig/MuscleLayer.js","Classes","class MuscleLayer","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"b1934352355a060c004f373e0811c2d0cf12f4b73628068e796da7c57d362a1f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/PoseStateGraph.md::0000","path":"engine/reference/sim/physics/rig/PoseStateGraph.md","title":"sim/physics/rig/PoseStateGraph.js","description":"","kind":"reference","source":"engine/sim/physics/rig/PoseStateGraph.js","updated":"","headings":["sim/physics/rig/PoseStateGraph.js","Classes","class PoseStateGraph","Functions","createPoseStateGraph(options = {})","resolveRequestedPoseState(intent = {}, fallback = 'idlestand')","Constants","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"027dbcc7a5713f9edac3f8dfcd9ff0b4a552637ac76acc8078d6588209c5c0fb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/RetargetGraph.md::0000","path":"engine/reference/sim/physics/rig/RetargetGraph.md","title":"sim/physics/rig/RetargetGraph.js","description":"","kind":"reference","source":"engine/sim/physics/rig/RetargetGraph.js","updated":"","headings":["sim/physics/rig/RetargetGraph.js","Classes","class RetargetGraph","class PoseBlendState","Functions","createEmptyPoseBuffer()","createPoseJoint(id, options = {})","clonePoseBuffer(pose)","blendPoseBuffers(a, b, t)","poseFromJointArray(joints = [])","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"348b6faa0359f16e576a70de8f594604c541a20ff4cab759d61ff20a9080c6e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/StickmanActiveRigAdapter.md::0000","path":"engine/reference/sim/physics/rig/StickmanActiveRigAdapter.md","title":"sim/physics/rig/StickmanActiveRigAdapter.js","description":"","kind":"reference","source":"engine/sim/physics/rig/StickmanActiveRigAdapter.js","updated":"","headings":["sim/physics/rig/StickmanActiveRigAdapter.js","Functions","createActiveRigFromStickman(stickman = {}, options = {})","createActiveRigControllerOptionsFromStickman(stickman = {}, options = {})","createStickmanRetargetGraph(bodies = [])","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/rig/index.md::0000","path":"engine/reference/sim/physics/rig/index.md","title":"sim/physics/rig/index.js","description":"","kind":"reference","source":"engine/sim/physics/rig/index.js","updated":"","headings":["sim/physics/rig/index.js","Exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"d6133c12341f15cba4ad14fe82c6b69e048f014b4d4439bc5d205fc1450d9542"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/vehicle/VehicleBindings.md::0000","path":"engine/reference/sim/physics/vehicle/VehicleBindings.md","title":"sim/physics/vehicle/VehicleBindings.js","description":"","kind":"reference","source":"engine/sim/physics/vehicle/VehicleBindings.js","updated":"","headings":["sim/physics/vehicle/VehicleBindings.js","Functions","vehicleTopLevelFunctions(PhysX)","tireForceExtension(PhysX)","ensureVehicleExtension(PhysX, foundation)","isPhysXVehicleSupported(world)","destroyTracked(PhysX, tracked)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"56939f4ed2c334d1bc631d0860aaa602fcd4666ba146e4f32fbb0400650a7201"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/vehicle/VehicleChassis.md::0000","path":"engine/reference/sim/physics/vehicle/VehicleChassis.md","title":"sim/physics/vehicle/VehicleChassis.js","description":"","kind":"reference","source":"engine/sim/physics/vehicle/VehicleChassis.js","updated":"","headings":["sim/physics/vehicle/VehicleChassis.js","Functions","configureVehicleChassis(PhysX, vehicle, config, alloc)","initializeVehicleActor(PhysX, topLevel, world, vehicle, config, alloc)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/vehicle/VehicleConfig.md::0000","path":"engine/reference/sim/physics/vehicle/VehicleConfig.md","title":"sim/physics/vehicle/VehicleConfig.js","description":"","kind":"reference","source":"engine/sim/physics/vehicle/VehicleConfig.js","updated":"","headings":["sim/physics/vehicle/VehicleConfig.js","Functions","resolveVehicleConfig(options = {})","arrayAt(owner, field, index)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/vehicle/VehicleController.md::0000","path":"engine/reference/sim/physics/vehicle/VehicleController.md","title":"sim/physics/vehicle/VehicleController.js","description":"","kind":"reference","source":"engine/sim/physics/vehicle/VehicleController.js","updated":"","headings":["sim/physics/vehicle/VehicleController.js","Functions","createVehicleController({ PhysX, world, topLevel, vehicle, actor, context, sweepMesh, tracked, config, gears, })","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/vehicle/VehicleDrivetrain.md::0000","path":"engine/reference/sim/physics/vehicle/VehicleDrivetrain.md","title":"sim/physics/vehicle/VehicleDrivetrain.js","description":"","kind":"reference","source":"engine/sim/physics/vehicle/VehicleDrivetrain.js","updated":"","headings":["sim/physics/vehicle/VehicleDrivetrain.js","Functions","configureVehicleDrivetrain(PhysX, vehicle)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/vehicle/VehicleEngine.md::0000","path":"engine/reference/sim/physics/vehicle/VehicleEngine.md","title":"sim/physics/vehicle/VehicleEngine.js","description":"","kind":"reference","source":"engine/sim/physics/vehicle/VehicleEngine.js","updated":"","headings":["sim/physics/vehicle/VehicleEngine.js","Functions","configureVehicleEngine(vehicle, config)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/vehicle/VehicleWheels.md::0000","path":"engine/reference/sim/physics/vehicle/VehicleWheels.md","title":"sim/physics/vehicle/VehicleWheels.js","description":"","kind":"reference","source":"engine/sim/physics/vehicle/VehicleWheels.js","updated":"","headings":["sim/physics/vehicle/VehicleWheels.js","Functions","configureVehicleWheels(PhysX, topLevel, vehicle, config, alloc)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/physics/vehicle/index.md::0000","path":"engine/reference/sim/physics/vehicle/index.md","title":"sim/physics/vehicle/index.js","description":"","kind":"reference","source":"engine/sim/physics/vehicle/index.js","updated":"","headings":["sim/physics/vehicle/index.js","Functions","createPhysXVehicle(world, options = {})","Re-exports","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Build a complete PhysX Vehicle2 car from independently owned subsystems. Re exports <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"df3664f4ae2038d329aeabcc1089ca31f90ac2654b5c75df9eeea054183858ca"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/world/WindSimulation.md::0000","path":"engine/reference/sim/world/WindSimulation.md","title":"sim/world/WindSimulation.js","description":"","kind":"reference","source":"engine/sim/world/WindSimulation.js","updated":"","headings":["sim/world/WindSimulation.js","Classes","class WindSimulation","class ProceduralWeather","class VolumetricClouds","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Set terrain boundary from heightmap Set wind direction and speed Run one LBM simulation step Get velocity buffer for wind erosion Get density buffer Load config from object 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) Method Signature Summary Initialize weather grids Step weather simulation Update wind field based on terrain Convect field using wind Diffuse (smooth) field Sample weather at world position Get average weather stats (for vegetation/biome generation) Load config 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 Method Signature Summary Connect to wind simulation and particle system CPU noise for cloud density (can be moved to GPU) Generate cloud density field Sample cloud density at world position Get cloud texture for rendering Load config <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and","contentHash":"6da461ea3fc5ef4827cea1151e27c4cbc5457fde59f14f91eb3809b122ff8063"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/world/WindSimulation.md::0001","path":"engine/reference/sim/world/WindSimulation.md","title":"sim/world/WindSimulation.js","description":"","kind":"reference","source":"engine/sim/world/WindSimulation.js","updated":"","headings":["sim/world/WindSimulation.js","Classes","class WindSimulation","class ProceduralWeather","class VolumetricClouds","Notes & Examples","Physics Engine Integration"],"chunkIndex":1,"chunkCount":2,"text":"Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"09f7ab3994b93a456722dd2047e932bc3ba1366f5865870ef08084363ee89ba2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/world/WindSystem.md::0000","path":"engine/reference/sim/world/WindSystem.md","title":"sim/world/WindSystem.js","description":"","kind":"reference","source":"engine/sim/world/WindSystem.js","updated":"","headings":["sim/world/WindSystem.js","Classes","class WindSystem","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes WindSystem.js Global Wind Simulation Provides wind data for vegetation, particles, cloth, etc. Features gusts, turbulence, and directional wind Method Signature Summary <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"edb2cdd42762b2448248327ee361d736daaf2697e6b6b40032ae3ac6fc1aa46f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/sim/world/WorldSim.md::0000","path":"engine/reference/sim/world/WorldSim.md","title":"sim/world/WorldSim.js","description":"","kind":"reference","source":"engine/sim/world/WorldSim.js","updated":"","headings":["sim/world/WorldSim.js","Functions","createWorldSim(options = {})","destroyWorldSim(worldSim)","stepWorldSim(worldSim, deltaSeconds, options = {})","sampleTerrainHeight(worldSim, worldX, worldZ)","getWorldSimSnapshot(worldSim)","exportWorldSimState(worldSim, options = {})","createWorldSimFromState(state)","Notes & Examples","Physics Engine Integration"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Physics Engine Integration The physics system provides rigid body dynamics, collision detection, and raycasting. Bodies have shapes (box, sphere, mesh), mass properties, and constraints. The GPU physics engine accelerates broad phase collision detection and particle systems. Example: Creating physics bodies Advanced: Collision detection and raycasting Advanced: Constraints and joints Advanced: Continuous collision detection (CCD) Gotchas: Units : Physics uses meters, kilograms, seconds. A 1 unit cube is 1 meter. Time step : Fixed time step (1/60) gives stable simulation; variable dt causes explosions. Collision layers : Use collision masks to filter what collides (player vs enemy, bullet vs world). Sleeping : At rest bodies sleep to save CPU — wake them before applying forces. See also: Physics · GPU Physics Engine","contentHash":"9853dcddc47f2e64f178a897b02c84921af859bfd45fe442ece3a85c5c4f0799"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/authority/Capability.md::0000","path":"engine/reference/state/authority/Capability.md","title":"state/authority/Capability.js","description":"","kind":"reference","source":"engine/state/authority/Capability.js","updated":"","headings":["state/authority/Capability.js","Functions","makeCapability(c = {})","attenuate(cap, caveat)","authorizes(cap, { principal, object, action, epoch, context = {} } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Mint a capability. Parameters: (object) — No description in source JSDoc. (string) — who may use it (string) — target object/entity (or ' ' pattern) (string) — allowed action (e.g. 'edit file') (object) — arbitrary caveat predicates' data (number) — operational time expiry Returns: frozen capability with a stable 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\"). Parameters: (object) — No description in source JSDoc. 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). Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"17cc5df721f665ce56e3007a9da2052800542be1f5d828570aaa831b18f9d1b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/authority/CapabilityRegistry.md::0000","path":"engine/reference/state/authority/CapabilityRegistry.md","title":"state/authority/CapabilityRegistry.js","description":"","kind":"reference","source":"engine/state/authority/CapabilityRegistry.js","updated":"","headings":["state/authority/CapabilityRegistry.js","Classes","class CapabilityRegistry","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Issue (store) a capability. Returns its id. Look up a capability by id, or null. Revoke a capability (online status — checked at commit). Authorize a request against a stored capability id, applying revocation and single use checks. Does NOT consume — the coordinator consumes only after a successful atomic commit (single use caps are USOs). Mark a single use capability consumed (called by coordinator post commit). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"347da9e00ef37b23c9e2123375a959dc1626445b60b6d3003271cc2f71370264"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/authority/Identity.md::0000","path":"engine/reference/state/authority/Identity.md","title":"state/authority/Identity.js","description":"","kind":"reference","source":"engine/state/authority/Identity.js","updated":"","headings":["state/authority/Identity.js","Functions","async createSigner(principal, opts = {})","async verifyWithKey(publicKeyHex, data, signatureHex)","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 flags that it carries no cryptographic guarantee. Functions 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 identity and per group pseudonymous identities (engine/network/identity) — without one leaking the other's fingerprint. Parameters: (string) — logical actor id (e.g. 'agent.builder', 'profile:alice') (object) — No description in source JSDoc. (string) — explicit IndexedDB key id (defaults to ) Returns: signer { principal, fingerprint, publicKeyHex, secure, sign, verify } Verify a signature against an explicit public key (cross actor verification). Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"76de05cb87b070774aaa5b3afcf092d24356f3af7e53afcdd8765e1590d6b11e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/authority/PolicyEngine.md::0000","path":"engine/reference/state/authority/PolicyEngine.md","title":"state/authority/PolicyEngine.js","description":"","kind":"reference","source":"engine/state/authority/PolicyEngine.js","updated":"","headings":["state/authority/PolicyEngine.js","Classes","class PolicyEngine","Functions","policyRule(r)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Evaluate a request. DENY overrides ALLOW; risk is the max asserted by any matching rule; approval is required if any matching allow rule demands it. Functions Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. ((ctx:object)= boolean) — matches the request context (string) — ALLOW DENY (string) — RISK LEVEL this rule asserts for the action (boolean) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f5fdb5a1a38b967a54ce39dad62a57759958595c0dfd94150cf1c199fdc6f57f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/causal/CausalParents.md::0000","path":"engine/reference/state/causal/CausalParents.md","title":"state/causal/CausalParents.js","description":"","kind":"reference","source":"engine/state/causal/CausalParents.js","updated":"","headings":["state/causal/CausalParents.js","Classes","class CausalGraph","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 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. Classes Method Signature Summary Register a known event id (commit, observation, fact). True if an event id is known to the graph. Record a new event with explicit causal parents. Parents must already be known (else the relationship is dangling). Returns the unknown parents. Verify causal parents for a proposed transaction WITHOUT mutating the graph. Deterministic partial order projection of all known events. Does (transitively) causally depend on ? <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eca1bd969c88279e04eb8c9f6305cf0008e3e5708a9be3a73beb77cbfea24f4b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/causal/DottedVersionVector.md::0000","path":"engine/reference/state/causal/DottedVersionVector.md","title":"state/causal/DottedVersionVector.js","description":"","kind":"reference","source":"engine/state/causal/DottedVersionVector.js","updated":"","headings":["state/causal/DottedVersionVector.js","Classes","class VersionVector","class DVVSet","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Record a local event for , returning a new vector. Join: max per node (everything either side has seen). True if this vector dominates (has seen everything in) . Partial order comparison against another vector. 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. Method Signature Summary Read all current sibling values + the causal context to write back with. Number of concurrent siblings currently held (1 = no conflict). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d6fe17a8e24db5f3367a2baec38188cd3f2da63b8fbff6e86d5d4e4172ac8a4d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/causal/HLC.md::0000","path":"engine/reference/state/causal/HLC.md","title":"state/causal/HLC.js","description":"","kind":"reference","source":"engine/state/causal/HLC.js","updated":"","headings":["state/causal/HLC.js","Classes","class HLC","Functions","compareHLC(a, b)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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): tracks the max physical time observed, is a bounded counter that breaks ties when events share the same . 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. Classes Method Signature Summary Current timestamp without advancing. Generate a timestamp for a LOCAL event (send / new commit). Ensures monotonicity even if the physical clock has not advanced. Update on RECEIVING a remote timestamp, merging causal information so the local clock never goes backwards relative to a cause. Functions Compare two HLC timestamps {l,c}. Returns 1, 0, or 1. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4a147ab3a4c130580e7d6c640d9b28445460096acca2d64340a0dc7644986d2c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/codebook/CodeEntry.md::0000","path":"engine/reference/state/codebook/CodeEntry.md","title":"state/codebook/CodeEntry.js","description":"","kind":"reference","source":"engine/state/codebook/CodeEntry.js","updated":"","headings":["state/codebook/CodeEntry.js","Functions","makeCodeEntry(rawId, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Functions 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. Parameters: (number) — packed 9 bit pattern (object) — No description in source JSDoc. (import('./PatternCodebook.js').PatternCodebook) — No description in source JSDoc. (object) — result of SymbolicSig.symbolicSig(...) Returns: CodeEntry <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ca838c687254a9c41b9810ccdb454fc391c23e471a4de5a1b2fbb0951af0e9d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/codebook/PatternCodebook.md::0000","path":"engine/reference/state/codebook/PatternCodebook.md","title":"state/codebook/PatternCodebook.js","description":"","kind":"reference","source":"engine/state/codebook/PatternCodebook.js","updated":"","headings":["state/codebook/PatternCodebook.js","Classes","class PatternCodebook","Functions","packPattern(cells)","unpackPattern(id)","hammingDistance(a, b)","symmetries(id)","canonicalId(id)","patternHashId(rawId)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Allocate (or fetch) a dense runtime id for a raw pattern's canonical form. Mark a canonical pattern as legal (an attractor that corrupted input may snap to). Snap a (possibly corrupted) raw pattern to the nearest LEGAL canonical attractor by Hamming distance. Resonance suggests ; this never asserts truth — callers decide whether to accept (visual) or verify (semantic). Functions Pack a length 9 array of truthy/0 cells (row major) into a 9 bit id (0..511). Unpack a 9 bit id back into a length 9 Uint8Array (row major). Number of differing cells between two packed 3x3 patterns. All 8 dihedral symmetries of a packed pattern. Canonical id = smallest packed id over all dihedral symmetries (rotation/flip invariant). Stable content fingerprint for a pattern (hash = identity). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4202eb515ade7a8c693e047c9e6089c4ecb30e09daf612c6a0126080c4a82e83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/codebook/SymbolicSig.md::0000","path":"engine/reference/state/codebook/SymbolicSig.md","title":"state/codebook/SymbolicSig.js","description":"","kind":"reference","source":"engine/state/codebook/SymbolicSig.js","updated":"","headings":["state/codebook/SymbolicSig.js","Functions","primeAt(index)","symbolicSig(primeIndices)","sigEquals(a, b)","sigContains(sig, sub)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Prime value for a given index (bounds checked). Build a symbolic signature: a sorted, de duplicated vector of prime indices. Parameters: (Iterable<number ) — No description in source JSDoc. Returns: } Meaning equality — compares index sets, NEVER products. True if 's meanings are all present in (symbolic containment). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"120a29d6831c201e213a5ba22277a3e647a9ac35caf3df4301789e95d6b07030"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/commit/CommitGate.md::0000","path":"engine/reference/state/commit/CommitGate.md","title":"state/commit/CommitGate.js","description":"","kind":"reference","source":"engine/state/commit/CommitGate.js","updated":"","headings":["state/commit/CommitGate.js","Functions","createCommitGate({ constraints = [], authority = null } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Parameters: (object) — No description in source JSDoc. (Array) — commit strength constraints ((context:object)= boolean) — e.g. signature / ownership check <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"74b2c4a340fab8b7881ec9079a4a5e756320cac7874adf47a197818e255f9e98"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/commit/CorrectionGate.md::0000","path":"engine/reference/state/commit/CorrectionGate.md","title":"state/commit/CorrectionGate.js","description":"","kind":"reference","source":"engine/state/commit/CorrectionGate.js","updated":"","headings":["state/commit/CorrectionGate.js","Functions","correct({ tier, repaired, verify, unsure = false })","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Decide what to do with a (resonance )repaired candidate. Parameters: (object) — No description in source JSDoc. (string) — CORRECTION TIERS. ( ) — suggested repaired value (from attractor snap, etc.) (()= boolean) — semantic verifier (hash / constraint / authority check) (boolean) — if true, never auto apply even at VISUAL Returns: } Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b97f31ea1dafad4d1fe9b9f5db0d33e8e7023c57f541b538f915c9a960e8d76c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/consistency/CRDT.md::0000","path":"engine/reference/state/consistency/CRDT.md","title":"state/consistency/CRDT.js","description":"","kind":"reference","source":"engine/state/consistency/CRDT.js","updated":"","headings":["state/consistency/CRDT.js","Classes","class GCounter","class PNCounter","class GSet","class ORSet","class LWWRegister","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: state/consistency/CRDT.js — approved mergeable types (spec §4 \"Mergeable state\", rule 14/36). State based CRDTs (CvRDTs): every type exposes a 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 confirms its operations preserve the relevant invariants. These types are the approved building blocks, not a license to make any value mergeable. Classes Method Signature Summary Increment this node's count (monotonic, n ≥ 0). Join: take the max observed count per node. Method Signature Summary Method Signature Summary Method Signature Summary Add an element with a unique tag (auto generated if omitted). Remove an element by tombstoning every tag currently observed for it. Join: union add tags per element and union the remove tombstones. Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e1b5372247ee94f9bcd092239e2188b2dad56d8398b9a6b546383340f881aab0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/consistency/InvariantConfluence.md::0000","path":"engine/reference/state/consistency/InvariantConfluence.md","title":"state/consistency/InvariantConfluence.js","description":"","kind":"reference","source":"engine/state/consistency/InvariantConfluence.js","updated":"","headings":["state/consistency/InvariantConfluence.js","Functions","classifyConfluence({ initial, merge, invariant, operations, depth = 2 })","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 operations and reports a concrete counterexample when it finds one. A \"confluent\" result is evidence within the explored bound, not a closed form proof. Functions Classify a set of operations for invariant confluence. Parameters: (object) — No description in source JSDoc. ( ) — a valid starting state (CRDT instance or value) ((a: , b: )= ) — least upper bound join of two states ((s: )= boolean) — the application invariant I (number) — branch exploration depth (default 2) Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"aa03d81c09bbc5fc194350250417f920cca4b9d68e8b4905dba29a4e001e9cfd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/consistency/OptimisticValidator.md::0000","path":"engine/reference/state/consistency/OptimisticValidator.md","title":"state/consistency/OptimisticValidator.js","description":"","kind":"reference","source":"engine/state/consistency/OptimisticValidator.js","updated":"","headings":["state/consistency/OptimisticValidator.js","Classes","class OptimisticValidator","Functions","detectWriteSkew(a, b)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Validate a transaction's declared read set and predicates against the current state. Used standalone or alongside the CommitCoordinator's version check. Method Signature Summary Functions 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. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"06debafe2bc4d3bfffb50f55103d3836c57032066c24620924157ecf75b672db"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/consistency/Reservation.md::0000","path":"engine/reference/state/consistency/Reservation.md","title":"state/consistency/Reservation.js","description":"","kind":"reference","source":"engine/state/consistency/Reservation.js","updated":"","headings":["state/consistency/Reservation.js","Classes","class ReservationManager","class BoundedCounterEscrow","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Reserve a resource for a holder until (operational time). Creates a reservation USO; returns its id. True if the reservation is unspent and not past its expiry at . Consume a reservation (the holder commits). Fails if expired or already consumed/released — guaranteeing it is honored at most once. Release a reservation (holder abandons it or it expired). Marks the reservation USO spent so it can never be consumed afterward. Method Signature Summary Withdrawable headroom not yet granted to any holder. Total withdrawn across all holders. Remaining quantity above the floor (pool + all outstanding grants). A holder's local (coordination free) withdrawal rights. Grant part of the ungranted pool to a holder as local withdrawal","contentHash":"92d488a7a6005770d8d2b10638f5835c4d145db10ebf51e0f42bbe7b93302079"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/consistency/Reservation.md::0001","path":"engine/reference/state/consistency/Reservation.md","title":"state/consistency/Reservation.js","description":"","kind":"reference","source":"engine/state/consistency/Reservation.js","updated":"","headings":["state/consistency/Reservation.js","Classes","class ReservationManager","class BoundedCounterEscrow","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"floor (pool + all outstanding grants). A holder's local (coordination free) withdrawal rights. Grant part of the ungranted pool to a holder as local withdrawal rights. Returns the amount actually granted (may be less than requested). Withdraw from a holder's LOCAL grant — no coordination required while the holder has rights. Preserves the lower bound invariant because the sum of all grants never exceeds . Return unused local rights to the shared pool (e.g. holder going offline). The lower bound invariant the escrow guarantees holds at all times. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5d1d4b70be475173d897866b93be6da3dd499a8a245018ce1febe0a839e41534"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/consistency/SerializableQueue.md::0000","path":"engine/reference/state/consistency/SerializableQueue.md","title":"state/consistency/SerializableQueue.js","description":"","kind":"reference","source":"engine/state/consistency/SerializableQueue.js","updated":"","headings":["state/consistency/SerializableQueue.js","Classes","class SerializableQueue","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Try to admit a transaction into the serial order. Finalize an admitted transaction at its assigned sequence (serial order). Drop an admitted but aborted transaction, freeing its conflict claims. The serial schedule actually committed, in sequence order. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"89fbbb4dc71c688e8ac7d833ed2093d1419a34e395c5db14902b956dd530021a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/entity/EntityRegistry.md::0000","path":"engine/reference/state/entity/EntityRegistry.md","title":"state/entity/EntityRegistry.js","description":"","kind":"reference","source":"engine/state/entity/EntityRegistry.js","updated":"","headings":["state/entity/EntityRegistry.js","Classes","class EntityRegistry","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Current version id for an entity, or null if unknown. Full version record by version id, or null. True if the entity's head matches (optimistic read). Create the first version of a new entity. Returns the version record. Append a new immutable version. (if given) must equal the current head or the update is rejected (optimistic concurrency). All current head version ids, sorted (for state roots). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"48e831458d833d81403d4a2ab6c493183034f886b0893a103eb48b811ffc62ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/entity/ProvenanceStore.md::0000","path":"engine/reference/state/entity/ProvenanceStore.md","title":"state/entity/ProvenanceStore.js","description":"","kind":"reference","source":"engine/state/entity/ProvenanceStore.js","updated":"","headings":["state/entity/ProvenanceStore.js","Classes","class ProvenanceStore","Functions","makeProvenance(p = {})","isUntrusted(prov)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Attach provenance to a subject id (appends — provenance is append only). All provenance records for a subject (frozen copy). Functions Build a provenance record for a subject (a fact, version, or transaction). Parameters: (object) — No description in source JSDoc. (string) — e.g. 'tool:file reader' (string) — No description in source JSDoc. (string) — activity id (string) — agent id (number) — 0..1 confidence (string) — one of CERTAINTY (number) — No description in source JSDoc. (string[]) — No description in source JSDoc. True if a provenance record came from an untrusted external source. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1f69b38259256110b1e50ebd95e9646b8777cd4c9bd6e3e9e2b811e8e7f683b9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/entity/SchemaRegistry.md::0000","path":"engine/reference/state/entity/SchemaRegistry.md","title":"state/entity/SchemaRegistry.js","description":"","kind":"reference","source":"engine/state/entity/SchemaRegistry.js","updated":"","headings":["state/entity/SchemaRegistry.js","Classes","class SchemaRegistry","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Register a versioned schema. Look up a schema by name + version, or null. Validate a value against a registered schema. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"550942fed52cab1356ad00213436d35eb3606a10ccd2493e7729d0c3d0527292"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/facts/Branch.md::0000","path":"engine/reference/state/facts/Branch.md","title":"state/facts/Branch.js","description":"","kind":"reference","source":"engine/state/facts/Branch.js","updated":"","headings":["state/facts/Branch.js","Functions","applySequence(store, ops)","commutes(base, opA, opB)","branchOrders(base, opA, opB)","mergeEquivalent(stores)","prune(stores, constraints)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Apply a sequence of operations to a (cloned) store. Returns the store. Does applying opA then opB yield the same projection as opB then opA? Returns: } Produce both order branches [A→B, B→A] from a base store. Collapse branches with identical projections (merge equivalent). Drop branches that fail commit strength constraints (prune invalid). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f37fd37116da9a063e01d85ecf66bda22705b38787a06f8bfecbde08fb44e099"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/facts/Causality.md::0000","path":"engine/reference/state/facts/Causality.md","title":"state/facts/Causality.js","description":"","kind":"reference","source":"engine/state/facts/Causality.js","updated":"","headings":["state/facts/Causality.js","Functions","link(cause, effect)","toposort(nodes, links = [])","dependsOn(effect, cause, links = [])","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions A causal link: effect depends on cause (cause must precede effect). Partial order sort. Nodes only ordered where links force it; otherwise deterministic by string. Throws on a causal cycle (an impossible order). Parameters: (Iterable<string ) — No description in source JSDoc. Transitive dependency test: does (transitively) depend on ? <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"99c438d202d00d2070dbea0e64330c3a730b0e047a5b9e6a57e4012f4684d4d8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/facts/Constraints.md::0000","path":"engine/reference/state/facts/Constraints.md","title":"state/facts/Constraints.js","description":"","kind":"reference","source":"engine/state/facts/Constraints.js","updated":"","headings":["state/facts/Constraints.js","Functions","constraint(id, test, opts = {})","validateFacts(liveFacts, constraints, { phase = SCOPERUNTIME } = {})","atMostOne(id, pattern, opts = {})","mutuallyExclusive(id, a, b, opts = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Define a constraint. Parameters: (string) — No description in source JSDoc. ((liveFacts:Set<string )= boolean) — true = legal (object) — { scope:'runtime' 'commit', message } Validate live facts. phase 'runtime' runs only runtime constraints; phase 'commit' runs ALL (runtime + commit) — commit is strictly stronger. Returns: }} No more than one live fact matching a regex (single source of truth). Two facts must never be live at once (mutual exclusion). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f2bb056ba43af342d6f877b29713cc128df98365d649febaa172344fc28c1202"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/facts/Fact.md::0000","path":"engine/reference/state/facts/Fact.md","title":"state/facts/Fact.js","description":"","kind":"reference","source":"engine/state/facts/Fact.js","updated":"","headings":["state/facts/Fact.js","Functions","fact(predicate, ...args)","revoke(f)","isTombstone(f)","tombstoneTarget(f)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: state/facts/Fact.js — canonical facts + tombstones. Layer law: facts are MONOTONIC. We prefer adding facts, never deleting them. \"Deletion\" is a tombstone 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). Functions Build a canonical fact string: fact('hasKey','player','red') → \"hasKey(player,red)\". Wrap a fact as a tombstone (the monotonic stand in for deletion). Is this fact a tombstone? The fact a tombstone revokes, or null. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ccf123e2b78434e4fba9a6e97ee623f08b940c7bc7a8a321afb8056aa8e4422c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/facts/FactStore.md::0000","path":"engine/reference/state/facts/FactStore.md","title":"state/facts/FactStore.js","description":"","kind":"reference","source":"engine/state/facts/FactStore.js","updated":"","headings":["state/facts/FactStore.js","Classes","class FactStore","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: state/facts/FactStore.js — the unordered, monotonic fact set. No sequence is stored. is the order independent hash of ALL facts (history identity); 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. Classes Method Signature Summary Add a fact (monotonic — never removes). Returns this. Revoke a fact by adding its tombstone (never deletes). Returns this. Raw membership (includes tombstones). All raw facts including tombstones (canonical history). Currently valid facts: non tombstone facts whose tombstone is absent. State id = order independent hash of the full canonical fact set. Projection id = hash of the live (valid) facts only. Deep copy. Commutative, idempotent union merge (anti entropy). Returns this. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"62d5e08b031deb88a4da3ce442afb5c7c67bb306204b7cba56ebf9f99bd18a70"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/index.md::0000","path":"engine/reference/state/index.md","title":"state/index.js","description":"","kind":"reference","source":"engine/state/index.js","updated":"","headings":["state/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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","contentHash":"f1f3f5dd561c9173624756280204078008b39c7bb19f98698ccce34ec66c331f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/index.md::0001","path":"engine/reference/state/index.md","title":"state/index.js","description":"","kind":"reference","source":"engine/state/index.js","updated":"","headings":["state/index.js","Re-exports","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"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. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"dab343dfdfeb9e892f2ee5238b44f2ab17ff4546ddf95b09f8d743f2e35415af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/integrity/Checkpoint.md::0000","path":"engine/reference/state/integrity/Checkpoint.md","title":"state/integrity/Checkpoint.js","description":"","kind":"reference","source":"engine/state/integrity/Checkpoint.js","updated":"","headings":["state/integrity/Checkpoint.js","Functions","makeCheckpoint(c = {})","verifyCheckpoint(checkpoint, computedStateRoot, predecessor = null)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build a checkpoint record. Parameters: (object) — No description in source JSDoc. (string) — prior checkpoint id (null for first) (string) — event log head hash at this point (string) — canonical state root (string) — root over unspent outputs (number) — first covered event seq (number) — last covered event seq (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string null) — authority signature over the checkpoint id Returns: frozen checkpoint with a stable 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). Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2c17ac30441c8c40ca18b5fa0a7a077134bd38f50dd25358327fa12db73fa4de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/integrity/EventLog.md::0000","path":"engine/reference/state/integrity/EventLog.md","title":"state/integrity/EventLog.js","description":"","kind":"reference","source":"engine/state/integrity/EventLog.js","updated":"","headings":["state/integrity/EventLog.js","Classes","class EventLog","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Append an event. Returns the frozen entry (with its chained hash). Entry at a sequence index, or null. All entries (frozen shallow copy). Verify the hash chain is intact end to end. Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"70532962de2b5c5552b2ed6f45ba691d24d0538fe0ef4f15ed58b7b09492b718"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/integrity/GarbageCollector.md::0000","path":"engine/reference/state/integrity/GarbageCollector.md","title":"state/integrity/GarbageCollector.js","description":"","kind":"reference","source":"engine/state/integrity/GarbageCollector.js","updated":"","headings":["state/integrity/GarbageCollector.js","Classes","class GarbageCollector","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Register an object and the ids it references. Add/remove a signed root (checkpoint, unspent set, retained branch tip). Pin authoritative state so GC can never collect it (rule 61 invariant). Mark: ids reachable from any root, transitively (cycle safe). Objects eligible for collection: unreachable AND not pinned. Sweep: remove collectable objects. Pinned and root reachable objects are always retained. Returns the ids actually collected. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b356fc6308e7ebeec1f153837ff9c1134d769a27e8097de62fd3a1e648cc0628"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/integrity/Retention.md::0000","path":"engine/reference/state/integrity/Retention.md","title":"state/integrity/Retention.js","description":"","kind":"reference","source":"engine/state/integrity/Retention.js","updated":"","headings":["state/integrity/Retention.js","Classes","class RetentionManager","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Create a scope with fresh key material; returns the scope id. Seal a sensitive payload under a scope. Returns an envelope carrying the ciphertext plus NON sensitive audit metadata that is always retained. Open an envelope — returns plaintext, or null if the key was crypto erased. Cryptographic erase: destroy a scope's key so every payload sealed under it becomes irrecoverable, while audit metadata in already issued envelopes (and the permanent log) remains intact (rule 62). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ca48ba5e4c20f992bc4d2408824d5ec583e8fdf09919c484ffe60c1b93395e84"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/integrity/SecureCrypto.md::0000","path":"engine/reference/state/integrity/SecureCrypto.md","title":"state/integrity/SecureCrypto.js","description":"","kind":"reference","source":"engine/state/integrity/SecureCrypto.js","updated":"","headings":["state/integrity/SecureCrypto.js","Functions","secureCryptoAvailable()","bytesToHex(bytes)","hexToBytes(hex)","async generateAesKey()","async exportKeyRaw(key)","async importAesKey(raw)","async aeadSeal(key, plaintext, aad = '')","async aeadOpen(key, envelope, aad = '')","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Generate a fresh AES 256 GCM key (extractable, for raw export/erase tests). AEAD seal a plaintext string. (additional authenticated data) binds the ciphertext to a context (e.g. the scope id) without encrypting it. Returns: } 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). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"10812aaa470b874a277332183a57a7f72fa15e19f5ebe243fb5ba7ff1f46718e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/integrity/SecureRetention.md::0000","path":"engine/reference/state/integrity/SecureRetention.md","title":"state/integrity/SecureRetention.js","description":"","kind":"reference","source":"engine/state/integrity/SecureRetention.js","updated":"","headings":["state/integrity/SecureRetention.js","Classes","class SecureRetentionManager","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Create a scope backed by a fresh AES 256 GCM key. AEAD seal a payload under a scope. The scope id is the AAD, binding the ciphertext to its scope. Audit metadata is retained in the clear. AEAD open an envelope; null if key erased or ciphertext/AAD tampered. Cryptographic erase: drop the scope key; ciphertext becomes unrecoverable. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"bc220c3c6267686a845a9eab7ee18edce5a9c361d4be20084d9e18ab8b37c84c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/integrity/StateRoot.md::0000","path":"engine/reference/state/integrity/StateRoot.md","title":"state/integrity/StateRoot.js","description":"","kind":"reference","source":"engine/state/integrity/StateRoot.js","updated":"","headings":["state/integrity/StateRoot.js","Functions","computeStateRoot({ facts = [], unspent = [], entityHeads = [] } = {})","rootFromStores({ factStore = null, usoRegistry = null, entityRegistry = null } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Compute a state root from the authoritative components. Any iterable is accepted; members are sorted for order independence. Parameters: (object) — No description in source JSDoc. (Iterable<string ) — live fact strings (Iterable<string ) — unspent USO ids (Iterable<string ) — entity head version ids Returns: tagged state root id Convenience: derive a state root from live engine registries. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ad040e8f111469b4824ce71f2bbc4712152adb56b950687929173626da7b6d67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/observer/Projection.md::0000","path":"engine/reference/state/observer/Projection.md","title":"state/observer/Projection.js","description":"","kind":"reference","source":"engine/state/observer/Projection.js","updated":"","headings":["state/observer/Projection.js","Functions","projectSequence(store, links = [])","chooseBranch(branches, selector = ()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 and a witness. Turning a projection into truth requires a CommitGate. Functions Project one experienced sequence from a fact store. Independent facts stay deterministically ordered (reproducible), causal links force precedence. Returns: } 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. Parameters: (FactStore[]) — No description in source JSDoc. ((branches:FactStore[])= number) — returns chosen index Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"00ef826d50abdd4003d286cd8c58f02ea415ba011f00198bdb20190cdd2d2ced"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/perception/ResonanceIndex.md::0000","path":"engine/reference/state/perception/ResonanceIndex.md","title":"state/perception/ResonanceIndex.js","description":"","kind":"reference","source":"engine/state/perception/ResonanceIndex.js","updated":"","headings":["state/perception/ResonanceIndex.js","Classes","class ResonanceIndex","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Add an item: a feature for approximate retrieval plus its exact (the bytes that identity is verified against). Approximate retrieval: top candidates ranked by cosine similarity. These are SUGGESTIONS only — never treat the top hit as an identity. Exact identity check: do the stored bytes hash match the supplied bytes? The full §16 pipeline: retrieve candidates by similarity, then return the first that EXACTLY matches by hash AND passes the optional semantic predicate. Returns if no candidate is byte identical — a merely similar candidate is never accepted. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"1c63a1eda70a3f1ca8e487877e17eeb4fbe19593a3676d56bb8200d86d535441"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/replication/ByzantineAdapter.md::0000","path":"engine/reference/state/replication/ByzantineAdapter.md","title":"state/replication/ByzantineAdapter.js","description":"","kind":"reference","source":"engine/state/replication/ByzantineAdapter.js","updated":"","headings":["state/replication/ByzantineAdapter.js","Classes","class ByzantineAdapter","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Votes required to commit a value (Byzantine quorum). Cast a (signed) vote for in by . Count of HONEST (non Byzantine) votes for a value in a round. True if reached a Byzantine quorum (2f+1 honest matching votes). The committed value for a round, or null if none reached quorum. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"12f73d7edb219c43fb87d9e20fdb942d15abea2da071698da57e06da1ad9dfc3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/replication/CheckpointQuorum.md::0000","path":"engine/reference/state/replication/CheckpointQuorum.md","title":"state/replication/CheckpointQuorum.js","description":"","kind":"reference","source":"engine/state/replication/CheckpointQuorum.js","updated":"","headings":["state/replication/CheckpointQuorum.js","Classes","class CheckpointQuorum","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Propose a checkpoint (must expose and ). A member attests to a state root for a proposed checkpoint. Only members may attest, and only one (latest) attestation per member counts. Members whose attestation matches the proposed root. Members whose attestation diverges from the proposed root. Finalized iff a quorum of members agree on the proposed root. The quorum proof for a checkpoint. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9a95bc772c32ab69f6bdb7fedda905930a7265c991ba25339d92261ffbdcfe23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/replication/CrossShardCoordinator.md::0000","path":"engine/reference/state/replication/CrossShardCoordinator.md","title":"state/replication/CrossShardCoordinator.js","description":"","kind":"reference","source":"engine/state/replication/CrossShardCoordinator.js","updated":"","headings":["state/replication/CrossShardCoordinator.js","Classes","class CrossShardCoordinator","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Current committed value of a key on a shard. Phase 1 — PREPARE. Acquire all locks in canonical order; record a durable prepared entry. Returns failure (releasing any partial locks) on conflict. Phase 2 — COMMIT. Apply all prepared ops atomically and release locks. Abort a prepared transaction: discard the record and release its locks. True if a tx is prepared but not yet committed (the in doubt window). Recover an in doubt transaction after a coordinator crash by completing the commit from its durable prepared record — 2PC's blocking failure mode made recoverable. SAGA fallback for cross shard work that does NOT require atomicity: run a sequence of local steps with compensation instead of a distributed commit. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6bb3a78cb66082dda3f8bafde45dd49d5b63a021cf1fc1640b76ecc5e38f6232"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/replication/RaftAdapter.md::0000","path":"engine/reference/state/replication/RaftAdapter.md","title":"state/replication/RaftAdapter.js","description":"","kind":"reference","source":"engine/state/replication/RaftAdapter.js","updated":"","headings":["state/replication/RaftAdapter.js","Classes","class RaftAdapter","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Majority needed for election and commit. Elect a leader. Succeeds only with a live quorum, and only a node whose log is at least as up to date as a voting majority can win (Raft restriction). Propose a command. The leader appends it, replicates to live followers, and commits iff a quorum holds the entry. Returns committed:false (not an error) when the entry replicated but lacks quorum. Bring a follower's log into agreement with the leader (Raft backtracking). Committed commands as seen by a node. True if the entry at is committed on a quorum at the leader's term. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"466377cbaddaec5cdcb2f9259d3798cc09e05837aea9fb59c1285efba7095421"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/replication/ReplicatedLog.md::0000","path":"engine/reference/state/replication/ReplicatedLog.md","title":"state/replication/ReplicatedLog.js","description":"","kind":"reference","source":"engine/state/replication/ReplicatedLog.js","updated":"","headings":["state/replication/ReplicatedLog.js","Classes","class ReplicatedLog","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. 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. Classes Method Signature Summary Entry at a 1 based index, or null. Committed commands in order (the applied state machine input). Leader side: append a new command under the current term. Follower side AppendEntries with the Raft log matching check. Directly set commit index (leader, after quorum); clamped to length. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"951c7d525bfca8523e86ab7a2069674f4c7334df3b366e5df38648c89ac0ca52"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/replication/ShardRouter.md::0000","path":"engine/reference/state/replication/ShardRouter.md","title":"state/replication/ShardRouter.js","description":"","kind":"reference","source":"engine/state/replication/ShardRouter.js","updated":"","headings":["state/replication/ShardRouter.js","Classes","class ShardRouter","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Deterministically route a logical key to its shard (commit domain). True if two keys live in the same commit domain (single shard atomic commit). The distinct set of shards a set of keys touches. Classify a transaction's footprint. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7641aeb52048a486bfd6e29b965c330274249d2f8aa675fa7b45660c378eed45"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/resonance/ResonanceVector.md::0000","path":"engine/reference/state/resonance/ResonanceVector.md","title":"state/resonance/ResonanceVector.js","description":"","kind":"reference","source":"engine/state/resonance/ResonanceVector.js","updated":"","headings":["state/resonance/ResonanceVector.js","Functions","resonanceWHT(id)","resonanceDCT(block, N)","cosineSimilarity(a, b)","l2Distance(a, b)","nearestAttractor(vec, attractors, { metric = 'cosine' } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Resonance vector for a tiny 3x3 pattern (Walsh/Hadamard; integer exact). Resonance vector for an NxN visual block (DCT II). Cosine similarity in [ 1, 1] (1 = identical direction). 0 if either is null. Euclidean (L2) distance between two equal length vectors. Nearest attractor by similarity. metric 'cosine' (higher score = closer) or 'l2' (score = negative distance so higher is always closer). Returns: null} <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4e8fe7aeb69099ce75c189df369a1bdc7d3b76ba88ba0a22264620c649d54b71"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/resonance/Transforms.md::0000","path":"engine/reference/state/resonance/Transforms.md","title":"state/resonance/Transforms.js","description":"","kind":"reference","source":"engine/state/resonance/Transforms.js","updated":"","headings":["state/resonance/Transforms.js","Functions","walshHadamard(input)","pattern3x3ToVector(id)","dct1D(input)","idct1D(input)","dct2D(block, N)","idct2D(block, N)","quantize(vec, q = 1)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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). Parameters: (ArrayLike<number ) — No description in source JSDoc. 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. 1 D DCT II (orthonormal). 1 D inverse DCT II (orthonormal). 2 D DCT II of an NxN block (row major Float array of length N N). 2 D inverse DCT II. Quantize a coefficient vector to integers by step (lossy resonance). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6a77283c381938febec6f287ee4dfa8cda5b443d3866ae00f779f36953427424"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/sim/WorldDynamics.md::0000","path":"engine/reference/state/sim/WorldDynamics.md","title":"state/sim/WorldDynamics.js","description":"","kind":"reference","source":"engine/state/sim/WorldDynamics.js","updated":"","headings":["state/sim/WorldDynamics.js","Classes","class WorldDynamics","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Advance for ticks on , deterministically. Never mutates the input. The PRNG is re seeded from the configured seed on every run, so is referentially transparent for the same arguments. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"01227354755a707405c04e3115c98a2888b80af349359dfb5db7faebae95a4e0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/spatial/SpatialCode.md::0000","path":"engine/reference/state/spatial/SpatialCode.md","title":"state/spatial/SpatialCode.js","description":"","kind":"reference","source":"engine/state/spatial/SpatialCode.js","updated":"","headings":["state/spatial/SpatialCode.js","Functions","spatialId2D(x, y)","fromSpatialId2D(code)","spatialId3D(x, y, z)","fromSpatialId3D(code)","hilbertId2D(n, x, y)","fromHilbertId2D(n, d)","chunkCoords2D(x, y, chunkSize)","chunkId2D(x, y, chunkSize)","chunkCoords3D(x, y, z, chunkSize)","chunkId3D(x, y, z, chunkSize)","neighbors2D(x, y, { diagonal = false } = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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\". Functions 2D Morton/Z order spatial id (16 bits per axis). Inverse of spatialId2D → [x, y]. 3D Morton spatial id (10 bits per axis). Inverse of spatialId3D → [x, y, z]. Hilbert distance for (x,y) on a 2^k grid of side . Inverse of hilbertId2D → [x, y]. World coords → chunk coords for a square chunk grid. Stable chunk id (Morton of chunk coords) for GPU buffer packing + cache locality. Spatial ids of a cell's neighbors (non negative coords only). Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f584fed0320012801441758103e5d07a6f69541d45de8b732edbb0faeb5108f2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/time/Fencing.md::0000","path":"engine/reference/state/time/Fencing.md","title":"state/time/Fencing.js","description":"","kind":"reference","source":"engine/state/time/Fencing.js","updated":"","headings":["state/time/Fencing.js","Classes","class FencingDomain","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Issue the next strictly increasing fencing token. The highest token accepted by the protected resource so far. Validate a token against the protected resource WITHOUT accepting it. Accept a token (called only after a successful commit). Monotonic. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ddb336c242f468ce4f5cb31b21b74ae80572970abfcbeb19aec7f3d0cd038f0b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/time/SimulationClock.md::0000","path":"engine/reference/state/time/SimulationClock.md","title":"state/time/SimulationClock.js","description":"","kind":"reference","source":"engine/state/time/SimulationClock.js","updated":"","headings":["state/time/SimulationClock.js","Classes","class SimulationClock","class SimulationClockSet","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Advance the clock by steps (deterministic). Returns the new tick. 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. Method Signature Summary Create or fetch a clock for a domain. Snapshot of every clock's current tick — clocks may differ; that's expected. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ee10c699848aa4966dc45b176b5b9f4439034281c98bdd7e52c413d234a22444"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/time/TimeModel.md::0000","path":"engine/reference/state/time/TimeModel.md","title":"state/time/TimeModel.js","description":"","kind":"reference","source":"engine/state/time/TimeModel.js","updated":"","headings":["state/time/TimeModel.js","Functions","createTimeSource(mode = TIMEMODES.NONE)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a time source. advances per mode and returns the new value; the engine never does 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 Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d1659f59fa5257a15e8fce2083ad92a6ef9e8a5f06a7d7f942769d2e262f9ea0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/transaction/CommitCoordinator.md::0000","path":"engine/reference/state/transaction/CommitCoordinator.md","title":"state/transaction/CommitCoordinator.js","description":"","kind":"reference","source":"engine/state/transaction/CommitCoordinator.js","updated":"","headings":["state/transaction/CommitCoordinator.js","Functions","createCommitCoordinator(cfg = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a commit coordinator bound to a set of canonical registries. Parameters: (object) — No description in source JSDoc. (import('../uso/USORegistry.js').USORegistry) — No description in source JSDoc. (import('./Idempotency.js').IdempotencyRegistry) — No description in source JSDoc. (import('../causal/CausalParents.js').CausalGraph) — No description in source JSDoc. (import('../authority/CapabilityRegistry.js').CapabilityRegistry) — No description in source JSDoc. (import('../entity/EntityRegistry.js').EntityRegistry) — No description in source JSDoc. (import('../time/Fencing.js').FencingDomain) — No description in source JSDoc. (import('../integrity/EventLog.js').EventLog) — No description in source JSDoc. (Object<string,(ctx:object)= boolean ) — named predicates (Array) — commit strength constraints over live facts ((env:object)= Promise<boolean ) — authority signature check (string) — authority label embedded in receipts (string) — No description in source JSDoc. (string) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples No hand","contentHash":"4bc5571cd262002d206b645eef3c9dd90427ad105125a6022aa444f09699f509"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/transaction/CommitCoordinator.md::0001","path":"engine/reference/state/transaction/CommitCoordinator.md","title":"state/transaction/CommitCoordinator.js","description":"","kind":"reference","source":"engine/state/transaction/CommitCoordinator.js","updated":"","headings":["state/transaction/CommitCoordinator.js","Functions","createCommitCoordinator(cfg = {})","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"label embedded in receipts (string) — No description in source JSDoc. (string) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"209d818e9910987488a52bda545e98216224179ff633ef25dcf2276e5bc11261"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/transaction/Idempotency.md::0000","path":"engine/reference/state/transaction/Idempotency.md","title":"state/transaction/Idempotency.js","description":"","kind":"reference","source":"engine/state/transaction/Idempotency.js","updated":"","headings":["state/transaction/Idempotency.js","Classes","class IdempotencyRegistry","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: state/transaction/Idempotency.js — replay protection (spec rule 21). Every potentially duplicated operation carries an idempotency key ( ). 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. Classes Method Signature Summary Has this idempotency key already been committed? Recorded result for a key, or null. Record the first result for a key. No op (returns existing) if already set. Default registries retain that replay indefinitely; explicitly bounded registries guarantee it only inside their configured replay window. Remove every expired settled receipt and return the number removed. Content free cache diagnostics. Keys and receipts are never projected. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"653c803e91a0fd1fbcd1eb141c07389911ca6ef2b83946963b37fd80128e1c5e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/transaction/ProposalPool.md::0000","path":"engine/reference/state/transaction/ProposalPool.md","title":"state/transaction/ProposalPool.js","description":"","kind":"reference","source":"engine/state/transaction/ProposalPool.js","updated":"","headings":["state/transaction/ProposalPool.js","Classes","class ProposalPool","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 so they re observe and re plan (rule 28). The pool decides only candidacy; the commit gate still establishes truth. Classes Method Signature Summary Submit a proposal envelope (must carry transactionID + consumeSet). Pending proposals grouped by each exclusive input they contend for. Resolve contention: for every contended input, choose one winner by the priority order and mark the rest superseded. A proposal wins only if it wins EVERY input it touches (so it can actually commit atomically). Returns the winners that are clear to hand to the CommitCoordinator. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3863640c9af7b13673ca1f48b5ed4b2d4f315bdc5006245743217ac432c91b6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/transaction/Transaction.md::0000","path":"engine/reference/state/transaction/Transaction.md","title":"state/transaction/Transaction.js","description":"","kind":"reference","source":"engine/state/transaction/Transaction.js","updated":"","headings":["state/transaction/Transaction.js","Functions","makeTransaction(spec = {})","transactionBody(env)","sealTransactionFast(env)","async sealTransaction(env, signer = null)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Build a canonical transaction envelope. Missing fields default to safe empty values so the shape is always complete (no partial transactions). Parameters: (object) — No description in source JSDoc. (string) — principal proposing the change (string) — (deduplication) (string[]) — ids this tx causally depends on (string[]) — named predicates that must hold (string[]) — USO ids consumed (each at most once) (string[]) — USO/version ids created (Array) — CRDT merge ops (Phase 4) (string[]) — capability ids authorizing the change (Array) — outbox intents (Phase 3) (string) — No description in source JSDoc. (string) — No description in source JSDoc. (number) — proposal expiry (operational time) (string) — No description in source JSDoc. Returns: a frozen envelope WITHOUT id/signature (see sealTransaction) Canonical bytes of an envelope EXCLUDING id + signature (the signed body). Attach a synchronous (fast) transactionID. Use for runtime/non critical transactions where a 32 bit identity is enough. Returns: frozen","contentHash":"1a9f738214d066bd8c99f6be8d5d86c91f92666b03021161ed3a387954a25904"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/transaction/Transaction.md::0001","path":"engine/reference/state/transaction/Transaction.md","title":"state/transaction/Transaction.js","description":"","kind":"reference","source":"engine/state/transaction/Transaction.js","updated":"","headings":["state/transaction/Transaction.js","Functions","makeTransaction(spec = {})","transactionBody(env)","sealTransactionFast(env)","async sealTransaction(env, signer = null)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"(the signed body). Attach a synchronous (fast) transactionID. Use for runtime/non critical transactions where a 32 bit identity is enough. Returns: frozen envelope with Attach a secure (SHA 256) transactionID and an optional signature produced by an authority signer. The signature covers the transactionID. Parameters: (object) — No description in source JSDoc. Returns: frozen sealed envelope Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"78bbb125512ba419a6fd5de5ad1935d1b32fb8eb1cc944f88c00044199974ada"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/uso/USO.md::0000","path":"engine/reference/state/uso/USO.md","title":"state/uso/USO.js","description":"","kind":"reference","source":"engine/state/uso/USO.js","updated":"","headings":["state/uso/USO.js","Functions","makeUSO(spec = {})","objectVersionOutput(entity, versionId, payload = null)","isUSO(v)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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. Parameters: (object) — No description in source JSDoc. (string) — one of USO KIND (string) — logical entity this output belongs to (string number) — version / serial / denomination ( ) — opaque domain data (quantity, owner, etc.) Returns: frozen USO with a stable Convenience: an object version output (the common mutable object case). True if a value looks like a USO (has a string id and a kind). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a9d57a4756c39c1f386114bf760b0cc237645fb933865f54128900188ae8ac69"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/uso/USORegistry.md::0000","path":"engine/reference/state/uso/USORegistry.md","title":"state/uso/USORegistry.js","description":"","kind":"reference","source":"engine/state/uso/USORegistry.js","updated":"","headings":["state/uso/USORegistry.js","Classes","class USORegistry","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Number of currently unspent outputs. Register a freshly created output as unspent. Throws on id reuse. True if the output id is currently unspent (available to consume). True if the output id has already been consumed. Get an unspent output by id, or null. Double commit detector: validate that EVERY id in is currently unspent and that there are no duplicate ids in the request itself. Returns the conflict reason instead of throwing so the coordinator can emit a witness either way. Atomically consume inputs and create outputs. Validates spendability first; if any input is unspendable, NOTHING changes. Returns the result so the coordinator can record a witness. Snapshot the unspent output id set (for state roots / debugging). <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2fe48533d408cc4e0e9e580d48c14a47377f5882800517a8ddf6dc194b71bf24"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/util/canonical.md::0000","path":"engine/reference/state/util/canonical.md","title":"state/util/canonical.js","description":"","kind":"reference","source":"engine/state/util/canonical.js","updated":"","headings":["state/util/canonical.js","Functions","canonicalize(value)","canonicalBytes(value, { domain = DOMAINSEPARATOR, schemaVersion = '' } = {})","hashIdFast(value, opts = {})","async hashIdSecure(value, opts = {})","parseHashId(id)","hashIdEquals(a, b)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ( ) 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. Functions Produce a deterministic canonical JSON string for any JSON compatible value. Object keys are sorted; Maps and Sets are normalized; arrays preserve order. Parameters: ( ) — No description in source JSDoc. Domain separated canonical bytes string used as hash/sign input (spec §13). 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). Returns: 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). Returns: Parse a tagged hash id into or null. True when two tagged hash ids are byte equal (same algorithm + digest). Constants — Domain separator prefix so hashes of different structures never collide. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes","contentHash":"a932148465191cfc2d6ecac21a8493a591c3bc8237d3790a7a7fa54bb9171531"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/util/canonical.md::0001","path":"engine/reference/state/util/canonical.md","title":"state/util/canonical.js","description":"","kind":"reference","source":"engine/state/util/canonical.js","updated":"","headings":["state/util/canonical.js","Functions","canonicalize(value)","canonicalBytes(value, { domain = DOMAINSEPARATOR, schemaVersion = '' } = {})","hashIdFast(value, opts = {})","async hashIdSecure(value, opts = {})","parseHashId(id)","hashIdEquals(a, b)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Constants — Domain separator prefix so hashes of different structures never collide. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a9a701770fda2113715a6703afb95d97817d9b29c0bb894924a80d4ce4cf2758"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/util/hashing.md::0000","path":"engine/reference/state/util/hashing.md","title":"state/util/hashing.js","description":"","kind":"reference","source":"engine/state/util/hashing.js","updated":"","headings":["state/util/hashing.js","Functions","hashFactString(value)","hashU32Sequence(values)","canonicalSetHash(facts)","hexId(value)","hashIdTailUint32(hashId, fallback = 0)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Functions Deterministic 32 bit hash of a single string fact. Deterministic 32 bit hash of an ordered sequence of uint32 (e.g. a packed pattern). 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 sequence free. Parameters: (Iterable<string ) — No description in source JSDoc. Returns: unsigned 32 bit state id Stable hex fingerprint for an unsigned 32 bit value (cold path display/keys). Parse a tagged hash id's low 32 bit hex tail for deterministic bucketing/seeding. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2a3bd48deb65d9898876a385fbc0de5f9d0829c572d4c6fb4cef46c755bb8279"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/verify/ModelCheck.md::0000","path":"engine/reference/state/verify/ModelCheck.md","title":"state/verify/ModelCheck.js","description":"","kind":"reference","source":"engine/state/verify/ModelCheck.js","updated":"","headings":["state/verify/ModelCheck.js","Functions","exploreCommitMachine(cfg = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Exhaustively explore the commit state machine. Parameters: (object) — No description in source JSDoc. (string[]) — ids initially unspent (string[]) — transaction ids (Object<string,string[] ) — inputs each tx consumes (Object<string,string[] ) — outputs each tx creates (number) — safety cap on explored states Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5aefd2836ebf197965f2ff818e1c1d52dba3a88a31eedcb188916c0049234ab0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/version.md::0000","path":"engine/reference/state/version.md","title":"state/version.js","description":"","kind":"reference","source":"engine/state/version.js","updated":"","headings":["state/version.js","Functions","urcVersionStamp()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================ 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\". ============================================================ Functions Version stamp embedded on every State/CodeEntry/Receipt for migration + audit. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f804a7fe71952df9feeeaf8147203e20dca883bea8e860fae1556e4ac5210abd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/witness/Witness.md::0000","path":"engine/reference/state/witness/Witness.md","title":"state/witness/Witness.js","description":"","kind":"reference","source":"engine/state/witness/Witness.js","updated":"","headings":["state/witness/Witness.js","Functions","makeWitness(w = {})","makeReceipt(r = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Parameters: (object) — No description in source JSDoc. (string[]) — No description in source JSDoc. (string[]) — No description in source JSDoc. (string[]) — No description in source JSDoc. ( ) — No description in source JSDoc. (string null) — No description in source JSDoc. (Array<number string ) — No description in source JSDoc. 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). Parameters: (object) — No description in source JSDoc. ('committed' 'rejected') — No description in source JSDoc. (string) — No description in source JSDoc. (string) — authority that decided (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string[]) — USO ids consumed (string[]) — USO ids created (string[]) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string[]) — No description in source JSDoc. (string[]) — No description in source JSDoc. (string) — reason when decision === 'rejected' (Array) — No description in source JSDoc. (string null) — authority signature over the receipt id <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API","contentHash":"9abca013e13db11019027fb1198a6d58146fb7b2b90c562270d9cae5521f1aa5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/witness/Witness.md::0001","path":"engine/reference/state/witness/Witness.md","title":"state/witness/Witness.js","description":"","kind":"reference","source":"engine/state/witness/Witness.js","updated":"","headings":["state/witness/Witness.js","Functions","makeWitness(w = {})","makeReceipt(r = {})","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"null) — authority signature over the receipt id <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fd63ad667764e194d8b883e3a93b18e1369d8369d111fee7cab3032895138c4c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/workflow/Inbox.md::0000","path":"engine/reference/state/workflow/Inbox.md","title":"state/workflow/Inbox.js","description":"","kind":"reference","source":"engine/state/workflow/Inbox.js","updated":"","headings":["state/workflow/Inbox.js","Classes","class Inbox","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Has this effect id already been processed? Stored result for an effect id, or null. Receive an effect exactly once. On first sight, runs and stores its result; on redelivery, returns the stored result without re running the handler. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d59e5f81b63f6822e1ae857119630d4eb5c2abc9d6424a5f3507e002b79f20de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/workflow/Outbox.md::0000","path":"engine/reference/state/workflow/Outbox.md","title":"state/workflow/Outbox.js","description":"","kind":"reference","source":"engine/state/workflow/Outbox.js","updated":"","headings":["state/workflow/Outbox.js","Classes","class Outbox","Functions","makeEffectIntent(spec = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Record an intent (called atomically with the commit). Idempotent: an effect id already present is returned unchanged, so commit retries never duplicate the effect (rule 41/42). All entries currently awaiting delivery (pending or previously failed/retry). Entries needing manual/automated reconciliation (ambiguous outcomes). Status for an effect id, or null. Drain pending intents through a delivery function. The deliver fn returns on success, throws or returns on failure, or when the outcome is unknown (→ RECONCILE, never guessed, rule 43). Effects requiring approval are skipped until approved. Mark an effect acknowledged by the receiver (idempotent inbox confirmed). Functions 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","contentHash":"a00b5571fd14dcb217e435f2a0d2560901e3c97c7d4856c0baf43454eb29b356"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/workflow/Outbox.md::0001","path":"engine/reference/state/workflow/Outbox.md","title":"state/workflow/Outbox.js","description":"","kind":"reference","source":"engine/state/workflow/Outbox.js","updated":"","headings":["state/workflow/Outbox.js","Classes","class Outbox","Functions","makeEffectIntent(spec = {})","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"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). Parameters: (object) — No description in source JSDoc. (string) — e.g. 'email.send', 'file.write', 'tool.call' ( ) — opaque delivery data (string) — named reconciliation procedure (string) — stable effect id (auto derived if omitted) Returns: frozen intent with a stable Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f7299e6890c28534e9a2d864244742a0539f839afcb2501d9af8ff06bb93bbd0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/workflow/Reconciler.md::0000","path":"engine/reference/state/workflow/Reconciler.md","title":"state/workflow/Reconciler.js","description":"","kind":"reference","source":"engine/state/workflow/Reconciler.js","updated":"","headings":["state/workflow/Reconciler.js","Classes","class Reconciler","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Reconcile every effect currently parked in RECONCILE. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c22f172e0b10347d47dd6e03245e59ba0df1f579a58b966e23a06e3172e47610"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/workflow/Saga.md::0000","path":"engine/reference/state/workflow/Saga.md","title":"state/workflow/Saga.js","description":"","kind":"reference","source":"engine/state/workflow/Saga.js","updated":"","headings":["state/workflow/Saga.js","Classes","class Saga","Functions","sagaStep(s)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Run the saga. Returns a structured outcome; never throws for ordinary step failures (callers inspect ). Throws only on programmer error. Behavior: all forward steps succeed → COMPLETED. a step fails BEFORE the pivot → compensate completed steps in reverse → COMPENSATED. a step fails AT/AFTER the pivot → forward only; no rollback → FAILED PIVOTED (must be reconciled, not silently undone). Compensate completed steps in reverse order; returns names compensated. Functions Define a saga step. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. ((ctx:object)= Promise< ) — forward action ((ctx:object, fwd: )= Promise< ) — undo action (boolean) — true → after this step, no rollback is possible Returns: frozen step Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"52a403e7612ba15727d4176637747458a67036f5b10eb07051d64503a5d20186"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/worldmodel/AffordanceRegistry.md::0000","path":"engine/reference/state/worldmodel/AffordanceRegistry.md","title":"state/worldmodel/AffordanceRegistry.js","description":"","kind":"reference","source":"engine/state/worldmodel/AffordanceRegistry.js","updated":"","headings":["state/worldmodel/AffordanceRegistry.js","Classes","class AffordanceRegistry","Functions","makeAffordance(a = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Classes Method Signature Summary Functions Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string[]) — named predicates that must hold (string) — No description in source JSDoc. (object) — No description in source JSDoc. (string) — one of RISK (string) — rollback / compensation hint (boolean) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"49db3e63777cc5e124fcb7f3fa276d600b5ff135d0cf7ccd85f06e8413fc4a29"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/worldmodel/BeliefStore.md::0000","path":"engine/reference/state/worldmodel/BeliefStore.md","title":"state/worldmodel/BeliefStore.js","description":"","kind":"reference","source":"engine/state/worldmodel/BeliefStore.js","updated":"","headings":["state/worldmodel/BeliefStore.js","Classes","class BeliefStore","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 , 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. Classes Method Signature Summary Read a belief record from a layer, or null. Current canonical value mirror (read only here). Mirror an already committed value into the canonical world. This is the ONLY path to CANONICAL and is meant to be called by the commit layer after a witnessed commit — never by inference or prediction. Record a direct observation (high confidence, resets/raises certainty). Record an inference (belief), optionally derived from other subjects. Record a model prediction at a given horizon. Confidence decays with the horizon (rule 48): further out predictions are less certain. Stage a proposed value (a commit candidate) — still NOT canonical. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d328962daf5871888f441f9dab3794f6e450e536cf73daaff30fdaa13310ea5b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/worldmodel/CausalDynamics.md::0000","path":"engine/reference/state/worldmodel/CausalDynamics.md","title":"state/worldmodel/CausalDynamics.js","description":"","kind":"reference","source":"engine/state/worldmodel/CausalDynamics.js","updated":"","headings":["state/worldmodel/CausalDynamics.js","Classes","class CausalDynamics","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 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. Classes Method Signature Summary Declare the dynamics of an action. Predict the next state under an action. Never mutates (clones first) and never invents dynamics for an unknown action. Calibrate an action's confidence from an observed discrepancy in [0,1] (0 = perfect prediction). Confidence is the running mean accuracy. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"af98e172ec6da42d96df1f34fcba55dcde79998a05ac66194947a3e1f91db329"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/worldmodel/ObjectGraph.md::0000","path":"engine/reference/state/worldmodel/ObjectGraph.md","title":"state/worldmodel/ObjectGraph.js","description":"","kind":"reference","source":"engine/state/worldmodel/ObjectGraph.js","updated":"","headings":["state/worldmodel/ObjectGraph.js","Classes","class ObjectGraph","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ?\") which the planner uses without ever asserting canonical truth. Classes Method Signature Summary Add or update an object by its stable logical id. Add a directed relation . Direct neighbors of over a relation. All relations involving as the source: { rel: [to,...] }. Is reachable from following edges (transitively)? BFS over the relation; cycle safe. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cf63f134ec0918507ff43464a60da836e6d03dd4927d78535e6a055ce27ea5e0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/worldmodel/PredictionSandbox.md::0000","path":"engine/reference/state/worldmodel/PredictionSandbox.md","title":"state/worldmodel/PredictionSandbox.js","description":"","kind":"reference","source":"engine/state/worldmodel/PredictionSandbox.js","updated":"","headings":["state/worldmodel/PredictionSandbox.js","Classes","class PredictionSandbox","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ( , ) — 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. Classes Method Signature Summary Explore futures from by applying up to the horizon. Never mutates . Returns prediction branches; confidence decays with depth (rule 48). Stops when the node budget is exhausted (rule 18). Pick the best predicted branch by risk adjusted value (score × confidence). The winner is a PROPOSAL, not truth — committing it requires the commit gate. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c2a411c3679a70e533a931265ca378585a85417f84c677ff24ba92af53083237"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/worldmodel/ToolEffectModel.md::0000","path":"engine/reference/state/worldmodel/ToolEffectModel.md","title":"state/worldmodel/ToolEffectModel.js","description":"","kind":"reference","source":"engine/state/worldmodel/ToolEffectModel.js","updated":"","headings":["state/worldmodel/ToolEffectModel.js","Classes","class ToolEffectModel","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Declare the expected effects of invoking a tool (before acting). Observe the actual effects after acting. Compares against the last declared expectation, updates calibration, and returns the discrepancy in [0,1]. Re observation (rule 49) — never assume the action did what was predicted. Calibration summary for a tool: trials, average error, last error. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"606710074c5b60638dd02dab89e040e0ccc85affd3b02a5f52a5f0047882dca7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/worldmodel/UntrustedBoundary.md::0000","path":"engine/reference/state/worldmodel/UntrustedBoundary.md","title":"state/worldmodel/UntrustedBoundary.js","description":"","kind":"reference","source":"engine/state/worldmodel/UntrustedBoundary.js","updated":"","headings":["state/worldmodel/UntrustedBoundary.js","Classes","class UntrustedBoundary","Functions","ingestUntrusted(content, meta = {})","canAuthorize(record)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Wrap and retain a piece of untrusted content; returns the observation. Attempt to derive a capability from untrusted content. This ALWAYS refuses — models/agents cannot mint their own authority (rule 33). Encoded as a method so the refusal is explicit and testable, not merely an absent feature. Convert untrusted content into a belief layer observation for the world model. It enters as an uncertain OBSERVATION the planner may reason about — never as policy or canonical state. Functions Ingest external/tool/model content as an untrusted observation. The returned record is explicitly non authoritative and carries untrusted provenance. Parameters: (string) — No description in source JSDoc. (object) — @param {string} [meta.source] @param {number} [meta.freshnessEpoch] Returns: frozen","contentHash":"a4cc1f23757ed443a65955d6fea651ff6ab3f39be051d71fd6681e60197685a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/state/worldmodel/UntrustedBoundary.md::0001","path":"engine/reference/state/worldmodel/UntrustedBoundary.md","title":"state/worldmodel/UntrustedBoundary.js","description":"","kind":"reference","source":"engine/state/worldmodel/UntrustedBoundary.js","updated":"","headings":["state/worldmodel/UntrustedBoundary.js","Classes","class UntrustedBoundary","Functions","ingestUntrusted(content, meta = {})","canAuthorize(record)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"Parameters: (string) — No description in source JSDoc. (object) — @param {string} [meta.source] @param {number} [meta.freshnessEpoch] Returns: frozen untrusted observation record True only for records that may carry authority. Untrusted records: always false. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c872d3f5c5265e88d0e989440237b62dcb74ec21213b502113f52d6fcebbfb88"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/CanvasSurface.md::0000","path":"engine/reference/surfaces/CanvasSurface.md","title":"surfaces/CanvasSurface.js","description":"","kind":"reference","source":"engine/surfaces/CanvasSurface.js","updated":"","headings":["surfaces/CanvasSurface.js","Functions","make2DCanvas(width, height)","createCanvasSurface(opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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: , optional , , , , , . Functions Allocate a 2D canvas (OffscreenCanvas when available, else a DOM canvas). A generic canvas source. Parameters: (object) — { width, height, draw(ctx,info), onPointer, onKey, realtime } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a57752ced1dc7b8b57216c621adac8af74e9d28bf75b155e672ff0ef052936f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/CodeSurface.md::0000","path":"engine/reference/surfaces/CodeSurface.md","title":"surfaces/CodeSurface.js","description":"","kind":"reference","source":"engine/surfaces/CodeSurface.js","updated":"","headings":["surfaces/CodeSurface.js","Functions","createCodeSurface(opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Parameters: (object) — { width, height, text, fontSize, editable } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0c3906e3d0ff94a3b9c4d0540364845e28c442884d35dbc21e054489df26925b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/MediaSurface.md::0000","path":"engine/reference/surfaces/MediaSurface.md","title":"surfaces/MediaSurface.js","description":"","kind":"reference","source":"engine/surfaces/MediaSurface.js","updated":"","headings":["surfaces/MediaSurface.js","Functions","createImageSurface(opts = {})","createVideoSurface(opts = {})","async createCameraSurface(opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Wrap an ImageBitmap, image element, canvas, or URL as a static pixel source. URL created images default to anonymous CORS and expose a promise. Wrap an HTMLVideoElement or create one from a URL/MediaStream. 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"49ba3063ffaf3506c07705d61ae035ef9e179a10b501bbda89cbf016109d5333"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/RenderSurface.md::0000","path":"engine/reference/surfaces/RenderSurface.md","title":"surfaces/RenderSurface.js","description":"","kind":"reference","source":"engine/surfaces/RenderSurface.js","updated":"","headings":["surfaces/RenderSurface.js","Functions","createRenderSurface(init = {})","markSurfaceDirty(surface)","resizeSurface(surface, width, height)","surfaceNeedsUpload(surface, nowMs)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Create a RenderSurface descriptor. Parameters: (object) — No description in source JSDoc. Returns: surface Flag a surface as needing a GPU re upload. Resize a surface (also resizes its source canvas) and flag it dirty. Decide whether a surface should upload to the GPU this tick. Pure (no side effects) so it is unit testable; SurfaceManager applies the result. Parameters: (object) — No description in source JSDoc. (number) — No description in source JSDoc. Constants — What feeds a surface's pixels. — Update cadence. only re uploads when the source flags a change; re uploads at most every intervalMs; every frame the surface is visible. uploads once. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2f54149067e8d881abaf5ab9bf4ddf072b7d4c97d8187ac45059c02f1e0e2649"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/RenderSurfaceMaterial.md::0000","path":"engine/reference/surfaces/RenderSurfaceMaterial.md","title":"surfaces/RenderSurfaceMaterial.js","description":"","kind":"reference","source":"engine/surfaces/RenderSurfaceMaterial.js","updated":"","headings":["surfaces/RenderSurfaceMaterial.js","Functions","createSurfaceMaterial(surface, opts = {})","surfaceTextureResource(surface)","materialSurfaceBinding(material)","surfaceIdFromTextureId(textureId)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions 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. Parameters: (object) — RenderSurface (object) — { slot, space, unlit, emissiveStrength, name } Returns: EngineMaterial (with a binding block) Live GPU resource for a surface, for inserting into a bind group. Returns: null} null until first upload Is this material backed by a render surface? Returns its binding block or null. Map a virtual surface texture id ( ) back to the surface id. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a41cb94d76eb4afc905f093703e78de9bfc5d8e7e96d33f048c549448bcbe8ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/SurfaceInputMapper.md::0000","path":"engine/reference/surfaces/SurfaceInputMapper.md","title":"surfaces/SurfaceInputMapper.js","description":"","kind":"reference","source":"engine/surfaces/SurfaceInputMapper.js","updated":"","headings":["surfaces/SurfaceInputMapper.js","Functions","uvToPixel(surface, u, v)","createSurfaceInputMapper(opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 is true receive events — surfaces are inert by default. Functions Convert a UV hit (with v measured top down) to integer surface pixels. Create an input mapper over a set of surfaces (or a SurfaceManager). Parameters: (object) — { getSurface(id), surfaces:Map Array } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c51dfe3979ebe41ed7c11d019ff45bc33aa5aacc01c3e0d40b7c62063ccef898"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/SurfaceManager.md::0000","path":"engine/reference/surfaces/SurfaceManager.md","title":"surfaces/SurfaceManager.js","description":"","kind":"reference","source":"engine/surfaces/SurfaceManager.js","updated":"","headings":["surfaces/SurfaceManager.js","Functions","surfaceImageSource(surface)","surfaceImageReady(surface)","createSurfaceManager(device, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 , so the scheduling logic is testable headless (gates) without a WebGPU device. Functions The uploadable image source backing a surface (canvas / img / video). True when an external image source has decoded enough pixels to copy. Create a surface manager. Parameters: (GPUDevice null) — WebGPU device (may be null for headless tests if an uploader is supplied) (object) — { uploader?, sampler? } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b746162ba15e9e3f182713e70fe74fcdedcb3f2d0d78174e73d489f59a755080"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/TerminalSurface.md::0000","path":"engine/reference/surfaces/TerminalSurface.md","title":"surfaces/TerminalSurface.js","description":"","kind":"reference","source":"engine/surfaces/TerminalSurface.js","updated":"","headings":["surfaces/TerminalSurface.js","Functions","createTerminalSurface(opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 . Safe by design: it only renders its OWN buffer — there is no shell, no eval, nothing external (the host wires whatever onCommand does). Functions Parameters: (object) — { width, height, fontSize, prompt, banner, maxLines, onCommand } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"48c9f650698d9e74e6455716a8b06de21adfc60d989d68f6c79636a8408a2afd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/WebGPUSurface.md::0000","path":"engine/reference/surfaces/WebGPUSurface.md","title":"surfaces/WebGPUSurface.js","description":"","kind":"reference","source":"engine/surfaces/WebGPUSurface.js","updated":"","headings":["surfaces/WebGPUSurface.js","Functions","createWebGPUSurface(opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 ; 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. Functions Parameters: (object) — { width, height, texture?, view? } Returns: an external surface source <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b4082187e2745ea02104e45518bc92de39300c303d6a07c203a73cc47fe22155"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/surfaces/index.md::0000","path":"engine/reference/surfaces/index.md","title":"surfaces/index.js","description":"","kind":"reference","source":"engine/surfaces/index.js","updated":"","headings":["surfaces/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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). Re exports , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b8fb189ff6d278e4f86188d0db8b959a325eca629c5ca0264e76aedf85431238"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/IntegrationTests.md::0000","path":"engine/reference/tools/IntegrationTests.md","title":"tools/IntegrationTests.js","description":"","kind":"reference","source":"engine/tools/IntegrationTests.js","updated":"","headings":["tools/IntegrationTests.js","Classes","class TestResult","class TestSuite","class TestRunner","Functions","createVehicleMountingTests()","createMultiplayerSyncTests()","createMemoryLeakTests()","createFrameBudgetTests()","createCrossSystemTests()","async runIntegrationTests()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Test result Method Signature Summary Test suite for organizing tests Method Signature Summary Method Signature Summary Functions Constants — Test result status <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"90b348e8cfc7a5c627aa2535affe565154568f1d564f8434d95d4940f0547f40"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/aiming/GlobalAim.md::0000","path":"engine/reference/tools/aiming/GlobalAim.md","title":"tools/aiming/GlobalAim.js","description":"","kind":"reference","source":"engine/tools/aiming/GlobalAim.js","updated":"","headings":["tools/aiming/GlobalAim.js","Functions","getEntityWorldPosition(ecsWorld, entityId, heightOffset = 0)","computeAimBetweenEntities(ecsWorld, sourceEntityId, targetEntityId, options = {},)","computeAimFromEntityToPoint(ecsWorld, sourceEntityId, worldPoint, options = {},)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get an entity's world position with an optional vertical offset. Returns null if the entity or Transform is missing. Compute an aim line from one entity to another. Returns { origin, target, direction, distance } or null if invalid. Compute an aim line from an entity to an arbitrary world space point. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fa1c7c7f5e3cc9224190540bd72c53f619dcf3c1a2e368462c25d8f4bf100ee8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/animation/FBXAscii.md::0000","path":"engine/reference/tools/animation/FBXAscii.md","title":"tools/animation/FBXAscii.js","description":"","kind":"reference","source":"engine/tools/animation/FBXAscii.js","updated":"","headings":["tools/animation/FBXAscii.js","Functions","parseFBXAscii(text)","buildMixamoSkeletonFromFBX(fbx, opts = {})","sampleMixamoFBXAnimationClip(fbx, skeleton, opts = {})","findSkeletonJointIndexByName(skeleton, jointName)","computeClipLocalMatricesAtFrame(clip, skeleton, frameIndex, out = null)","computeClipGlobalMatricesAtFrame(clip, skeleton, frameIndex, out = null)","extractRootTranslationTrack(clip, skeleton, opts = {})","extractRootMotion(clip, skeleton, opts = {})","buildTeacherJointPositionDataset(clip, skeleton, opts = {})","loadMixamoFBXAscii(text, opts = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/camera/CameraController.md::0000","path":"engine/reference/tools/camera/CameraController.md","title":"tools/camera/CameraController.js","description":"","kind":"reference","source":"engine/tools/camera/CameraController.js","updated":"","headings":["tools/camera/CameraController.js","Functions","cameraEntityBoundsReport(subjects)","cameraCollisionOptionsReport(options = {})","cameraFocusReport(camera, target, options = {})","cameraEntityFocusReport(camera, subjects, options = {})","focusThirdPersonCamera(camera, target, options = {})","focusThirdPersonCameraOnEntities(camera, subjects, options = {})","cameraFocusTransitionReport(camera, deltaSeconds, options = {})","cameraControllerStepReport(camera, input, options)","stepCamera(camera, input, options = {})","cameraControllerEntityReport(camera, cameraEntityId)","syncCameraToEcs(camera, ecsWorld, cameraEntityId)","updateCameraFull(camera, input, options = {})","cameraModeSwitchReport(camera, mode, options = {})","switchCameraMode(camera, mode, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CameraController.js admitted state management around StandardCameraController. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ed2e32a443d78121a3163814bf374a7fea0e769b21f33e8c29f62430ef5da693"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/camera/StandardCameraController.md::0000","path":"engine/reference/tools/camera/StandardCameraController.md","title":"tools/camera/StandardCameraController.js","description":"","kind":"reference","source":"engine/tools/camera/StandardCameraController.js","updated":"","headings":["tools/camera/StandardCameraController.js","Functions","standardCameraKeysReport(keys = {})","standardCameraMovementResponseReport(currentAxes, targetAxes, options = {})","standardCameraZoomReport(distance, options = {})","standardCameraBoomReport(target, desiredEye, hit = null, options = {})","standardCameraMovementIntentReport(keys, yaw, distance, movementAxes = [0, 0, 0], responseOptions = {},)","standardCameraStateReport(state)","standardCameraSphereFitReport(radius, options = {})","standardCameraBoundsReport(bounds)","standardCameraBoundsFocusReport(bounds, options = {})","standardCameraFocusReport(state, target, options = {})","standardCameraFocusTransitionReport(transition, deltaSeconds)","standardCameraOptionsReport(options)","standardCameraUpdateReport(state, options)","updateStandardCamera(state, options)","getStandardCameraEyeBasis(state)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/console/HtmlConsole.md::0000","path":"engine/reference/tools/console/HtmlConsole.md","title":"tools/console/HtmlConsole.js","description":"","kind":"reference","source":"engine/tools/console/HtmlConsole.js","updated":"","headings":["tools/console/HtmlConsole.js","Functions","formatConsoleHookArguments(args, options = {})","createHtmlConsole(options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fc7608fabe61a356f54a2d0d083e89b656fd05e75237793c3a1df6835a274794"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/gizmos/RopeGizmo.md::0000","path":"engine/reference/tools/gizmos/RopeGizmo.md","title":"tools/gizmos/RopeGizmo.js","description":"","kind":"reference","source":"engine/tools/gizmos/RopeGizmo.js","updated":"","headings":["tools/gizmos/RopeGizmo.js","Classes","class RopeGizmo","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Update line geometry with proper catenary curve based on rope length Hit test against rope handles Find nearest entity to snap to Render the rope gizmo <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e0ec87bad1e8e1b9e591c7956f50330f8861d3df3c4d73ca9b2e03a9a939834c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/gizmos/TransformGizmo.md::0000","path":"engine/reference/tools/gizmos/TransformGizmo.md","title":"tools/gizmos/TransformGizmo.js","description":"","kind":"reference","source":"engine/tools/gizmos/TransformGizmo.js","updated":"","headings":["tools/gizmos/TransformGizmo.js","Classes","class TransformGizmo","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TransformGizmo Visual handles for manipulating entity transforms Now powered by vGPU driver Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"859bd7235e877490d4fb57d939c9dceec4372263ac9d5dbcaffe519d80898e94"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/gizmos/index.md::0000","path":"engine/reference/tools/gizmos/index.md","title":"tools/gizmos/index.js","description":"","kind":"reference","source":"engine/tools/gizmos/index.js","updated":"","headings":["tools/gizmos/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Gizmos Visual manipulation handles for editor and runtime Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"996c056f51e1c14f0854d2588dab67ae178fcec8eb9e7cb3cef245757a8a3eca"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/input/StandardInputController.md::0000","path":"engine/reference/tools/input/StandardInputController.md","title":"tools/input/StandardInputController.js","description":"","kind":"reference","source":"engine/tools/input/StandardInputController.js","updated":"","headings":["tools/input/StandardInputController.js","Functions","standardInputActionMapReport(actionMap, options = {})","standardInputActionStateReport(actionMap, pressedBindings)","rebindStandardInputAction(ctrl, action, bindings, options = {})","standardGamepadMovementReport(gamepad, options = {})","standardGamepadButtonReport(button, options = {})","standardInputWheelZoomReport(currentDelta, eventDelta)","standardGamepadHapticEffectReport(gamepad, options = {})","async playStandardGamepadHaptics(gamepad, options = {})","standardGamepadInputReport(gamepad, options = {})","pollInputGamepad(ctrl, gamepads = undefined)","createInputController(options = {})","attachInputListeners(ctrl, callbacks = {})","detachInputListeners(ctrl)","consumeMouseDelta(ctrl)","consumeZoomDelta(ctrl)","getKeys(ctrl)","getInputActions(ctrl)","getInputActionMap(ctrl)","getMovementAxes(ctrl)","getLastMousePosition(ctrl)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create an input controller state object. Attach input listeners to the controller. Returns a cleanup function to remove all listeners. Remove all input listeners. Reset mouse deltas after consuming them for camera update. Get current keyboard state. Get last mouse position. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"76e11d4a6917161195c3c91b8132b569cd5c50347962a3969ed56461e47923cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/EntitiesInspectorPanel.md::0000","path":"engine/reference/tools/inspector/EntitiesInspectorPanel.md","title":"tools/inspector/EntitiesInspectorPanel.js","description":"","kind":"reference","source":"engine/tools/inspector/EntitiesInspectorPanel.js","updated":"","headings":["tools/inspector/EntitiesInspectorPanel.js","Functions","initEntitiesInspectorPanel(doc, entitiesPanel, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/EntitiesInspectorPanel.old.md::0000","path":"engine/reference/tools/inspector/EntitiesInspectorPanel.old.md","title":"tools/inspector/EntitiesInspectorPanel.old.js","description":"","kind":"reference","source":"engine/tools/inspector/EntitiesInspectorPanel.old.js","updated":"","headings":["tools/inspector/EntitiesInspectorPanel.old.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c2a94e1bd61dce6d1c0ddfadb58c1e02ef2684230277d0eb7a9bb3cdc13e92bf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/EntityInspector.md::0000","path":"engine/reference/tools/inspector/EntityInspector.md","title":"tools/inspector/EntityInspector.js","description":"","kind":"reference","source":"engine/tools/inspector/EntityInspector.js","updated":"","headings":["tools/inspector/EntityInspector.js","Functions","createEntityInspectorModel(world, options = {})","setEntityComponentFromInspector(world, entityId, componentName, value)","removeEntityComponentFromInspector(world, entityId, componentName)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/InspectorConfigFactory.md::0000","path":"engine/reference/tools/inspector/InspectorConfigFactory.md","title":"tools/inspector/InspectorConfigFactory.js","description":"","kind":"reference","source":"engine/tools/inspector/InspectorConfigFactory.js","updated":"","headings":["tools/inspector/InspectorConfigFactory.js","Functions","createInspectorConfig(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a standard inspector configuration. Parameters: (Object) — Configuration options (Object) — ECS state { world, lightEntity, selectedEntityId, inspectorApi } (Object) — Spawn state { pendingPosition, basePosition, ghostOffset, pendingType } (Object) — Render state { shaderMode, enableDiffuse, enableBounce, etc. } (Object) — Physics state { enabled, gravityScale, staticFriction, etc. } (Object) — Particle state { instanceCount, emitters } (Array) — Array of spawned entity objects (Function) — Spawn function (Function) — Particle spawn function (Function) — Delete function (Object) — Optional UI elements { brightnessSlider, brightnessValue } (Function) — Optional logger Returns: Inspector configuration <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d3bd4ea4232c087fa69a3b90bcd478b49a04234247e9ff4c3844c91cdb57ee3c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/InspectorPanel.md::0000","path":"engine/reference/tools/inspector/InspectorPanel.md","title":"tools/inspector/InspectorPanel.js","description":"","kind":"reference","source":"engine/tools/inspector/InspectorPanel.js","updated":"","headings":["tools/inspector/InspectorPanel.js","Functions","attachInspectorPanel(options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/NavInspector.md::0000","path":"engine/reference/tools/inspector/NavInspector.md","title":"tools/inspector/NavInspector.js","description":"","kind":"reference","source":"engine/tools/inspector/NavInspector.js","updated":"","headings":["tools/inspector/NavInspector.js","Functions","createNavInspectorModel(world)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/PhysicsSandboxInspector.md::0000","path":"engine/reference/tools/inspector/PhysicsSandboxInspector.md","title":"tools/inspector/PhysicsSandboxInspector.js","description":"","kind":"reference","source":"engine/tools/inspector/PhysicsSandboxInspector.js","updated":"","headings":["tools/inspector/PhysicsSandboxInspector.js","Functions","attachPhysicsSandboxInspector(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/WorldInspector.md::0000","path":"engine/reference/tools/inspector/WorldInspector.md","title":"tools/inspector/WorldInspector.js","description":"","kind":"reference","source":"engine/tools/inspector/WorldInspector.js","updated":"","headings":["tools/inspector/WorldInspector.js","Functions","createWorldInspectorModel(world, options = {})","applyWorldInspectorModel(world, model)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/CameraComponentEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/CameraComponentEditor.md","title":"tools/inspector/entityEditors/CameraComponentEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/CameraComponentEditor.js","updated":"","headings":["tools/inspector/entityEditors/CameraComponentEditor.js","Functions","renderCameraComponentEditor(doc, container, state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/JsonComponentEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/JsonComponentEditor.md","title":"tools/inspector/entityEditors/JsonComponentEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/JsonComponentEditor.js","updated":"","headings":["tools/inspector/entityEditors/JsonComponentEditor.js","Functions","renderJsonComponentEditor(doc, container, editor, value)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/LightComponentEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/LightComponentEditor.md","title":"tools/inspector/entityEditors/LightComponentEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/LightComponentEditor.js","updated":"","headings":["tools/inspector/entityEditors/LightComponentEditor.js","Functions","renderLightComponentEditor(doc, container, state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/ModelAnimationEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/ModelAnimationEditor.md","title":"tools/inspector/entityEditors/ModelAnimationEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/ModelAnimationEditor.js","updated":"","headings":["tools/inspector/entityEditors/ModelAnimationEditor.js","Functions","async renderModelAnimationEditor(doc, container, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/ModelMorphEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/ModelMorphEditor.md","title":"tools/inspector/entityEditors/ModelMorphEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/ModelMorphEditor.js","updated":"","headings":["tools/inspector/entityEditors/ModelMorphEditor.js","Functions","async renderModelMorphEditor(doc, container, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/PhysicalMaterialComponentEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/PhysicalMaterialComponentEditor.md","title":"tools/inspector/entityEditors/PhysicalMaterialComponentEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/PhysicalMaterialComponentEditor.js","updated":"","headings":["tools/inspector/entityEditors/PhysicalMaterialComponentEditor.js","Functions","renderPhysicalMaterialComponentEditor(doc, container, state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a3d075bf175d7c67ebec8f5c24a3eeb13bc406887952a63bd23405df3e334752"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/PhysicsRopeComponentEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/PhysicsRopeComponentEditor.md","title":"tools/inspector/entityEditors/PhysicsRopeComponentEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/PhysicsRopeComponentEditor.js","updated":"","headings":["tools/inspector/entityEditors/PhysicsRopeComponentEditor.js","Functions","renderPhysicsRopeComponentEditor(doc, container, entitiesState)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Render the PhysicsRope component editor using shared schema <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9df3227561995cda7067527487a63921b50481490d08d7befe72d8fdb2c01d57"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/RenderableComponentEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/RenderableComponentEditor.md","title":"tools/inspector/entityEditors/RenderableComponentEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/RenderableComponentEditor.js","updated":"","headings":["tools/inspector/entityEditors/RenderableComponentEditor.js","Functions","renderRenderableComponentEditor(doc, container, state)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/entityEditors/TransformComponentEditor.md::0000","path":"engine/reference/tools/inspector/entityEditors/TransformComponentEditor.md","title":"tools/inspector/entityEditors/TransformComponentEditor.js","description":"","kind":"reference","source":"engine/tools/inspector/entityEditors/TransformComponentEditor.js","updated":"","headings":["tools/inspector/entityEditors/TransformComponentEditor.js","Functions","renderTransformComponentEditor(doc, container, state)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/EntitiesInspectorPanel.md::0000","path":"engine/reference/tools/inspector/panels/EntitiesInspectorPanel.md","title":"tools/inspector/panels/EntitiesInspectorPanel.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/EntitiesInspectorPanel.js","updated":"","headings":["tools/inspector/panels/EntitiesInspectorPanel.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c2a94e1bd61dce6d1c0ddfadb58c1e02ef2684230277d0eb7a9bb3cdc13e92bf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/InspectorStyles.md::0000","path":"engine/reference/tools/inspector/panels/InspectorStyles.md","title":"tools/inspector/panels/InspectorStyles.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/InspectorStyles.js","updated":"","headings":["tools/inspector/panels/InspectorStyles.js","Functions","injectInspectorStyles(doc = document)","applyPanelContainerStyles(container)","areStylesInjected()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Inject shared inspector styles into the document. Safe to call multiple times will only inject once. Parameters: (Document) — Document to inject styles into (default: document) Apply standard inspector panel container styles to a DOM element. Parameters: (HTMLElement) — Element to style Check if inspector styles have been injected <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0a7f756faa071b6339f54973e8e360a8016a9fac8aba03435e8711b9d76b0557"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/NavInspectorPanel.md::0000","path":"engine/reference/tools/inspector/panels/NavInspectorPanel.md","title":"tools/inspector/panels/NavInspectorPanel.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/NavInspectorPanel.js","updated":"","headings":["tools/inspector/panels/NavInspectorPanel.js","Functions","initNavInspectorPanel(doc, navPanel, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/SpawnerInspectorPanel.md::0000","path":"engine/reference/tools/inspector/panels/SpawnerInspectorPanel.md","title":"tools/inspector/panels/SpawnerInspectorPanel.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/SpawnerInspectorPanel.js","updated":"","headings":["tools/inspector/panels/SpawnerInspectorPanel.js","Functions","initSpawnerInspectorPanel(doc, spawnerPanel, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/SpellBookPanel.md::0000","path":"engine/reference/tools/inspector/panels/SpellBookPanel.md","title":"tools/inspector/panels/SpellBookPanel.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/SpellBookPanel.js","updated":"","headings":["tools/inspector/panels/SpellBookPanel.js","Functions","initSpellBookPanel(container, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Spell Book Inspector Panel Browse, manage, and organize saved spells. Integrates with SpellBook for persistence. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0d02fbe0e4ae55024e17dd37b33a017f85981e4e63e04f7d2d27add1fffb89cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/SpellBuilderPanel.md::0000","path":"engine/reference/tools/inspector/panels/SpellBuilderPanel.md","title":"tools/inspector/panels/SpellBuilderPanel.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/SpellBuilderPanel.js","updated":"","headings":["tools/inspector/panels/SpellBuilderPanel.js","Functions","initSpellBuilderPanel(container, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Spell Builder Inspector Panel Real time spell effect editor integrated with the engine inspector. Allows creating, customizing, and previewing particle based spells. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e5da96e7a256cb1f0d8a2d12f861264cfadfb20b824bd8fed0e3a656d04e3172"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/WorldInspectorPanel.md::0000","path":"engine/reference/tools/inspector/panels/WorldInspectorPanel.md","title":"tools/inspector/panels/WorldInspectorPanel.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/WorldInspectorPanel.js","updated":"","headings":["tools/inspector/panels/WorldInspectorPanel.js","Functions","initWorldInspectorPanel(doc, worldPanel, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/index.md::0000","path":"engine/reference/tools/inspector/panels/index.md","title":"tools/inspector/panels/index.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/index.js","updated":"","headings":["tools/inspector/panels/index.js","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"90fed887d35238597c08606f776b9fe75e8befc389c217c8efd42c37164eb9ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spawner/ElementLayers.md::0000","path":"engine/reference/tools/inspector/panels/spawner/ElementLayers.md","title":"tools/inspector/panels/spawner/ElementLayers.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spawner/ElementLayers.js","updated":"","headings":["tools/inspector/panels/spawner/ElementLayers.js","Functions","createElementLayers(doc, { elements, onChange })","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c33e2b48b05aee75ca6e8573bd7fb24436335fee87edfa8128263ef8e746907b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spawner/EmitterInspectorCard.md::0000","path":"engine/reference/tools/inspector/panels/spawner/EmitterInspectorCard.md","title":"tools/inspector/panels/spawner/EmitterInspectorCard.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spawner/EmitterInspectorCard.js","updated":"","headings":["tools/inspector/panels/spawner/EmitterInspectorCard.js","Functions","createEmitterInspectorCard(doc, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EmitterInspectorCard.js Shared emitter property card component Modular emitter editor used by both Spawner and Entities inspector panels. Configurable sections: header, elements, physics, aim. Functions Create a modular emitter inspector card. Parameters: (Document) — The document to create elements in (Object) — Configuration options (Object) — Emitter config object with properties to edit (Object) — Optional spawner props for color sync (has .color array) (Object) — Which sections to show (default all true) (boolean) — =true] Show state badge + color preview (boolean) — =true] Show element toggles with power sliders (boolean) — =true] Show physics property grid (boolean) — =false] Show aim controls (requires setGhostOffset) (Function) — Ghost offset setter for aim controls (Function) — Callback when derived color changes Returns: } Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ce2068227977149ff430ded61a1db83ad7bc9b85f541cc7b012d52e257b423a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spawner/GyroAimControl.md::0000","path":"engine/reference/tools/inspector/panels/spawner/GyroAimControl.md","title":"tools/inspector/panels/spawner/GyroAimControl.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spawner/GyroAimControl.js","updated":"","headings":["tools/inspector/panels/spawner/GyroAimControl.js","Functions","createGyroAimControl(doc, options = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spawner/PhysicsProps.md::0000","path":"engine/reference/tools/inspector/panels/spawner/PhysicsProps.md","title":"tools/inspector/panels/spawner/PhysicsProps.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spawner/PhysicsProps.js","updated":"","headings":["tools/inspector/panels/spawner/PhysicsProps.js","Functions","createPhysicsProps(doc, { emitterCfg })","createMatterProps(doc, { emitterCfg, onProfileChange })","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Physics properties grid component Uses slider based controls with value readouts to match element styling. Functions 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. Parameters: (Document) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"96df7c70de91a16a5053eb5234e5d8325cdc8ce748cac1e9edfcdaa25b2f7494"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spawner/StateSelector.md::0000","path":"engine/reference/tools/inspector/panels/spawner/StateSelector.md","title":"tools/inspector/panels/spawner/StateSelector.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spawner/StateSelector.js","updated":"","headings":["tools/inspector/panels/spawner/StateSelector.js","Functions","createStateSelector(doc, { state })","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9bc516f172523e6fdf56771f7915a74c598498f4436441c9d16a1b59c503aaac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spawner/index.md::0000","path":"engine/reference/tools/inspector/panels/spawner/index.md","title":"tools/inspector/panels/spawner/index.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spawner/index.js","updated":"","headings":["tools/inspector/panels/spawner/index.js","Functions","getElementsForState(stateId)","Constants","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Deep copy element defaults for a state Constants — Default element configurations for each state of matter Re exports , , , , , , , , , , , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"67077c5be4882bde5716058058ec933adc06b3ab782185357fb3a75e37e5a034"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spell-configs/SpellBook.md::0000","path":"engine/reference/tools/inspector/panels/spell-configs/SpellBook.md","title":"tools/inspector/panels/spell-configs/SpellBook.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spell-configs/SpellBook.js","updated":"","headings":["tools/inspector/panels/spell-configs/SpellBook.js","Functions","getSpellBook()","initSpellBookWithPresets()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SpellBook.js — local stub for the external spell book persistence system. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8aef67490cc4c0ddfba5250549fdda9b5b6c0911ed7927be8bd94ad23485f288"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spell-configs/SpellConfig.md::0000","path":"engine/reference/tools/inspector/panels/spell-configs/SpellConfig.md","title":"tools/inspector/panels/spell-configs/SpellConfig.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spell-configs/SpellConfig.js","updated":"","headings":["tools/inspector/panels/spell-configs/SpellConfig.js","Functions","cloneSpellConfig(id)","rgbToHex(r, g, b)","hexToRgb(hex)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SpellConfig.js — local stub for the external spell configuration system. Functions Constants — SpellConfig.js — local stub for the external spell configuration system. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"2710c6ad99c0686599a575053f869f9f0b99633ff6176dcd276fb049ed550cba"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/panels/spell-configs/SpellEffectFactory.md::0000","path":"engine/reference/tools/inspector/panels/spell-configs/SpellEffectFactory.md","title":"tools/inspector/panels/spell-configs/SpellEffectFactory.js","description":"","kind":"reference","source":"engine/tools/inspector/panels/spell-configs/SpellEffectFactory.js","updated":"","headings":["tools/inspector/panels/spell-configs/SpellEffectFactory.js","Functions","createEmitterConfig(config = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SpellEffectFactory.js — local stub for the external spell particle effect factory. Functions SpellEffectFactory.js — local stub for the external spell particle effect factory. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"61b96082d50718cb6cd72d8fbae29bb4d782583c0e2e0bce241d243264483490"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/ui/InspectorControls.md::0000","path":"engine/reference/tools/inspector/ui/InspectorControls.md","title":"tools/inspector/ui/InspectorControls.js","description":"","kind":"reference","source":"engine/tools/inspector/ui/InspectorControls.js","updated":"","headings":["tools/inspector/ui/InspectorControls.js","Functions","createThemedBox(doc, title, options = {})","createStatItem(doc, label, value, color)","createThemedCheckboxRow(doc, label, checked, onChange)","createThemedSlider(doc, options = {})","createSliderTicks(doc, snapPoints)","getSnapPoints(min, max, snapPoints, tickCount = 6)","snapValueToPoints(value, snapPoints)","formatSliderValue(value, formatter, precision = 2)","createPropertySection(doc, container, titleText)","createCollapsibleSection(doc, container, titleText, startCollapsed = false)","addSelectRow(doc, section, labelText, items, getValue, setValue)","addVectorRow(doc, section, options = {})","getValueAtPath(obj, path)","setValueAtPath(obj, path, value)","renderInspectorSchema(doc, container, schema, ctx = {})","addNumberRow(doc, section, labelText, getValue, setValue, step)","bindNumberInput(input, options = {})","bindRangeInput(input, options = {})","bindTextInput(input, options = {})","bindCheckboxInput(input, options = {})","bindSelectInput(select, options = {})","showInspectorTextInputModal(doc, options = {})","showInspectorContextMenu(doc, options = {})","addConfigRow(doc, container, options)","addSliderRow(doc, section, labelText, min, max, step, getValue, setValue, options = {},)","addCheckboxRow(doc, section, labelText, getValue, setValue)","addTextRow(doc, section, labelText, getValue, setValue)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Create a themed section box (card like container) Create a themed stat item (for performance stats, etc.) Create a themed checkbox row Create a themed slider with label and value display <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"77df02982c1a7174205c5d84a00812641480bc6a5ca666acf39c226ec5891dab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/inspector/ui/InspectorTheme.md::0000","path":"engine/reference/tools/inspector/ui/InspectorTheme.md","title":"tools/inspector/ui/InspectorTheme.js","description":"","kind":"reference","source":"engine/tools/inspector/ui/InspectorTheme.js","updated":"","headings":["tools/inspector/ui/InspectorTheme.js","Functions","applyThemeStyles(el, styles)","createThemedButton(doc, text, variant = \"primary\", onClick)","createThemedInput(doc, type = \"text\")","createThemedLabel(doc, text)","createThemedSectionHeader(doc, text, icon = \"\")","createThemedTab(doc, text, isActive = false, onClick)","createThemedBadge(doc, text, color = \"info\")","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Apply theme styles to an element Parameters: (HTMLElement) — Element to style (Object) — Style object from theme Create a themed button Parameters: (Document) — Document (string) — Button text (string) — 'primary' or 'secondary' (Function) — Click handler Create a themed input Parameters: (Document) — Document (string) — Input type Create a themed label Parameters: (Document) — Document (string) — Label text Create a themed section header Parameters: (Document) — Document (string) — Header text (string) — Optional emoji icon Create a themed tab button Parameters: (Document) — Document (string) — Tab text (boolean) — Is tab active (Function) — Click handler Create a themed badge Parameters: (Document) — Document (string) — Badge text (string) — Color key from theme.colors.category or theme.colors.semantic Constants — InspectorTheme.js Unified theme system for all inspector panels Provides consistent colors, spacing, and styling across all inspector UI. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f3aa2581d37ab385d371d638e1f85e27423af7a2732fdff5b84fad74bb529d1f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/interaction/GrabController.md::0000","path":"engine/reference/tools/interaction/GrabController.md","title":"tools/interaction/GrabController.js","description":"","kind":"reference","source":"engine/tools/interaction/GrabController.js","updated":"","headings":["tools/interaction/GrabController.js","Functions","grabControllerEntityReport(entityId)","grabControllerTimingReport(distance, holdMs = 750)","grabControllerRayReport(ray, distance)","createGrabState()","startGrabCandidate(grabState, ecsWorld, entityId, distance, holdMs = 750)","cancelGrabCandidate(grabState)","releaseGrabbed(grabState, ecsWorld)","updateGrabbedEntity(grabState, ecsWorld, ray)","clearGrabForEntity(grabState, entityId)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Functions Update a grabbed entity position along an admitted pick ray. Clear only grab state owned by a deleted entity. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"90083a235a7da5a1edf246de8e33f9031ec499f87d9ad0d4df7c2ccb749c4ce2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/picking/RayPicking.md::0000","path":"engine/reference/tools/picking/RayPicking.md","title":"tools/picking/RayPicking.js","description":"","kind":"reference","source":"engine/tools/picking/RayPicking.js","updated":"","headings":["tools/picking/RayPicking.js","Functions","resolvePickFovRadians(options = {}, camera = null, config = null)","rayPickerOptionsReport(options)","createRayPicker(options = {})","getCameraEyeBasisFromState(camera)","getPickRayFromState(canvas, camera, clientX, clientY, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RayPicking.js Unified, admitted camera and room/entity picking wrappers. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"98bb266771295b85ae64870d3f91fa94c43c15fa7429efd193346a1a978ba6f3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/picking/RoomPicking.md::0000","path":"engine/reference/tools/picking/RoomPicking.md","title":"tools/picking/RoomPicking.js","description":"","kind":"reference","source":"engine/tools/picking/RoomPicking.js","updated":"","headings":["tools/picking/RoomPicking.js","Functions","pickingRayReport(ray)","roomPickingOptionsReport(options = {})","entityPickingOptionsReport(options = {})","pickRoomSurfaceFromRay(ray, options = {})","pickEntityFromRay(ray, ecsWorld, spawnedEntities, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/picking/ScreenRayCaster.md::0000","path":"engine/reference/tools/picking/ScreenRayCaster.md","title":"tools/picking/ScreenRayCaster.js","description":"","kind":"reference","source":"engine/tools/picking/ScreenRayCaster.js","updated":"","headings":["tools/picking/ScreenRayCaster.js","Functions","screenPickInputReport(canvas, clientX, clientY, fovRadians = SCREENRAYLIMITS.defaultFovRadians)","screenCameraBasisReport(basis)","screenCameraStateReport(cameraState)","getPickRayForCanvas(canvas, cameraState, clientX, clientY, options = {})","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"287f9acb4aa8aa11c8062bf1f3a1344dce83c495fa42053fa79e3e67b28028cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/rigging/SkinWeightTransfer.md::0000","path":"engine/reference/tools/rigging/SkinWeightTransfer.md","title":"tools/rigging/SkinWeightTransfer.js","description":"","kind":"reference","source":"engine/tools/rigging/SkinWeightTransfer.js","updated":"","headings":["tools/rigging/SkinWeightTransfer.js","Classes","class SkinWeightTransferGPU","Functions","buildSourceSurfaceBVH(sourcePositions, sourceIndices)","estimateAlignmentICP(opts)","transferSkinWeightsCPU(opts)","async transferSkinWeightsGPU(device, opts, limits = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d4ecb0da4b5fa403be0eb91104cb31642a49b0ddece5acbeed252d41fb5b7757"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/scene/SceneSerializer.md::0000","path":"engine/reference/tools/scene/SceneSerializer.md","title":"tools/scene/SceneSerializer.js","description":"","kind":"reference","source":"engine/tools/scene/SceneSerializer.js","updated":"","headings":["tools/scene/SceneSerializer.js","Functions","serializeScene(options)","exportSceneToJson(options)","downloadScene(options, filename = \"scene.json\")","parseSceneJson(json)","loadSceneFromJson(options)","async loadSceneFromFile(file, options)","createSceneFileInput(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Serialize spawned entities to JSON compatible object. Parameters: (Object) — Serialization options (Array) — Spawned entities array (Object) — ECS world (Object) — Physics state { enabled, baseGravity, gravityScale, staticFriction, dynamicFriction, restitution } (Object) — Render state { shaderMode, enableDiffuse, enableBounce, enableEmissive, enableSun, lightBrightness } Returns: Serialized scene data Export scene to JSON string. Parameters: (Object) — Serialization options Returns: JSON string Download scene as JSON file. Parameters: (Object) — Serialization options (string) — Download filename (default: \"scene.json\") Parse scene JSON data. Parameters: (string) — JSON string Returns: Parsed scene data or null on error Load scene from JSON and spawn entities. Parameters: (Object) — Load options (string) — JSON string (Function) — Function to spawn entity (Function) — Optional function to clear existing entities (Function) — Optional function to apply physics state (Function) — Optional function to apply render state (Function) — Optional logger Returns: Load result { entityCount, physics, render } Load scene from file input. Parameters: (File) — File object (Object) — Load options (spawnEntity, clearScene, logger) Returns: Number of entities loaded Create a file input for loading scenes. Parameters: (Object) — Load options Returns: File input element <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"78da9faa00c4b66d94da2e307c928361f9e3d94703b14b46af88f69447650a5b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/spawn/GhostPreviewController.md::0000","path":"engine/reference/tools/spawn/GhostPreviewController.md","title":"tools/spawn/GhostPreviewController.js","description":"","kind":"reference","source":"engine/tools/spawn/GhostPreviewController.js","updated":"","headings":["tools/spawn/GhostPreviewController.js","Functions","getGhostPreviewInfo(params)","createGhostSelectionState()","addGhostToSelection(selection, options)","setActiveGhostInSelection(selection, id)","setActiveGhostBasePosition(selection, position, type)","setActiveGhostOffset(selection, offset)","getGhostWorldPosition(ghost)","getActiveGhost(selection)","getActiveGhostWorldPosition(selection)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/spawn/PhysicsSpawnController.md::0000","path":"engine/reference/tools/spawn/PhysicsSpawnController.md","title":"tools/spawn/PhysicsSpawnController.js","description":"","kind":"reference","source":"engine/tools/spawn/PhysicsSpawnController.js","updated":"","headings":["tools/spawn/PhysicsSpawnController.js","Functions","spawnPhysicsObjectAtPosition(ecsWorld, position, type = \"cube\", spawnerProps = null, logger = null,)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/spawn/SpawnManager.md::0000","path":"engine/reference/tools/spawn/SpawnManager.md","title":"tools/spawn/SpawnManager.js","description":"","kind":"reference","source":"engine/tools/spawn/SpawnManager.js","updated":"","headings":["tools/spawn/SpawnManager.js","Functions","spawnEntity(options)","spawnParticleEmitter(options)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Spawn a physics object with full render resource setup. Parameters: (Object) — Spawn options (Object) — ECS world (Array) — Spawn position [x, y, z] (string) — Object type (cube, sphere, etc.) (Object) — Optional spawner properties (Object) — GPU state with device (Object) — Render pipeline (Object) — Lights buffer (number) — Uniform buffer byte length (Object) — Mesh lookup { cubeMesh, sphereMesh, etc. } (Array) — Array to add spawned entity to (Map) — Map to store uniform buffer (Map) — Map to store bind group (Function) — Optional logger Returns: Spawn result or null Spawn a particle emitter at position. Parameters: (Object) — Spawn options (Array) — Spawn position (Object) — Spawner properties with color/scale (Object) — Particle state (Object) — Smoke state (for fluid sim trigger) (Function) — Callback for first emitter (starts fluid sim) (number) — Max emitters before removing old ones (default: 16) (Function) — Optional logger Returns: Created emitter or null <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4160a8a5ebc0a7e711c279a7cbaa7bd582ed12cc0a84544f534fb79e9b31be1e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/tools/spawn/SpawnTypeDefaults.md::0000","path":"engine/reference/tools/spawn/SpawnTypeDefaults.md","title":"tools/spawn/SpawnTypeDefaults.js","description":"","kind":"reference","source":"engine/tools/spawn/SpawnTypeDefaults.js","updated":"","headings":["tools/spawn/SpawnTypeDefaults.js","Functions","getAvailableSpawnTypes()","getSpawnTypesByCategory(category)","getSpawnTypeColor(type)","getSpawnTypeMeshKey(type)","resolveSpawnAppearance(type, spawnerProps, meshes)","createMeshLookup(options)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get all available spawn types. Returns: Array of spawn type names Get spawn types by category. Parameters: (string) — Category name Returns: Array of spawn type names Get the default color for a spawn type. Parameters: (string) — Spawn type (cube, sphere, cylinder, etc.) Returns: RGB color array Get the mesh type for a spawn type. Parameters: (string) — Spawn type Returns: Mesh type key Resolve color and mesh for a spawned entity. Uses spawnerProps.color if provided, otherwise falls back to type defaults. Parameters: (string) — Spawn type (Object) — Optional spawner properties with color override (Object) — Object mapping mesh keys to mesh instances Returns: { color: number[], mesh: Object, meshKey: string } Create a mesh lookup object from individual mesh references. Parameters: (Object) — Mesh references Returns: Mesh lookup object Constants — Default colors for each spawn type — Mesh type mapping (which mesh to use for each spawn type) — Spawn type categories for UI organization <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a7858d41e73499f0f2d5c9ddb02df3b74ff7bfed261cdf9012c6cae0c867a107"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/version.md::0000","path":"engine/reference/version.md","title":"version.js","description":"","kind":"reference","source":"engine/version.js","updated":"","headings":["version.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================ 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. ============================================================ Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a5ce9a2773aaedf809463e54ca0a199a570fb6ee082d6a3ee4b7dbe89afb46bf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/ChunkCullCompute.md::0000","path":"engine/reference/voxel/ChunkCullCompute.md","title":"voxel/ChunkCullCompute.js","description":"","kind":"reference","source":"engine/voxel/ChunkCullCompute.js","updated":"","headings":["voxel/ChunkCullCompute.js","Classes","class ChunkCullCompute","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize the GPU culling system Set Hi Z texture from HiZPass Upload chunk data for culling Run GPU culling Extract frustum planes from view projection matrix (CPU) Read back culling stats (async, for debugging) Destroy GPU resources <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"7e0be91ce2918a9657665fef10ff1e95dc9f4fae3f9f3bc536cd0f9324cdba72"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/ChunkRegistry.md::0000","path":"engine/reference/voxel/ChunkRegistry.md","title":"voxel/ChunkRegistry.js","description":"","kind":"reference","source":"engine/voxel/ChunkRegistry.js","updated":"","headings":["voxel/ChunkRegistry.js","Classes","class BloomFilter","class ChunkRegistry","Functions","xxHash32(data, seed = 0)","hashVoxels(voxels)","chunkRegistryBloomCoordinateHash(cx, cy, cz)","encodeMorton3D(x, y, z)","decodeMorton3D(morton)","appendTrailer(data)","verifyTrailer(data)","getChunkRegistry()","async initChunkRegistry(backend)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes 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 Method Signature Summary Generate k hash indices from chunk coordinates Uses double hashing: h(i) = h1 + i h2 Add chunk to bloom filter Check if chunk might exist (no false negatives) Clear the bloom filter Get estimated false positive rate Method Signature Summary Initialize registry, optionally loading existing index Check if chunk exists (in memory or on disk) O(1) lookup use this before generating! Uses bloom filter for fast negative check first Check if chunk exists on disk specifically Check if chunk is currently being processed Get existing pending promise for deduplication Claim a chunk for generation (prevents duplicates) Claim a chunk for loading Release claim after operation completes Register a chunk after successful load or generation Mark chunk as saved to disk Mark chunk as corrupted Verify chunk integrity by comparing hash Update hash after chunk modification Register multiple chunks as existing on disk (fast bulk init) Get all chunks needing save Get chunks in a region Load index from","contentHash":"8487a72517f7ec301146c265443310fc38d79d3af7549090019596d2a5bbe017"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/ChunkRegistry.md::0001","path":"engine/reference/voxel/ChunkRegistry.md","title":"voxel/ChunkRegistry.js","description":"","kind":"reference","source":"engine/voxel/ChunkRegistry.js","updated":"","headings":["voxel/ChunkRegistry.js","Classes","class BloomFilter","class ChunkRegistry","Functions","xxHash32(data, seed = 0)","hashVoxels(voxels)","chunkRegistryBloomCoordinateHash(cx, cy, cz)","encodeMorton3D(x, y, z)","decodeMorton3D(morton)","appendTrailer(data)","verifyTrailer(data)","getChunkRegistry()","async initChunkRegistry(backend)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":2,"text":"hash after chunk modification Register multiple chunks as existing on disk (fast bulk init) Get all chunks needing save Get chunks in a region Load index from disk Save index to disk Get entry for a chunk Get stats including bloom filter performance Debug: dump registry state Functions Fast 32 bit hash for chunk content verification Parameters: (Uint8Array Uint32Array) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: 32 bit hash Hash voxel data for quick integrity check Uses sampling for very large arrays (faster) Parameters: (Uint8Array) — No description in source JSDoc. Encode 3D chunk coordinates to Morton code (Z order) Interleaves bits for better cache locality in spatial queries Parameters: (number) — Chunk X ( 1024 to 1023) (number) — Chunk Y ( 1024 to 1023) (number) — Chunk Z ( 1024 to 1023) Returns: 32 bit Morton code Decode Morton code back to 3D coordinates Append trailer canary to data for torn write detection Verify trailer canary is present (write was complete) Get the global ChunkRegistry instance Initialize the global registry with a storage backend Parameters: (Object) — No description in source JSDoc. Constants <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"d1efde23ed40af7b8ce0cf8f8156e41a52cfe703fbef3b9cb8cb4ba0bf22dccf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/ChunkSorter.md::0000","path":"engine/reference/voxel/ChunkSorter.md","title":"voxel/ChunkSorter.js","description":"","kind":"reference","source":"engine/voxel/ChunkSorter.js","updated":"","headings":["voxel/ChunkSorter.js","Classes","class ChunkSorter","Functions","getCameraForward(viewMatrix)","getCameraPosition(invViewMatrix)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ChunkSorter Manages chunk draw order and visibility Method Signature Summary Update camera state Calculate which face directions are visible from camera A face is visible if it points toward the camera (dot product with forward 0) Check if a specific face direction is visible Sort chunks front to back by distance from camera Uses cascaded bucket sort for O(n) performance instead of O(n log n) Get sorted chunks iterator Get visible face count (for statistics) Get visible face names Get statistics Functions Utility function to extract camera forward from view matrix Parameters: (Float32Array) — 4x4 view matrix Returns: Forward direction [x, y, z] Utility function to extract camera position from inverse view matrix Parameters: (Float32Array) — Inverse 4x4 view matrix Returns: Position [x, y, z] Constants <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"4f939bb48fff536f66aff758269c6160d462f2d6923bc17b113f7266bc9db86c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/ColoredLighting.md::0000","path":"engine/reference/voxel/ColoredLighting.md","title":"voxel/ColoredLighting.js","description":"","kind":"reference","source":"engine/voxel/ColoredLighting.js","updated":"","headings":["voxel/ColoredLighting.js","Classes","class ColoredLightingSystem","Functions","packLight(r, g, b, sky = 0)","unpackLight(packed)","getChannel(packed, shift)","lightMax(a, b)","lightDecrement(packed, amount = 1)","hasLight(packed)","lightToRGB(packed, skyBrightness = 1.0)","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Get or create light data for a chunk Get light level at world position Set light level at world position Get material opacity Get material light emission Add a light source at position Remove light source at position Initialize lighting for a chunk based on light emitting materials Initialize sky light propagating down from top of chunk Process light propagation queue Call this in the update loop Propagate light from a source position Propagate light removal Handle block placement (may need to remove light) Handle block removal (light can now propagate through) Set sky brightness (0 15, for day/night cycle) Get light at position as normalized float RGB Clear all light data (for chunk unloading) Load configuration from engine.cfg section Functions Pack RGB + Sky into a 16 bit value Unpack light into components Get single channel from packed light Component wise maximum of two light values Component wise decrement with saturation (no underflow) Check if light value is non zero Convert light to normalized RGB (0 1 range) <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"14c2517026a91f0e2375ecbccd8a0977e3ba4546261e478dad226c9bf19c4007"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/DirtyChunkManager.md::0000","path":"engine/reference/voxel/DirtyChunkManager.md","title":"voxel/DirtyChunkManager.js","description":"","kind":"reference","source":"engine/voxel/DirtyChunkManager.js","updated":"","headings":["voxel/DirtyChunkManager.js","Classes","class DirtyChunkEntry","class DirtyChunkManager","class GeometryDirtyTracker extends DirtyChunkManager","class LightingDirtyTracker extends DirtyChunkManager","Functions","parseChunkKey(key)","makeChunkKey(x, y, z)","Constants","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Represents a dirty chunk entry Method Signature Summary Get unique key for this chunk Add additional flags Check if specific flag is set Serialize for GPU upload (16 bytes aligned) Method Signature Summary Update camera position for priority calculation Default priority function (damage first, then distance to camera) Mark a chunk as dirty Mark all 26 neighbors with BOUNDARY flag Mark chunk clean (processing complete) Check if chunk is dirty Get dirty flags for a chunk Begin new frame swap queues and prepare for processing Get chunks to process this frame, sorted by priority Get GPU ready buffer data for dirty chunks End frame clean up processed chunks Clear all dirty state Get statistics Debug string Geometry specific dirty tracker (for mesh rebuilds) Method Signature Summary Mark chunk as DAMAGE priority (processes first, bypasses budget) Get damage chunks first (no limit always process all damage) Count pending damage chunks Lighting specific dirty tracker (for DDGI updates) Method Signature Summary Functions Parse chunk key to coordinates Parameters: (string) — No description in source JSDoc. Create chunk key from coordinates Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Constants — Maximum chunks that can be processed per frame — Chunk states Re exports <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position.","contentHash":"47849b7ebee6eaac8ba4c05a35c1329838341e0ed6204452c02335920c8a2268"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/DirtyChunkManager.md::0001","path":"engine/reference/voxel/DirtyChunkManager.md","title":"voxel/DirtyChunkManager.js","description":"","kind":"reference","source":"engine/voxel/DirtyChunkManager.js","updated":"","headings":["voxel/DirtyChunkManager.js","Classes","class DirtyChunkEntry","class DirtyChunkManager","class GeometryDirtyTracker extends DirtyChunkManager","class LightingDirtyTracker extends DirtyChunkManager","Functions","parseChunkKey(key)","makeChunkKey(x, y, z)","Constants","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":2,"text":"provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"1d8570197ecf8edfa2371b860dc1c1a030b07a8259a85217ec4b0059b2d3ca8c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/FaceListMesher.md::0000","path":"engine/reference/voxel/FaceListMesher.md","title":"voxel/FaceListMesher.js","description":"","kind":"reference","source":"engine/voxel/FaceListMesher.js","updated":"","headings":["voxel/FaceListMesher.js","Classes","class GPUBufferPool","class FaceListMesher","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"b327b521aa284a09b110b0d6f60bc8671647d6976e90abdf724192beb520d5d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/FacePool.md::0000","path":"engine/reference/voxel/FacePool.md","title":"voxel/FacePool.js","description":"","kind":"reference","source":"engine/voxel/FacePool.js","updated":"","headings":["voxel/FacePool.js","Classes","class FacePool","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"570c30720e88460116b7844d66cab1afdd7c40cadbbc3ac30545e0f56a9b7da1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/MC33Tables.md::0000","path":"engine/reference/voxel/MC33Tables.md","title":"voxel/MC33Tables.js","description":"","kind":"reference","source":"engine/voxel/MC33Tables.js","updated":"","headings":["voxel/MC33Tables.js","Functions","asymptoticDecider(v0, v1, v2, v3)","isFaceAmbiguous(cubeIndex, faceIndex)","getAmbiguousFaces(cubeIndex)","interiorTest(values)","getMC33Subcase(cubeIndex, values)","generateWGSLTables()","rotateEdges(edges, rotation)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions 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 Parameters: (number) — Corner 0 value (number) — Corner 1 value (number) — Corner 2 value (number) — Corner 3 value Returns: 1 if ambiguous (connecting), +1 if separating, 0 if not ambiguous Check if a face has ambiguity given cube configuration Parameters: (number) — 8 bit cube configuration (number) — Face index (0 5) Get all ambiguous faces for a cube configuration Parameters: (number) — 8 bit cube configuration Returns: Array of ambiguous face indices 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 Parameters: (number[]) — 8 corner values Returns: 1, 0, or +1 indicating interior topology Compute the MC33 subcase for a given cube configuration Parameters: (number) — 8 bit cube configuration (number[]) — 8 corner density values Returns: } Generate WGSL constant arrays for MC33 tables For use in compute shaders Apply rotation to edge indices Parameters: (number[]) — Triangle edge list (number) — Rotation index","contentHash":"7869bc521f52c7276614910afffc810a1b3a7d221e7b78eeb4e3aaa0b828899d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/MC33Tables.md::0001","path":"engine/reference/voxel/MC33Tables.md","title":"voxel/MC33Tables.js","description":"","kind":"reference","source":"engine/voxel/MC33Tables.js","updated":"","headings":["voxel/MC33Tables.js","Functions","asymptoticDecider(v0, v1, v2, v3)","isFaceAmbiguous(cubeIndex, faceIndex)","getAmbiguousFaces(cubeIndex)","interiorTest(values)","getMC33Subcase(cubeIndex, values)","generateWGSLTables()","rotateEdges(edges, rotation)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":2,"text":"constant arrays for MC33 tables For use in compute shaders Apply rotation to edge indices Parameters: (number[]) — Triangle edge list (number) — Rotation index (0 47) Returns: Rotated edge list Constants — 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 — 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 — Face indices for the 6 cube faces Each face defined by 4 corner indices in CCW order (from outside) — For each ambiguous case, which faces need to be tested Bit flags: bit 0 = face 0, bit 1 = face 1, etc. — Subcase lookup for each ambiguous case Index by face test results (bit flags) — 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 — 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] <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"eafe7a9f324ff51d86a1cb0a7150799079890d40f964801d8af8db56aa680cc2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/MarchingCubesMesher.md::0000","path":"engine/reference/voxel/MarchingCubesMesher.md","title":"voxel/MarchingCubesMesher.js","description":"","kind":"reference","source":"engine/voxel/MarchingCubesMesher.js","updated":"","headings":["voxel/MarchingCubesMesher.js","Classes","class MarchingCubesMesher","Functions","meshChunkSmooth(chunk, getDensity, options = {})","meshChunkMC33(chunk, getDensity, options = {})","resolveFaceAmbiguity(cubeIndex, densities, faceIndex)","smin(a, b, k = 0.1)","fbm3D(x, y, z, config = {})","sdfTerrain(x, y, z, config = {})","sdfSphere(x, y, z, cx, cy, cz, radius)","sdfBox(x, y, z, cx, cy, cz, sx, sy, sz)","sdfUnion(d1, d2)","sdfSmoothUnion(d1, d2, k = 0.1)","sdfSubtract(d1, d2)","sdfIntersect(d1, d2)","generateTransitionCell(densityHigh, densityLow, face, cellSize, isolevel = 0)","needsTransitionCell(chunkLOD, neighborLOD)","getTransitionRatio(chunkLOD, neighborLOD)","dualContourVertex(density, gradients, isolevel = 0)","dualContourCell(density, isolevel = 0)","calculateWorldSpaceAO(sampleDensity, wx, wy, wz, radius = 2, samples = 8)","calculateGradientAO(sampleDensity, wx, wy, wz)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Classes Marching Cubes Mesher class for integration with existing systems Method Signature Summary Initialize GPU resources for compute based meshing Mesh a chunk using the stored density function (CPU fallback) Upload density field to GPU Get GPU vertex buffer for rendering Load config from object Functions Mesh a chunk using Marching Cubes for smooth terrain Parameters: (Object) — Voxel chunk with density data (Function) — Function(x,y,z) returning density value (Object) — Meshing options Returns: Mesh data with vertices, normals, indices Mesh a chunk using MC33 for watertight meshes","contentHash":"1fed508502e942d941174479961061f78a5fd86e379d554a40bc9938162048df"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/MarchingCubesMesher.md::0001","path":"engine/reference/voxel/MarchingCubesMesher.md","title":"voxel/MarchingCubesMesher.js","description":"","kind":"reference","source":"engine/voxel/MarchingCubesMesher.js","updated":"","headings":["voxel/MarchingCubesMesher.js","Classes","class MarchingCubesMesher","Functions","meshChunkSmooth(chunk, getDensity, options = {})","meshChunkMC33(chunk, getDensity, options = {})","resolveFaceAmbiguity(cubeIndex, densities, faceIndex)","smin(a, b, k = 0.1)","fbm3D(x, y, z, config = {})","sdfTerrain(x, y, z, config = {})","sdfSphere(x, y, z, cx, cy, cz, radius)","sdfBox(x, y, z, cx, cy, cz, sx, sy, sz)","sdfUnion(d1, d2)","sdfSmoothUnion(d1, d2, k = 0.1)","sdfSubtract(d1, d2)","sdfIntersect(d1, d2)","generateTransitionCell(densityHigh, densityLow, face, cellSize, isolevel = 0)","needsTransitionCell(chunkLOD, neighborLOD)","getTransitionRatio(chunkLOD, neighborLOD)","dualContourVertex(density, gradients, isolevel = 0)","dualContourCell(density, isolevel = 0)","calculateWorldSpaceAO(sampleDensity, wx, wy, wz, radius = 2, samples = 8)","calculateGradientAO(sampleDensity, wx, wy, wz)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":3,"text":"returning density value (Object) — Meshing options Returns: Mesh data with vertices, normals, indices Mesh a chunk using MC33 for watertight meshes Resolves topological ambiguities that cause holes in standard MC Parameters: (Object) — Voxel chunk with density data (Function) — Function(x,y,z) returning density value (Object) — Meshing options Returns: Mesh data with vertices, normals, indices Test if a face is ambiguous and resolve using asymptotic decider Exported for use in GPU shader validation Parameters: (number) — Cube configuration (0 255) (number[]) — 8 corner density values (number) — Face to test (0 5) Returns: } Smooth minimum (polynomial) blends two distances smoothly Parameters: (number) — First distance (number) — Second distance (number) — Blend factor (0.1 = sharp, 1.0 = very smooth) fBM (Fractal Brownian Motion) noise Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (Object) — {octaves, persistence, lacunarity} SDF Terrain density function (Inigo Quilez style) Returns negative inside terrain, positive outside Parameters: (number) — World X (number) — World Y (height) (number) — World Z (Object) — Terrain configuration SDF Sphere primitive SDF Box primitive Union of two SDFs Smooth union of two SDFs Subtraction of SDFs (d2 from d1) Intersection of SDFs Generate transition cell mesh for LOD boundary Parameters: (Float32Array) — High res density (full resolution) (Float32Array) — Low res density (half resolution) (number) — Boundary face (0=+X, 1= X, 2=+Y, 3= Y, 4=+Z, 5= Z) (number) — Cell size at high resolution (number) — Isosurface threshold Returns: {vertices: Float32Array, indices: Uint32Array} Check if chunk needs transition cells on a face Parameters:","contentHash":"694834ef5c3a26867149920ebd5ec90843a7c68faeb8e7c415b07cd3d8dbf02a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/MarchingCubesMesher.md::0002","path":"engine/reference/voxel/MarchingCubesMesher.md","title":"voxel/MarchingCubesMesher.js","description":"","kind":"reference","source":"engine/voxel/MarchingCubesMesher.js","updated":"","headings":["voxel/MarchingCubesMesher.js","Classes","class MarchingCubesMesher","Functions","meshChunkSmooth(chunk, getDensity, options = {})","meshChunkMC33(chunk, getDensity, options = {})","resolveFaceAmbiguity(cubeIndex, densities, faceIndex)","smin(a, b, k = 0.1)","fbm3D(x, y, z, config = {})","sdfTerrain(x, y, z, config = {})","sdfSphere(x, y, z, cx, cy, cz, radius)","sdfBox(x, y, z, cx, cy, cz, sx, sy, sz)","sdfUnion(d1, d2)","sdfSmoothUnion(d1, d2, k = 0.1)","sdfSubtract(d1, d2)","sdfIntersect(d1, d2)","generateTransitionCell(densityHigh, densityLow, face, cellSize, isolevel = 0)","needsTransitionCell(chunkLOD, neighborLOD)","getTransitionRatio(chunkLOD, neighborLOD)","dualContourVertex(density, gradients, isolevel = 0)","dualContourCell(density, isolevel = 0)","calculateWorldSpaceAO(sampleDensity, wx, wy, wz, radius = 2, samples = 8)","calculateGradientAO(sampleDensity, wx, wy, wz)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":2,"chunkCount":3,"text":"resolution (number) — Isosurface threshold Returns: {vertices: Float32Array, indices: Uint32Array} Check if chunk needs transition cells on a face Parameters: (number) — This chunk's LOD level (number) — Neighbor chunk's LOD level Returns: True if transition cells needed Get transition cell size ratio Parameters: (number) — This chunk's LOD (number) — Neighbor's LOD Returns: Size ratio (1, 2, 4, etc.) Dual Contouring vertex placement using QEF (Quadric Error Function) Unlike Marching Cubes, places vertex at optimal position inside cell Parameters: (Float32Array) — 8 corner densities (Array) — 8 gradient vectors at corners (number) — Surface threshold Returns: } Optimal vertex position Check if cell contai","contentHash":"b6da03584a4156ee62a0f715a711a87bcb50c2a8127a4064e7ce44e226d8a2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/MaterialSchema.md::0000","path":"engine/reference/voxel/MaterialSchema.md","title":"voxel/MaterialSchema.js","description":"","kind":"reference","source":"engine/voxel/MaterialSchema.js","updated":"","headings":["voxel/MaterialSchema.js","Functions","getMaterialId(name)","getMaterialName(id)","getMaterialColor(id)","getMaterialProperties(id)","isTransparent(id)","isSolid(id)","isFluid(id)","isEmissive(id)","validateSchema()","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get material ID by name (safe lookup) Parameters: (string) — Material name (e.g., 'STONE', 'LEAVES') Returns: Material ID, or 0 (AIR) if not found Get material name by ID (safe lookup) Parameters: (number) — Material ID Returns: Material name, or 'UNKNOWN' if not found Get material color by ID Parameters: (number) — Material ID Returns: RGBA color array [0 255] Get material properties by ID Parameters: (number) — Material ID Returns: Properties object Check if material is transparent Parameters: (number) — Material ID Check if material is solid Parameters: (number) — Material ID Check if material is fluid Parameters: (number) — Material ID Check if material is emissive Parameters: (number) — Material ID Validate schema integrity Returns: { valid: boolean, errors: string[] } Constants — 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 <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"2255218b49d45e7b85c60aa82cf7e533996bcce454657c2969a96d99ddec9aba"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/MeshletCullCompute.md::0000","path":"engine/reference/voxel/MeshletCullCompute.md","title":"voxel/MeshletCullCompute.js","description":"","kind":"reference","source":"engine/voxel/MeshletCullCompute.js","updated":"","headings":["voxel/MeshletCullCompute.js","Classes","class MeshletCullCompute","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"570c30720e88460116b7844d66cab1afdd7c40cadbbc3ac30545e0f56a9b7da1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/NeighborCache.md::0000","path":"engine/reference/voxel/NeighborCache.md","title":"voxel/NeighborCache.js","description":"","kind":"reference","source":"engine/voxel/NeighborCache.js","updated":"","headings":["voxel/NeighborCache.js","Classes","class ChunkNeighborCache","class NeighborCacheManager","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ChunkNeighborCache Per chunk neighbor references Method Signature Summary Set a neighbor reference Get a neighbor chunk Clear all neighbor references Get voxel at local position, crossing chunk boundaries if needed Check if voxel is solid at position (crosses boundaries) Get whether all neighbors are loaded Get count of loaded neighbors NeighborCacheManager Manages neighbor caches for all chunks Method Signature Summary Initialize with chunk manager reference Get or create cache for a chunk Called when a chunk is loaded update neighbor links Called when a chunk is unloaded remove neighbor links Get voxel at world position using cached neighbors Rebuild all neighbor links (call after bulk loading) Get chunks that need remeshing due to neighbor changes Get stats Clear all caches Constants <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"203bd5d758988c987f690f328b76613c9e1218f042e08f8993cc302cefd0f9b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/ProceduralMaterialBaker.md::0000","path":"engine/reference/voxel/ProceduralMaterialBaker.md","title":"voxel/ProceduralMaterialBaker.js","description":"","kind":"reference","source":"engine/voxel/ProceduralMaterialBaker.js","updated":"","headings":["voxel/ProceduralMaterialBaker.js","Classes","class ProceduralMaterialBaker","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"570c30720e88460116b7844d66cab1afdd7c40cadbbc3ac30545e0f56a9b7da1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/SubChunkMeshCompute.md::0000","path":"engine/reference/voxel/SubChunkMeshCompute.md","title":"voxel/SubChunkMeshCompute.js","description":"","kind":"reference","source":"engine/voxel/SubChunkMeshCompute.js","updated":"","headings":["voxel/SubChunkMeshCompute.js","Classes","class SubChunkMeshCompute","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Set metrics callback for performance tracking Set external buffer pool Initialize GPU resources Get or create a vertex buffer from pool Get or create an index buffer from pool Get or create an indirect buffer from pool Return buffers to pool Mesh a 4³ sub chunk on GPU Mesh an 8³ sub chunk on GPU Get performance statistics <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"47d98f9bfb776b1fcbc8b6fc7f554c2b3aa1eea0388af5c172a43e6f7538d51d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/TextureArrayManager.md::0000","path":"engine/reference/voxel/TextureArrayManager.md","title":"voxel/TextureArrayManager.js","description":"","kind":"reference","source":"engine/voxel/TextureArrayManager.js","updated":"","headings":["voxel/TextureArrayManager.js","Classes","class TextureArrayManager","Functions","textureArrayMaterialNoiseHash(px, py, materialIndex)","textureArrayMaterialNoiseDelta(px, py, materialIndex, amplitude = 0.1)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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); Classes TextureArrayManager Manages a texture array for voxel materials Method Signature Summary Initialize the texture array Generate solid color textures for all materials Generate mipmaps for all layers Load a texture for a specific material Set material color (regenerates texture) Get texture array view for binding Get sampler for binding Create bind group entries for this texture array Load configuration from engine.cfg section Destroy the texture array Functions Constants <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"6d506be0cbf44854d23a2efea35971e52ba80a5e264c5bc87bbab618bcfa2d87"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelAO.md::0000","path":"engine/reference/voxel/VoxelAO.md","title":"voxel/VoxelAO.js","description":"","kind":"reference","source":"engine/voxel/VoxelAO.js","updated":"","headings":["voxel/VoxelAO.js","Classes","class VoxelAOCalculator","Functions","calculateVertexAO(isOpaque, x, y, z, face, corner)","calculateFaceAO(isOpaque, x, y, z, face)","packAO(ao)","unpackAO(packed)","shouldFlipQuad(ao)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes VoxelAOCalculator GPU compute shader for AO calculation Method Signature Summary Initialize the AO calculator Create precomputed AO lookup table Key: 8 bit neighbor mask Value: AO value (0 255) Fast AO lookup using precomputed table Calculate AO for an entire chunk during meshing Load configuration from engine.cfg section Destroy resources Functions Calculate vertex AO for a single corner Parameters: (Function) — (x, y, z) = boolean (number) — Voxel X (number) — Voxel Y (number) — Voxel Z (number) — Face direction (0 5) (number) — Corner index (0 3) Returns: AO value 0.0 (fully occluded) to 1.0 (no occlusion) Calculate all 4 corner AO values for a face Parameters: (Function) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: [ao0, ao1, ao2, ao3] Pack 4 AO values into a single u32 (8 bits each) Parameters: (Array<number ) — 4 AO values (0.0 1.0) Returns: Packed u32 Unpack u32 to 4 AO values Parameters: (number) — No description in source JSDoc. Determine if face vertices should be flipped for better AO interpolation Fixes the \"anisotropy\" problem where diagonal looks different based on quad orientation Parameters: (Array<number ) — 4 AO values Returns: True if vertices should be flipped Constants <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera","contentHash":"9ab6d0ca9138685d56d91181cc5d6610070f4272e34786d39a5647f421186ace"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelAO.md::0001","path":"engine/reference/voxel/VoxelAO.md","title":"voxel/VoxelAO.js","description":"","kind":"reference","source":"engine/voxel/VoxelAO.js","updated":"","headings":["voxel/VoxelAO.js","Classes","class VoxelAOCalculator","Functions","calculateVertexAO(isOpaque, x, y, z, face, corner)","calculateFaceAO(isOpaque, x, y, z, face)","packAO(ao)","unpackAO(packed)","shouldFlipQuad(ao)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":2,"text":"system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"126889438580a11991fc37858a1fc7fb6f88d80230fa97306a120cea2a3a7e75"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelConstants.md::0000","path":"engine/reference/voxel/VoxelConstants.md","title":"voxel/VoxelConstants.js","description":"","kind":"reference","source":"engine/voxel/VoxelConstants.js","updated":"","headings":["voxel/VoxelConstants.js","Functions","getDepthTier(y)","getDepthTierBlend(y)","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get the depth tier configuration for a given Y coordinate Parameters: (number) — World Y coordinate Returns: Depth tier config Interpolate between depth tiers for smooth transitions Parameters: (number) — World Y coordinate Returns: } Constants — Depth tiers define how terrain generation changes with depth. Each tier has different noise parameters, materials, and features. <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"a089ebfd64227e67b13e4ab30d9fcde742306bfc39f46d7994a87057ae68fcdb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelMeshCompute.md::0000","path":"engine/reference/voxel/VoxelMeshCompute.md","title":"voxel/VoxelMeshCompute.js","description":"","kind":"reference","source":"engine/voxel/VoxelMeshCompute.js","updated":"","headings":["voxel/VoxelMeshCompute.js","Classes","class VoxelMeshCompute","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Set metrics callback for performance tracking Reset per frame stats (call at start of each frame) Initialize the compute system Enable turbo mode for initial load (uses fast path for ALL chunks) Queue a chunk for meshing (async, batched) DAMAGE chunks and TURBO MODE use FAST PATH no readback, 3x faster FAST PATH: Mesh chunk without readback uses pre allocated max buffers 3x faster than regular path by eliminating GPU CPU sync Get an available buffer set for parallel meshing Skips the damage reserved buffer set TURBO MODE: Fire and forget parallel mesh processing Continuously launches meshes without waiting maximum GPU saturation Get an available readback buffer from the ring Generate mesh for a chunk on the GPU using a specific buffer set Legacy meshChunk uses first buffer set (for backwards compatibility) Create a fresh indirect draw buffer for a chunk (for true indirect rendering) This allows each chunk to have its own indirect buffer for parallel rendering Allocate a slot in the batched indirect buffer for a chunk Free a slot in the batched indirect buffer Update draw parameters for a chunk in the batched buffer Get the byte offset for a chunk's slot in the batched buffer Get the batched indirect buffer for rendering Render all batched chunks with a single sequence of indirect draws This is 300× faster than individual indirect buffers on Windows/D3D12! Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks","contentHash":"db0f35ef6f130473a57d95c973d79cabfabcd91d7c38f7ae174c29940898865d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelMeshCompute.md::0001","path":"engine/reference/voxel/VoxelMeshCompute.md","title":"voxel/VoxelMeshCompute.js","description":"","kind":"reference","source":"engine/voxel/VoxelMeshCompute.js","updated":"","headings":["voxel/VoxelMeshCompute.js","Classes","class VoxelMeshCompute","Constants","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":2,"text":"HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"8c0beeafe8cfb7f2902169f1d94df436f324462b94bab55f866bb519263bb4bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelMesher.md::0000","path":"engine/reference/voxel/VoxelMesher.md","title":"voxel/VoxelMesher.js","description":"","kind":"reference","source":"engine/voxel/VoxelMesher.js","updated":"","headings":["voxel/VoxelMesher.js","Functions","isTransparentMaterial(material)","isChunkFaceSolid(chunk, face)","getChunkOcclusionMask(getNeighborChunk, cx, cy, cz)","getViewCullingMask(cx, cy, cz, cameraPos)","meshChunk(chunk, getNeighborVoxel = null, occludedFaces = 0)","meshChunkLOD(chunk, lodLevel = 0, getNeighborVoxel = null, neighborLODs = null)","meshChunkGreedy(chunk, getNeighborVoxel = null)","createChunkBuffers(device, chunk, meshData)","meshSubChunk(chunk, subSize, sx, sy, sz, getNeighborVoxel = null)","async initGPUSubChunkMeshing(device)","hasGPUSubChunkMeshing()","async meshSubChunk4GPU(chunk, sx, sy, sz)","async meshSubChunk8GPU(chunk, sx, sy, sz)","releaseGPUSubChunkMesh(mesh)","returnGPUBuffers(vertexBuffer, indexBuffer, indirectBuffer)","getGPUSubChunkStats()","getMeshGranularity(distance, hasRecentModifications = false, modCount = 0)","Constants","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Check if a material is transparent 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 Parameters: (VoxelChunk) — No description in source JSDoc. (number) — FACE RIGHT, FACE LEFT, etc. Returns: true if the entire boundary face is solid 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 Parameters: (Function) — Function(cx, cy, cz) returning neighbor chunk (number) — Chunk X coordinate (number) — Chunk Y coordinate (number) — Chunk Z coordinate Returns: Bitmask of occluded faces Get view dependent face culling mask Skips chunk faces that face away from camera (backface culling at chunk level) Parameters: (number) — Chunk X coordinate (number) — Chunk Y coordinate (number) — Chunk Z coordinate (number[]) — Camera world position [x, y, z] Returns: Bitmask of faces to skip (facing away from camera) Generate mesh for a voxel chunk using simple per face meshing with AO Returns separate meshes for opaque and transparent (water) geometry Parameters: (VoxelChunk) — No description in source JSDoc. (Function) — Function to get voxel from neighbor chunks (number) — Bitmask of faces to skip (from getChunkOcclusionMask) Returns: {{ Generate mesh using greedy meshing (fewer quads, better performance) Note: Currently does not separate water falls back to simple meshing for chunks with water Parameters: (VoxelChunk) — No description in source JSDoc. (Function) — Function to get voxel from neighbor","contentHash":"1a101f508889a7ec075fb4391704e4598598ee067750eb9f32a303b63f5d0863"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelMesher.md::0001","path":"engine/reference/voxel/VoxelMesher.md","title":"voxel/VoxelMesher.js","description":"","kind":"reference","source":"engine/voxel/VoxelMesher.js","updated":"","headings":["voxel/VoxelMesher.js","Functions","isTransparentMaterial(material)","isChunkFaceSolid(chunk, face)","getChunkOcclusionMask(getNeighborChunk, cx, cy, cz)","getViewCullingMask(cx, cy, cz, cameraPos)","meshChunk(chunk, getNeighborVoxel = null, occludedFaces = 0)","meshChunkLOD(chunk, lodLevel = 0, getNeighborVoxel = null, neighborLODs = null)","meshChunkGreedy(chunk, getNeighborVoxel = null)","createChunkBuffers(device, chunk, meshData)","meshSubChunk(chunk, subSize, sx, sy, sz, getNeighborVoxel = null)","async initGPUSubChunkMeshing(device)","hasGPUSubChunkMeshing()","async meshSubChunk4GPU(chunk, sx, sy, sz)","async meshSubChunk8GPU(chunk, sx, sy, sz)","releaseGPUSubChunkMesh(mesh)","returnGPUBuffers(vertexBuffer, indexBuffer, indirectBuffer)","getGPUSubChunkStats()","getMeshGranularity(distance, hasRecentModifications = false, modCount = 0)","Constants","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":3,"text":"falls back to simple meshing for chunks with water Parameters: (VoxelChunk) — No description in source JSDoc. (Function) — Function to get voxel from neighbor chunks Returns: } Create GPU buffers for chunk mesh (both opaque and water) Parameters: (GPUDevice) — No description in source JSDoc. (VoxelChunk) — No description in source JSDoc. Mesh a sub region of a chunk (8³ or 16³) Used for ultra fast partial updates in cascaded chunk architecture Parameters: (VoxelChunk) — Parent 32³ chunk (number) — Sub chunk size (8 or 16) (number) — Sub chunk X index (0 3 for 8³, 0 1 for 16³) (number) — Sub chunk Y index (number) — Sub chunk Z index (Function) — Function to get voxel from neighbor chunks Returns: } Initialize GPU sub chunk meshing Parameters: (GPUDevice) — WebGPU device Check if GPU sub chunk meshing is available Mesh a 4³ sub chunk on GPU (10× faster than CPU) Parameters: (VoxelChunk) — Parent chunk (number) — Sub chunk X offset (0 7) (number) — Sub chunk Y offset (0 7) (number) — Sub chunk Z offset (0 7) Returns: } Mesh an 8³ sub chunk on GPU (10× faster than CPU) Parameters: (VoxelChunk) — Parent chunk (number) — Sub chunk X offset (0 3) (number) — Sub chunk Y offset (0 3) (number) — Sub chunk Z offset (0 3) Returns: } Return GPU sub chunk output buffers to the engine pool. Return GPU buffers to pool for reuse Get GPU sub chunk meshing statistics Get mesh granularity based on distance from camera (4 Tier System) Parameters: (number) — Distance from camera in world units (boolean) — True if chunk was recently modified (number) — Number of recent modifications Returns: Mesh granularity (4, 8, 16, or 32) Constants Re exports <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of","contentHash":"fb982098e96f60345c8a2d1ecbe01def54734736729098e106972abe44944ef3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelMesher.md::0002","path":"engine/reference/voxel/VoxelMesher.md","title":"voxel/VoxelMesher.js","description":"","kind":"reference","source":"engine/voxel/VoxelMesher.js","updated":"","headings":["voxel/VoxelMesher.js","Functions","isTransparentMaterial(material)","isChunkFaceSolid(chunk, face)","getChunkOcclusionMask(getNeighborChunk, cx, cy, cz)","getViewCullingMask(cx, cy, cz, cameraPos)","meshChunk(chunk, getNeighborVoxel = null, occludedFaces = 0)","meshChunkLOD(chunk, lodLevel = 0, getNeighborVoxel = null, neighborLODs = null)","meshChunkGreedy(chunk, getNeighborVoxel = null)","createChunkBuffers(device, chunk, meshData)","meshSubChunk(chunk, subSize, sx, sy, sz, getNeighborVoxel = null)","async initGPUSubChunkMeshing(device)","hasGPUSubChunkMeshing()","async meshSubChunk4GPU(chunk, sx, sy, sz)","async meshSubChunk8GPU(chunk, sx, sy, sz)","releaseGPUSubChunkMesh(mesh)","returnGPUBuffers(vertexBuffer, indexBuffer, indirectBuffer)","getGPUSubChunkStats()","getMeshGranularity(distance, hasRecentModifications = false, modCount = 0)","Constants","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":2,"chunkCount":3,"text":"Re exports <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"de4ce3ba14742266ac76f87cb4d02919caded7b979d689f3a4177b2afe0b2d93"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelModifyCompute.md::0000","path":"engine/reference/voxel/VoxelModifyCompute.md","title":"voxel/VoxelModifyCompute.js","description":"","kind":"reference","source":"engine/voxel/VoxelModifyCompute.js","updated":"","headings":["voxel/VoxelModifyCompute.js","Classes","class VoxelModifyCompute","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Initialize the compute system Remove voxels in a sphere using GPU compute Remove voxels in a box using GPU compute Paint voxels in a sphere using the GPU compute kernel. Apply a sphere edit directly to a persistent GPU resident chunk. This is the interactive path and intentionally does not read the chunk back to CPU memory or produce removed voxel particle records. Synchronize a GPU resident chunk back to its CPU representation for legacy raycasts, CPU meshing, serialization, or diagnostics. Execute the compute shader Destroy GPU resources <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"2823b75bf07d566218d73138a4a3d6fd9d8935bf9c66c648af58e411f7f8c2f1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelRaycast.md::0000","path":"engine/reference/voxel/VoxelRaycast.md","title":"voxel/VoxelRaycast.js","description":"","kind":"reference","source":"engine/voxel/VoxelRaycast.js","updated":"","headings":["voxel/VoxelRaycast.js","Classes","class VoxelRaycastGPU","Functions","raycastVoxels(origin, direction, getVoxel, options = {})","hasVoxelLineOfSight(from, to, getVoxel, options = {})","pickBlock(origin, direction, getVoxel, maxDistance = 10)","traceVoxelPath(origin, direction, getVoxel, maxDistance = 50, options = {})","createVoxelGetter(chunkManager)","hasLineOfSightCombined(from, to, obstacles, getVoxel, options = {})","computePixelToRayMatrix(cameraPos, cameraRotation, fovRad, screenWidth, screenHeight)","screenPixelToRay(pixelX, pixelY, pixelToRay, cameraPos)","raycastVoxelsDebug(origin, direction, getVoxel, maxDistance = 100)","stepsToHeatColor(steps, maxSteps = 300)","triangleVoxelIntersect(a, b, c, voxelMin, voxelMax)","voxelizeMesh(vertices, triangles, resolution, boundsMin, boundsMax)","Constants","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes GPU accelerated batch voxel raycasting system Use when processing 100+ rays per frame Method Signature Summary Initialize GPU raycast system Perform batch raycast Cleanup GPU resources Functions Raycast through voxel world using DDA algorithm Returns first solid voxel hit along ray Parameters: (number[]) — [x, y, z] ray origin in world coords (number[]) — [x, y, z] normalized direction (Function) — (x, y, z) = material ID or null if unloaded (Object) — Raycast options (number) — Maximum ray distance (default 100) (Function) — (material) = boolean (default: !== AIR) (Set) — Materials to treat as transparent Returns: {position, normal, distance, material, voxelCoord} or null Check line of sight between two points through voxels Returns true if no solid voxels block the path Parameters: (number[]) — [x, y, z] start position (number[]) — [x, y, z] end position (Function) — (x, y, z) = material ID (Object) — Same as raycastVoxels Returns: True if line of sight is clear Block picking raycast from camera with face/placement info Returns both the hit block and the adjacent empty block for placement Parameters: (number[]) — Camera/eye position (number[]) — Look direction (normalized) (Function) — (x, y, z) = material ID (number) — Max pick distance (default 10) Returns: {block: voxelCoord, face: normal, placeAt: voxelCoord, distance} Trace ray through voxels collecting all intersected voxels Useful for beam weapons, explosion rays, etc. Parameters: (number[]) — Ray origin (number[]) — Normalized direction (Function) — (x, y, z) = material ID (number) — Max trace distance (Object) —","contentHash":"661040298e3e3f3000b24f15ebc02940445d4d8e98ceb0a03f9d3be01b30413d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelRaycast.md::0001","path":"engine/reference/voxel/VoxelRaycast.md","title":"voxel/VoxelRaycast.js","description":"","kind":"reference","source":"engine/voxel/VoxelRaycast.js","updated":"","headings":["voxel/VoxelRaycast.js","Classes","class VoxelRaycastGPU","Functions","raycastVoxels(origin, direction, getVoxel, options = {})","hasVoxelLineOfSight(from, to, getVoxel, options = {})","pickBlock(origin, direction, getVoxel, maxDistance = 10)","traceVoxelPath(origin, direction, getVoxel, maxDistance = 50, options = {})","createVoxelGetter(chunkManager)","hasLineOfSightCombined(from, to, obstacles, getVoxel, options = {})","computePixelToRayMatrix(cameraPos, cameraRotation, fovRad, screenWidth, screenHeight)","screenPixelToRay(pixelX, pixelY, pixelToRay, cameraPos)","raycastVoxelsDebug(origin, direction, getVoxel, maxDistance = 100)","stepsToHeatColor(steps, maxSteps = 300)","triangleVoxelIntersect(a, b, c, voxelMin, voxelMax)","voxelizeMesh(vertices, triangles, resolution, boundsMin, boundsMax)","Constants","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":3,"text":"rays, etc. Parameters: (number[]) — Ray origin (number[]) — Normalized direction (Function) — (x, y, z) = material ID (number) — Max trace distance (Object) — Additional options Returns: Array of {voxelCoord, material, distance, entryPoint} Create a voxel getter function from ChunkManager Parameters: (ChunkManager) — The chunk manager instance Returns: (x, y, z) = material ID or null Combined LOS check uses voxels AND AABB obstacles Drop in replacement for AIAiming.hasLineOfSight Parameters: (number[]) — Start position (number[]) — End position (Array) — AABB obstacles array (Function) — Voxel getter function (Object) — Additional options Returns: True if line of sight is clear 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) Parameters: (number[]) — Camera world position [x, y, z] (number[]) — Euler angles [pitch, yaw, roll] in radians (number) — Field of view in radians (number) — Screen width in pixels (number) — Screen height in pixels Returns: 4x4 matrix (column major) Generate ray from screen pixel using precomputed pixel to ray matrix Parameters: (number) — Screen X coordinate (number) — Screen Y coordinate (Float32Array) — 4x4 matrix from computePixelToRayMatrix (number[]) — Camera position for ray origin Returns: {origin, direction} Raycast with step counting for performance debugging Parameters: (number[]) — Ray origin (number[]) — Normalized direction (Function) — Voxel getter (number) — Max distance Returns: {hit, steps, distance, ...} Convert step count to heat map color (inferno palette) Parameters: (number) — Number of ray steps (number) — Maximum expected steps (for","contentHash":"8f21b4d092b21ece179278380321ce87338cfc2aa32bd6bed815325d7579f23c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelRaycast.md::0002","path":"engine/reference/voxel/VoxelRaycast.md","title":"voxel/VoxelRaycast.js","description":"","kind":"reference","source":"engine/voxel/VoxelRaycast.js","updated":"","headings":["voxel/VoxelRaycast.js","Classes","class VoxelRaycastGPU","Functions","raycastVoxels(origin, direction, getVoxel, options = {})","hasVoxelLineOfSight(from, to, getVoxel, options = {})","pickBlock(origin, direction, getVoxel, maxDistance = 10)","traceVoxelPath(origin, direction, getVoxel, maxDistance = 50, options = {})","createVoxelGetter(chunkManager)","hasLineOfSightCombined(from, to, obstacles, getVoxel, options = {})","computePixelToRayMatrix(cameraPos, cameraRotation, fovRad, screenWidth, screenHeight)","screenPixelToRay(pixelX, pixelY, pixelToRay, cameraPos)","raycastVoxelsDebug(origin, direction, getVoxel, maxDistance = 100)","stepsToHeatColor(steps, maxSteps = 300)","triangleVoxelIntersect(a, b, c, voxelMin, voxelMax)","voxelizeMesh(vertices, triangles, resolution, boundsMin, boundsMax)","Constants","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":2,"chunkCount":3,"text":"steps, distance, ...} Convert step count to heat map color (inferno palette) Parameters: (number) — Number of ray steps (number) — Maximum expected steps (for normalization) Returns: [r, g, b] in 0 1 range Check if a triangle intersects a voxel using separating axis theorem. Based on DeadlockCode's implementation. Parameters: (number[]) — Triangle vertex A [x, y, z] (number[]) — Triangle vertex B [x, y, z] (number[]) — Triangle vertex C [x, y, z] (number[]) — Voxel minimum corner [x, y, z] (number[]) — Voxel maximum corner [x, y, z] Returns: True if triangle intersects voxel Voxelize a triangle mesh into a voxel grid Parameters: (Array) — Array of [x, y, z] vertices (Array) — Array of [i0, i1, i2] index triplets (numbe","contentHash":"2f0b079f32483c973e3e3cf6d4d0904dcf318b891e3f74b9b1149e77162aeda7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelRenderer.md::0000","path":"engine/reference/voxel/VoxelRenderer.md","title":"voxel/VoxelRenderer.js","description":"","kind":"reference","source":"engine/voxel/VoxelRenderer.js","updated":"","headings":["voxel/VoxelRenderer.js","Classes","class VoxelRenderer","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize the voxel renderer Compute orthographic light view projection matrix for shadow mapping Compute orthographic water height map matrix (looking down from above) Update frame bind group (called when Hillaire LUT changes) Connect to Hillaire LUT atmosphere system for aerial perspective Create look at view matrix Create orthographic projection matrix (WebGPU: Z maps to [0,1]) Multiply two 4x4 matrices (uses pre allocated buffer) Update frame uniforms (including shadow data, sun, and realm parameters) Update screen size for screen space LOD Get or create resources for a chunk Write chunk uniforms (offset + blend + geomorphing) Write chunk uniform data to batched buffer at given index Flush all batched uniforms to GPU with single writeBuffer call Calculate geomorph factor for smooth LOD transitions Returns 0.0 at LOD boundary start, 1.0 at LOD boundary end Remove resources for a chunk Attach an external ShadowAtlas — the voxel fragment shader will sample from the atlas depth texture instead of the renderer's own shadow map. Call once after init(). The atlas texture must be depth32float. Patch the lightViewProj region of the already uploaded frame uniform buffer. Call AFTER atlas.computeLightMatrix() and AFTER updateFrameUniforms(). This overwrites floats [48..63] (byte offset 192, 64 bytes). Flush voxel chunk shadow depth into an EXISTING render pass. Conforms to the ShadowAtlas caster interface: { flush(pass, lightViewProj) }. Updates the internal shadow uniform buffer with the supplied lightViewProj so voxel shadow pipelines use the correct","contentHash":"d26129a5f5bb1cd0af0238bcced86c1a22e54d76ebb0902c11ce06650746968d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelRenderer.md::0001","path":"engine/reference/voxel/VoxelRenderer.md","title":"voxel/VoxelRenderer.js","description":"","kind":"reference","source":"engine/voxel/VoxelRenderer.js","updated":"","headings":["voxel/VoxelRenderer.js","Classes","class VoxelRenderer","Notes & Examples","Voxel World System"],"chunkIndex":1,"chunkCount":3,"text":"interface: { flush(pass, lightViewProj) }. Updates the internal shadow uniform buffer with the supplied lightViewProj so voxel shadow pipelines use the correct light matrix. Render shadow pass renders all chunks to shadow map from light's perspective. Additional casters (entities, particles, ropes) can render into the same shadow depth map so their shadows appear on voxel terrain. Render water surfaces to depth texture for caustic calculation Calculate LOD level (0 9) for a chunk based on distance Returns true 10 level LOD for gradual detail reduction Step sizes: [1, 1, 2, 2, 3, 3, 4, 5, 6, 8] Uses hysteresis to prevent rapid LOD switching (popping): Switching to LOWER detail (higher LOD ) requires 10% MORE distance Switching to HIGHER detail (lower LOD ) requires 10% LESS distance For out of view chunks, only half are allowed to shift LOD per frame (based on chunk position parity) to spread out transitions. Get the fine grained LOD level (0 9) for a chunk (same as getChunkLOD now) Porcupine culling: check if a chunk is completely surrounded by solid neighbors A chunk with all 6 neighbors being solid/opaque cannot be seen from any direction Check if a chunk has any opening (non solid face) on a specific side Cave portal culling: BFS from camera to find all reachable chunks through openings Chunks not reachable from the camera's position are culled Project a world point to screen space (pixels). Returns null if behind camera. Screen space LOD based on projected chunk size (with hysteresis). Hybrid LOD: combine screen space and distance, pick the more detailed (lower) LOD. Render voxel chunks with LOD support GPU driven render using indirect draw commands Uploads all chunks to GPU, runs compute culling, then uses drawIndexedIndirect Set ChunkCullCompute reference for GPU","contentHash":"36329d75c5016a0551c782b36b70ffd19a1146dc34b8449c19b4bfa609d05cb5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelRenderer.md::0002","path":"engine/reference/voxel/VoxelRenderer.md","title":"voxel/VoxelRenderer.js","description":"","kind":"reference","source":"engine/voxel/VoxelRenderer.js","updated":"","headings":["voxel/VoxelRenderer.js","Classes","class VoxelRenderer","Notes & Examples","Voxel World System"],"chunkIndex":2,"chunkCount":3,"text":"render using indirect draw commands Uploads all chunks to GPU, runs compute culling, then uses drawIndexedIndirect Set ChunkCullCompute reference for GPU driven rendering Full GPU indirect rendering uses drawIndexedIndirect for maximum GPU efficiency Requires all chunks to be in a unified vertex pool (VertexPool) Render chunks using face pull pipeline (ultra compressed: 4 bytes/face!) Uses vertex pulling from storage buffer no vertex/index buffers needed Render water using face pull pipeline Get or create face pull bind group for a chunk (opaque faces) Get or create face pull bind group for water faces Release face pull resources for a chunk Render water/transparent geometry (call AFTER render()) Uses sepa","contentHash":"98a9af76e7cb423056f70789c2410af6e0337fcbe94b69ee50522a6806f84dd1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelSdfBrickBridge.md::0000","path":"engine/reference/voxel/VoxelSdfBrickBridge.md","title":"voxel/VoxelSdfBrickBridge.js","description":"","kind":"reference","source":"engine/voxel/VoxelSdfBrickBridge.js","updated":"","headings":["voxel/VoxelSdfBrickBridge.js","Classes","class VoxelSdfBrickBridge","Functions","buildVoxelSdfBrickPair(options = {})","voxelSdfPageToNexel(page, options = {})","createVoxelSdfBrickBridge(options)","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Adapter only: voxel storage and dirty queue ownership remain with the voxel subsystem. Callers pass the dirty entries they already admitted this frame. Method Signature Summary Functions 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. <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"506b33c1e53c16e7832e90df79dd25aa62bc75a92f5c918e326104473ba6502a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/VoxelShaders.md::0000","path":"engine/reference/voxel/VoxelShaders.md","title":"voxel/VoxelShaders.js","description":"","kind":"reference","source":"engine/voxel/VoxelShaders.js","updated":"","headings":["voxel/VoxelShaders.js","Functions","buildVoxelShaderCompactBase(VOXELSHADER)","buildVoxelShaderCompactOpaque(compactBase)","buildVoxelShaderCompactWater(compactBase)","buildShadowShaderCompact()","Constants","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VoxelShaders.js WGSL shader strings for VoxelRenderer Extracted from VoxelRenderer.js for modularity Functions Constants <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"a6f0097581418801d823be9d82cf7edbe1181c458d7daa57279c7e567597d45d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/voxel/index.md::0000","path":"engine/reference/voxel/index.md","title":"voxel/index.js","description":"","kind":"reference","source":"engine/voxel/index.js","updated":"","headings":["voxel/index.js","Re-exports","Notes & Examples","Voxel World System"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Voxel World System The voxel system provides chunked 3D grids with fast access, mesh generation, and level of detail (LOD). Chunks are 32³ by default and stream in/out based on camera position. The mesher generates greedy or marching cubes geometry depending on material. Example: Creating and modifying a voxel world See also: Engine Overview","contentHash":"d6869e7d1fff9deb608b7e15bb6d536747a0714a49fedf1b6f4d5c96ea5ef2c0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/FDTDSolver.md::0000","path":"engine/reference/world/FDTDSolver.md","title":"world/FDTDSolver.js","description":"","kind":"reference","source":"engine/world/FDTDSolver.js","updated":"","headings":["world/FDTDSolver.js","Exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"371d236538a3de43075430b3a8b9235c01d86a97e3298c132ffd624d99c0e2f9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/FloatingOrigin.md::0000","path":"engine/reference/world/FloatingOrigin.md","title":"world/FloatingOrigin.js","description":"","kind":"reference","source":"engine/world/FloatingOrigin.js","updated":"","headings":["world/FloatingOrigin.js","Classes","class FloatingOrigin","Functions","shiftObjects(objects, shiftX, shiftY, shiftZ)","shiftPosition(pos, shiftX, shiftY, shiftZ)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Set absolute world position Set position using hierarchical coordinates (planet scale) Get the current hierarchical position Get current sector as [x, y, z] Get current sector key for lookups Get absolute world position (full precision) Get position relative to local origin (for rendering/physics) This is what gets sent to the GPU always near zero for precision Get the current origin offset Convert absolute world coords to local coords Convert local coords back to absolute world coords Register a callback for rebase events Callback receives (shiftX, shiftY, shiftZ) the amounts to subtract from positions Check if rebase is needed and perform it Call this every frame after updating player position Force a rebase to bring local origin to player position Get depth (negative Y in absolute coords) Useful for depth based game mechanics Get depth tier based on absolute Y position Debug info Load configuration from engine.cfg section Enable hierarchical (planet scale) coordinate mode Register callback for sector changes Callback receives (oldSectorKey, newSectorKey, sectorDelta) Internal: Notify sector change listeners Get camera relative position for a world point (GPU safe f32) Uses hierarchical math for precision at any distance Convert hierarchical position to camera relative (GPU safe f32) Check if a sector is within render distance Get all visible sector keys within distance Functions Shift an array of objects by the rebase offset Objects must have x, y, z properties Parameters: (number) — No description in source JSDoc. (number) — No description in","contentHash":"cb9421e2a4339bf3d292ae9120cb3f261c5f509bc7fb1d89d34b7f374883cd21"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/FloatingOrigin.md::0001","path":"engine/reference/world/FloatingOrigin.md","title":"world/FloatingOrigin.js","description":"","kind":"reference","source":"engine/world/FloatingOrigin.js","updated":"","headings":["world/FloatingOrigin.js","Classes","class FloatingOrigin","Functions","shiftObjects(objects, shiftX, shiftY, shiftZ)","shiftPosition(pos, shiftX, shiftY, shiftZ)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":2,"text":"array of objects by the rebase offset Objects must have x, y, z properties Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Shift a position array [x, y, z] by the rebase offset Parameters: (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Constants — Distance from local origin at which to trigger a rebase (in world units) — Chunk size for coordinate snapping during rebase — Sector based rebase threshold (rebase when crossing sector boundaries) <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"4aa9e83cccedfc40f769e36b2ad174f1f6ea207bee10fdcf6f32e1d3d5e35971"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/HierarchicalCoords.md::0000","path":"engine/reference/world/HierarchicalCoords.md","title":"world/HierarchicalCoords.js","description":"","kind":"reference","source":"engine/world/HierarchicalCoords.js","updated":"","headings":["world/HierarchicalCoords.js","Classes","class HierarchicalPosition","class BigHierarchicalPosition","Functions","getSectorsInRadius(center, radiusSectors)","parseSectorKey(key)","getChunkKeyHierarchical(pos, chunkSize)","worldToHierarchical(x, y, z)","hierarchicalToWorld(pos)","toCameraSpace(worldPos, cameraPos)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Represents a position using sector + local coordinates Sector is integer grid position, local is f32 safe offset within sector Method Signature Summary Normalize coordinates so local stays within [0, SECTOR SIZE) Overflow/underflow adjusts sector accordingly Create from flat world coordinates Convert to flat world coordinates WARNING: May lose precision at extreme distances Get position relative to a reference position (camera/player) Result is f32 safe for GPU upload Get squared distance to another position Uses hierarchical math for precision Get distance to another position Add offset to position Set from another HierarchicalPosition Clone this position Check if in same sector as another position Get sector key for hashing/lookup Get sector as array [x, y, z] Get local position as array [x, y, z] Serialize to transferable object Deserialize from object Debug string representation Extended hierarchical position using BigInt for extreme planet scales Use only when sector coordinates exceed MAX SAFE SECTOR Method Signature Summary Convert to standard HierarchicalPosition if within safe range Functions Get all sector keys within radius of a position Parameters: (HierarchicalPosition) — No description in source JSDoc. (number) — Radius in sectors Returns: Array of sector keys Parse sector key back to coordinates Parameters: (string) — Sector key \"x,y,z\" Calculate sector aligned chunk key Useful for chunk loading that respects sector boundaries Parameters: (HierarchicalPosition) — No description in source JSDoc. (number) — Size of chunks in world units Convert world","contentHash":"b95a3675cd7bdef9ea37d60c476fbfe37db05eff1b7b8b8de0763d6248c4e8a8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/HierarchicalCoords.md::0001","path":"engine/reference/world/HierarchicalCoords.md","title":"world/HierarchicalCoords.js","description":"","kind":"reference","source":"engine/world/HierarchicalCoords.js","updated":"","headings":["world/HierarchicalCoords.js","Classes","class HierarchicalPosition","class BigHierarchicalPosition","Functions","getSectorsInRadius(center, radiusSectors)","parseSectorKey(key)","getChunkKeyHierarchical(pos, chunkSize)","worldToHierarchical(x, y, z)","hierarchicalToWorld(pos)","toCameraSpace(worldPos, cameraPos)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":2,"text":"that respects sector boundaries Parameters: (HierarchicalPosition) — No description in source JSDoc. (number) — Size of chunks in world units Convert world coordinates to hierarchical Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Convert hierarchical to world coordinates Parameters: (HierarchicalPosition) — No description in source JSDoc. Get camera relative coordinates (f32 safe for GPU) Parameters: (HierarchicalPosition) — Position to convert (HierarchicalPosition) — Camera position Constants — Size of one sector in world units (10km) — Half sector size for boundary checks — Inverse for fast division — Maximum safe integer for sector coords (before BigInt needed) <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"8f44c489fce3bc059fba594eb2865fecd9ce3c954463711e60dfb108c2c14fd8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/PhasorRays.md::0000","path":"engine/reference/world/PhasorRays.md","title":"world/PhasorRays.js","description":"","kind":"reference","source":"engine/world/PhasorRays.js","updated":"","headings":["world/PhasorRays.js","Exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"371d236538a3de43075430b3a8b9235c01d86a97e3298c132ffd624d99c0e2f9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/PhotonicCrystal.md::0000","path":"engine/reference/world/PhotonicCrystal.md","title":"world/PhotonicCrystal.js","description":"","kind":"reference","source":"engine/world/PhotonicCrystal.js","updated":"","headings":["world/PhotonicCrystal.js","Exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"371d236538a3de43075430b3a8b9235c01d86a97e3298c132ffd624d99c0e2f9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/PlanetPhysics.md::0000","path":"engine/reference/world/PlanetPhysics.md","title":"world/PlanetPhysics.js","description":"","kind":"reference","source":"engine/world/PlanetPhysics.js","updated":"","headings":["world/PlanetPhysics.js","Classes","class DoubleVec3","class Quaternion","class Planet","class PlanetarySystem","Functions","splitDouble(value)","combineDouble(hi, lo)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Double precision 3D vector using hi/lo split Method Signature Summary Method Signature Summary Method Signature Summary Update planet rotation Get gravity vector at a world position Get gravity as a vec3 Get surface local up vector at a position Convert world position to planet local (rotating frame) Convert planet local to world position Get latitude/longitude from world position Get world position from latitude/longitude/altitude Get surface velocity at a position (from planet rotation) Compute Coriolis acceleration for a moving object Get tangent space basis at a surface point Raycast to planet surface Get GPU uniform data Method Signature Summary Get combined gravity at a position from all planets Find nearest planet to a position Functions Split a double into hi/lo f32 pair for GPU precision Combine hi/lo f32 pair back to double Constants — Gravitational constant (scaled for game) — Default planet radius (180,000 km = 180,000,000 m) — Default planet mass (for Earth like surface gravity) — Default rotation period in seconds (24 hours) — Minimum gravity magnitude (to avoid division issues) <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"19ee88aecc7bbd55bfe8bc6b754c26daf537f39a9393bfbe4b2b2dcb73d8d796"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/PlanetaryCoords.md::0000","path":"engine/reference/world/PlanetaryCoords.md","title":"world/PlanetaryCoords.js","description":"","kind":"reference","source":"engine/world/PlanetaryCoords.js","updated":"","headings":["world/PlanetaryCoords.js","Classes","class PlanetaryWorld","Functions","ascProject(u, v)","ascInverse(x, y, z)","faceToDirection(face, u, v)","planetaryToWorld(face, shell, u, v, planetRadius = DEFAULTPLANETRADIUS)","worldToPlanetary(x, y, z, planetRadius = DEFAULTPLANETRADIUS)","getGravityDirection(x, y, z)","getUpDirection(x, y, z)","planetaryChunkKey(face, shell, cu, cv)","parsePlanetaryChunkKey(key)","worldToPlanetaryChunk(x, y, z, chunkSize = 32, planetRadius = DEFAULTPLANETRADIUS)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Planetary world configuration Method Signature Summary Toggle planetary mode Get depth tier based on shell (for realm physics) Get gravity strength based on shell (Shell Theorem) Functions ASC (Adjusted Spherified Cube) projection Maps a point on a cube face to a point on a unit sphere Parameters: (number) — Face coordinate U ( 1 to 1) (number) — Face coordinate V ( 1 to 1) Returns: Normalized direction on unit sphere Inverse ASC projection Maps a direction on unit sphere back to cube face coordinates Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: } Convert face coordinates to a direction on the unit sphere Parameters: (number) — Cube face index (0 5) (number) — Face coordinate ( 1 to 1) (number) — Face coordinate ( 1 to 1) Returns: Unit direction vector Convert planetary coordinates to world position Parameters: (number) — Cube face index (number) — Shell index (0 = surface, negative = underground) (number) — Face coordinate ( 1 to 1) (number) — Face coordinate ( 1 to 1) (number) — Planet radius Returns: World position Convert world position to planetary coordinates Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: } Get gravity direction at a world position (points toward center) Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns:","contentHash":"89b38a2cf0464554bc411bbc522d481a561b82152cc729ebbf8ad0e51f906c48"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/PlanetaryCoords.md::0001","path":"engine/reference/world/PlanetaryCoords.md","title":"world/PlanetaryCoords.js","description":"","kind":"reference","source":"engine/world/PlanetaryCoords.js","updated":"","headings":["world/PlanetaryCoords.js","Classes","class PlanetaryWorld","Functions","ascProject(u, v)","ascInverse(x, y, z)","faceToDirection(face, u, v)","planetaryToWorld(face, shell, u, v, planetRadius = DEFAULTPLANETRADIUS)","worldToPlanetary(x, y, z, planetRadius = DEFAULTPLANETRADIUS)","getGravityDirection(x, y, z)","getUpDirection(x, y, z)","planetaryChunkKey(face, shell, cu, cv)","parsePlanetaryChunkKey(key)","worldToPlanetaryChunk(x, y, z, chunkSize = 32, planetRadius = DEFAULTPLANETRADIUS)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":2,"text":"center) Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: Normalized gravity direction Get \"up\" direction at a world position (away from center) Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: Normalized up direction Get chunk key for planetary coordinates Parameters: (number) — Face index (0 5) (number) — Shell index (number) — Chunk U coordinate on face (number) — Chunk V coordinate on face Returns: Unique chunk key Parse planetary chunk key Parameters: (string) — No description in source JSDoc. Returns: null} Convert world position to planetary chunk coordinates Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — Size of chunks in world units (number) — No description in source JSDoc. Returns: } Constants <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"8886ac23e0a071e10c9da06c04378930d76f5e35141a99529fb83eb38228730e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/SurfaceAttachment.md::0000","path":"engine/reference/world/SurfaceAttachment.md","title":"world/SurfaceAttachment.js","description":"","kind":"reference","source":"engine/world/SurfaceAttachment.js","updated":"","headings":["world/SurfaceAttachment.js","Classes","class AttachmentPoint","class SurfaceAttachment","class AttachmentManager","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Represents a point on a surface where attachment occurs Method Signature Summary Set from world position on a planet Update world position from planet local (after rotation) Get world position Get surface normal Invalidate (surface destroyed) Manages attachment state for a single entity Method Signature Summary Attach to surface at world position Detach from surface Update attachment physics Apply external force Check if currently attached Get attachment type name Retract grapple Extend grapple Manages attachments for multiple entities Method Signature Summary Create attachment for entity Get attachment for entity Remove attachment Update all attachments Notify surface destruction at a voxel Constants — Attachment types — Break conditions — Default attachment parameters <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"659c9f3b73098ec38d1c72cd8a2050bd79cf43d668b00fd3350f49371e421356"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/WorldSchema.md::0000","path":"engine/reference/world/WorldSchema.md","title":"world/WorldSchema.js","description":"","kind":"reference","source":"engine/world/WorldSchema.js","updated":"","headings":["world/WorldSchema.js","Functions","getBiomeTypeId(biomeName)","getBiomeTypeName(biomeId)","validateTerrain(config)","validateWeather(config)","validateWorldConfig(config)","createDefaultTerrain()","createDefaultWeather()","createDefaultWorldConfig(seed = Date.now()","createClimateFromPosition(latitude, altitude, oceanDistance)","getBiomeFromClimate(climate)","getWeatherPreset(typeName)","getTimePhase(hour)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Get biome type ID from name Get biome type name from ID Validate terrain config Validate weather config Validate world config Create default terrain config Create default weather Create default world config Create climate from biome position Get biome from climate Get weather preset Get time phase for hour Constants — Biome type definitions — Climate parameter ranges (0 1) — Climate schema for biome selection — Biome definition schema — Noise parameters schema — Erosion types — Terrain generation schema — Chunk sizes — Zone types for streaming — Chunk streaming schema — Weather types — Weather schema — Time of day phases — World time schema — Complete world configuration <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"ecfee4d21dd745a7c1e2c309b1252607c6c2c5557e869a3c7333323f0315136c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/WorldTime.md::0000","path":"engine/reference/world/WorldTime.md","title":"world/WorldTime.js","description":"","kind":"reference","source":"engine/world/WorldTime.js","updated":"","headings":["world/WorldTime.js","Classes","class GameDate","class HierarchicalTimingWheel","class WorldTimeSystem","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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\" Classes GameDate A view of the world time as calendar date Never store date components directly always derive from ticks Method Signature Summary Total seconds since epoch Total days since epoch Current year (1 indexed) Day of year (0 indexed) Current season (0 3) Season name Current month (1 indexed) Day of month (1 indexed) Hour of day (0 23) Minute of hour (0 59) Second of minute (0 59) Normalized time of day (0.0 = midnight, 0.5 = noon, 1.0 = midnight) Is it daytime (6:00 18:00)? Is it night (18:00 6:00)? Moon phase (0 7) based on 28 day cycle Moon phase name Moon illumination (0.0 = new, 1.0 = full) Format as string Format as short date Format time only Add ticks and return new date Add days and return new date Compare with another date 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) Method Signature Summary Schedule an event Schedule recurring event Cancel a scheduled event Advance the wheel by one tick and execute due events Cascade events from higher levels to lower levels Find the appropriate wheel level for a delay Get pending event count Get","contentHash":"67cc8bb65ab8a7b96dedfe913ab57f419d247d78434431a1b6506cf39dee1de6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/WorldTime.md::0001","path":"engine/reference/world/WorldTime.md","title":"world/WorldTime.js","description":"","kind":"reference","source":"engine/world/WorldTime.js","updated":"","headings":["world/WorldTime.js","Classes","class GameDate","class HierarchicalTimingWheel","class WorldTimeSystem","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":2,"text":"by one tick and execute due events Cascade events from higher levels to lower levels Find the appropriate wheel level for a delay Get pending event count Get stats WorldTimeSystem Main time tracking system Features: 64 bit tick precision Configurable timescale Event scheduling via timing wheel Offline progression Network sync support Method Signature Summary Initialize the time system Update the time system call every frame Get current total ticks Get current game time in seconds (float, for rendering) Get current date/time as GameDate Get normalized time of day (0 1) Schedule an event Schedule recurring event Cancel scheduled event Set timescale Pause time Resume time Toggle pause Register callback for offline progression Process offline time (call on load) Save current state Load saved state Synchronize with server time Get synchronized time for network messages Convert game seconds to ticks Convert ticks to game seconds Get ticks until a specific time of day Skip to a specific time Get current state for debugging/UI Load configuration Constants — Tick duration in milliseconds — High precision ticks (100 nanosecond intervals, like .NET DateTime.Ticks) — Timescale presets (game:real ratios) — Calendar configuration — Derived constants — Moon phases — Season names <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"a2b746e20296ada229052acd2e4c0585d958366055987a5086ffb37648a4a268"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/ZoneManager.md::0000","path":"engine/reference/world/ZoneManager.md","title":"world/ZoneManager.js","description":"","kind":"reference","source":"engine/world/ZoneManager.js","updated":"","headings":["world/ZoneManager.js","Classes","class Zone","class ZoneManager","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Represents a single zone in the world Method Signature Summary Check if a point is inside this zone Point in polygon test using ray casting Get distance to zone boundary (negative = inside) Clamp a point to stay inside the zone Record voxel modification for potential reset Get all voxel modifications Clear modification tracking Manages all zones in the world Method Signature Summary Initialize with system references Create a new zone Remove a zone Get zone at position Get all zones containing a position Update zone states based on player position Check if destruction is allowed at position Record destruction in appropriate zone Reset a battle zone to original state Handle entering a zone Handle exiting a zone Contain particles within their zones Create a battle arena zone Create a safe zone Get zone visualization data for rendering Load configuration from engine.cfg section Constants — Zone types — Zone shapes <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"4b6f1ecbb41c9215f3f5435fc56496a9ea115a27314c208e06996d8d58d10252"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/GPUWorldGenerator.md::0000","path":"engine/reference/world/generation/GPUWorldGenerator.md","title":"world/generation/GPUWorldGenerator.js","description":"","kind":"reference","source":"engine/world/generation/GPUWorldGenerator.js","updated":"","headings":["world/generation/GPUWorldGenerator.js","Classes","class GPUWorldGenerator","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Acquire an available buffer set for parallel dispatch Release a buffer set back to the pool Constants <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"ff5d4c4e4a87200f0ff27054ccd18536431f6277116411b2c40d08b318d009c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/HydraulicErosion.md::0000","path":"engine/reference/world/generation/HydraulicErosion.md","title":"world/generation/HydraulicErosion.js","description":"","kind":"reference","source":"engine/world/generation/HydraulicErosion.js","updated":"","headings":["world/generation/HydraulicErosion.js","Classes","class HydraulicErosion","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes HydraulicErosion GPU particle based erosion with momentum Method Signature Summary Connect to shared particle system and physics Initialize GPU resources Create dummy vegetation texture (no vegetation) Update params buffer Create compute pipelines Spawn water particles (rain) Run one erosion simulation step Set erosion configuration Reset simulation Get current stats Get stream map buffer for river visualization Stream map stores time averaged particle positions (where water flows) Get pool map buffer for lake visualization Pool map stores water depth at each cell CPU flood fill for lake formation (called when particle stops with volume) Based on Nick McDonald's Procedural Hydrology flood algorithm Update stream map with particle track (time averaged river positions) Destroy GPU resources <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"43354ce7276fc9807df861401e084dc6e13386cf77f7c0ab458bf12b65cf9029"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/LayerMap.md::0000","path":"engine/reference/world/generation/LayerMap.md","title":"world/generation/LayerMap.js","description":"","kind":"reference","source":"engine/world/generation/LayerMap.js","updated":"","headings":["world/generation/LayerMap.js","Classes","class LayerMap","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes LayerMap GPU resident stratigraphic terrain data structure Method Signature Summary Initialize GPU resources Update params buffer Create compute pipelines Create core bind group Initialize layer map with bedrock foundation Set world origin for coordinate conversion Set grid scale (world units per cell) Get GPU resources for external use Get material properties Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"2c6bf43d6ea67ff992dd2f4ba94fc8e6149f2553d8037f3cc9ef960569b04d89"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/ProceduralTreeGenerator.md::0000","path":"engine/reference/world/generation/ProceduralTreeGenerator.md","title":"world/generation/ProceduralTreeGenerator.js","description":"","kind":"reference","source":"engine/world/generation/ProceduralTreeGenerator.js","updated":"","headings":["world/generation/ProceduralTreeGenerator.js","Classes","class ProceduralTreeGenerator","class GrassInstancer","Functions","proceduralTreePositionHash3D(x, y, z)","proceduralTreeDefaultSeed2D(x, z)","grassPatchBladeSeed3D(patchX, patchZ, bladeIndex)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Connect to wind simulation and particle system Update all active trees with wind Register a tree for wind updates Unregister a tree from wind updates Generate a tree at the given position Generate voxels for a tree Calculate bounding box of tree Place a tree into a chunk's voxel array Get appropriate tree species for a biome Load configuration from config object 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 Method Signature Summary Connect to wind simulation for dynamic grass movement Generate grass blade data for visible patches Get grass type for biome Upload grass blade data to GPU Functions Hash function for position based determinism Constants <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"5fbc7819b44bc96a59f149ca65663a2aa7d24822f9d1d2f74a269d17b68d1938"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/TectonicSimulation.md::0000","path":"engine/reference/world/generation/TectonicSimulation.md","title":"world/generation/TectonicSimulation.js","description":"","kind":"reference","source":"engine/world/generation/TectonicSimulation.js","updated":"","headings":["world/generation/TectonicSimulation.js","Classes","class TectonicSimulation","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes TectonicSimulation GPU plate tectonics using clustered convection Method Signature Summary Initialize GPU resources Update params buffer Create compute pipelines Initialize segments with random plates Run one simulation step Get heightmap texture for use by other systems Destroy GPU resources <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"8cce46d061564520cd0e02e68a62795bcbdb62de30c64b390ca6d905ddc16294"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/ThermalErosion.md::0000","path":"engine/reference/world/generation/ThermalErosion.md","title":"world/generation/ThermalErosion.js","description":"","kind":"reference","source":"engine/world/generation/ThermalErosion.js","updated":"","headings":["world/generation/ThermalErosion.js","Classes","class ThermalErosion","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes ThermalErosion GPU material specific talus angle erosion Method Signature Summary Initialize GPU resources Update params buffer Create compute pipelines Run thermal erosion iterations Get current heightmap texture Set material at grid position Set configuration Destroy GPU resources Constants <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"dddf18e3fbbf0f707b8cb322790007a157a9872f3588ab9a6d572d1cdb28e436"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/UnifiedTerrainPipeline.md::0000","path":"engine/reference/world/generation/UnifiedTerrainPipeline.md","title":"world/generation/UnifiedTerrainPipeline.js","description":"","kind":"reference","source":"engine/world/generation/UnifiedTerrainPipeline.js","updated":"","headings":["world/generation/UnifiedTerrainPipeline.js","Classes","class UnifiedTerrainPipeline","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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) Classes UnifiedTerrainPipeline Orchestrates all terrain generation systems Method Signature Summary Initialize all GPU resources and sub systems Generate initial terrain using tectonic simulation This is a one time initialization that runs many steps Run one frame of real time erosion simulation Get the current heightmap for rendering Get material map for rendering Get vegetation map Sample terrain height at world position (CPU side, requires readback) For real time use, prefer GPU sampling in shaders Set erosion parameters at runtime Set thermal erosion parameters Get current simulation statistics Reset simulation to initial state Destroy all GPU resources Re exports , , , , , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and","contentHash":"3e5485b4f343bd52b3b1ab8f0f42f1892262f94c29d4c2ee51c84b2cc0902a71"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/UnifiedTerrainPipeline.md::0001","path":"engine/reference/world/generation/UnifiedTerrainPipeline.md","title":"world/generation/UnifiedTerrainPipeline.js","description":"","kind":"reference","source":"engine/world/generation/UnifiedTerrainPipeline.js","updated":"","headings":["world/generation/UnifiedTerrainPipeline.js","Classes","class UnifiedTerrainPipeline","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":2,"text":"indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"cb2eb8a061b9e311d3a16075f94164015851e71f6037cf17515fa160b9f7b528"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/VoronoiTextureBlend.md::0000","path":"engine/reference/world/generation/VoronoiTextureBlend.md","title":"world/generation/VoronoiTextureBlend.js","description":"","kind":"reference","source":"engine/world/generation/VoronoiTextureBlend.js","updated":"","headings":["world/generation/VoronoiTextureBlend.js","Classes","class VoronoiTextureBlend","Functions","voronoiTextureVariationHash(x, z, index)","sampleVoronoi(centroids, x, z)","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Set centroids from world positions Generate Voronoi diagram from current centroids Generate procedural detail texture Generate Voronoi from Poisson disc sampling Get Voronoi texture for use in terrain shader Get detail texture for weathering/cracks Get blended texture result Load config from object Functions Sample Voronoi data at a world position (CPU fallback) Parameters: (Array) — Centroid array (number) — World X (normalized 0 1) (number) — World Z (normalized 0 1) Returns: {cellIdx, distance, blendFactor} <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"576fc5def41d3f7afc2618fe925c7327baac58afb3745721dae52e5c0a676109"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/WindErosion.md::0000","path":"engine/reference/world/generation/WindErosion.md","title":"world/generation/WindErosion.js","description":"","kind":"reference","source":"engine/world/generation/WindErosion.js","updated":"","headings":["world/generation/WindErosion.js","Classes","class WindErosion","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Set wind direction and speed Run one erosion cycle Get sediment buffer for visualization Load config from object <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"b862ffb29c364d6ce11ff9a34ff67cb955b47ecd87753ef12cea7378daa6ac31"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/WorldGenerator.md::0000","path":"engine/reference/world/generation/WorldGenerator.md","title":"world/generation/WorldGenerator.js","description":"","kind":"reference","source":"engine/world/generation/WorldGenerator.js","updated":"","headings":["world/generation/WorldGenerator.js","Classes","class WorldGenerator","Functions","worldGeneratorHash3D(x, y, z)","worldGeneratorDungeonSeed2D(centerX, centerZ)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize the generator Set the world seed Get 5 climate parameters at world coordinates OPTIMIZED: Reduced octaves, uses single noise3D calls where possible Returns: [temperature, humidity, continentalness, erosion, weirdness] Get biome at world coordinates using climate matching Finds the biome whose climate target is closest to the actual climate Get continental value at position (0 = deep ocean, 1 = continental interior) Used for land/ocean distribution and coastal effects Get terrain height at world coordinates with terrain shaping Techniques: continental, tectonic, power redistribution, ridged noise, domain warping Get 3D terrain density at world position OPTIMIZED: Early exit octave evaluation (KdotJPG technique) Only compute 3D noise when height ± max noise range can cross threshold density = 0 = solid, density < 0 = air Check if position is a cave OPTIMIZED: Single noise check first, only compute expensive ridged noise if needed Fast cave check using 4x4x4 low res sampling Samples cave noise at grid points and uses simple threshold 64x faster than full res isCave for deep chunks Get ore type at position (returns null if no ore) Uses depth based ore distribution with vein clustering Check if position should be lava (deep underground pools) Check if position should be underground water Generate a chunk using optimized 3D density function Optimizations: Cache biome/height per column (not per voxel) Fast path for fully underground chunks Reduced noise calls via early exits Inline critical calculations Register a structure generator callback","contentHash":"43db3cc1527a69ffbcf4c9991bd52262ae6ab7c7764e03f87ef2b542901f63cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/WorldGenerator.md::0001","path":"engine/reference/world/generation/WorldGenerator.md","title":"world/generation/WorldGenerator.js","description":"","kind":"reference","source":"engine/world/generation/WorldGenerator.js","updated":"","headings":["world/generation/WorldGenerator.js","Classes","class WorldGenerator","Functions","worldGeneratorHash3D(x, y, z)","worldGeneratorDungeonSeed2D(centerX, centerZ)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":3,"text":"(not per voxel) Fast path for fully underground chunks Reduced noise calls via early exits Inline critical calculations Register a structure generator callback Generate structures for a chunk (called after terrain) Generate trees in a chunk based on biome Validate that a tree position has solid ground beneath Set tree physics system reference Generate procedural dungeon in underground area Based on: TinyKeepDev algorithm (separation + MST corridors) https://www.gamedeveloper.com/programming/procedural dungeon generation algorithm Carve dungeon into voxel chunk Load configuration from config object Get biome name at world coordinates Get debug info for a position Bake navigation grid from generated terrain Get AI terrain type at world position (for AITerrain.js) Maps voxel materials/biomes to terrain types Get AI movement cost at position (integrates with AITerrain.js) Get cover value at position (for AI combat) Generate heightmap for weather/AI systems Generate watermap for weather system Sample terrain density at world position Negative = inside solid, Positive = outside (air) Ray march through density field to find surface intersection Check sphere collision with terrain Get terrain surface normal at position using gradient of density Sample ambient lighting from terrain at position Combines surface normal, sky visibility, and AO Get lighting influence for an object at position Used for dynamic objects to match terrain lighting Functions Constants <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene","contentHash":"e486239a5cb11747a3da41b0540a46431c1ec20fd96c70bb53561d870841cea6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/WorldGenerator.md::0002","path":"engine/reference/world/generation/WorldGenerator.md","title":"world/generation/WorldGenerator.js","description":"","kind":"reference","source":"engine/world/generation/WorldGenerator.js","updated":"","headings":["world/generation/WorldGenerator.js","Classes","class WorldGenerator","Functions","worldGeneratorHash3D(x, y, z)","worldGeneratorDungeonSeed2D(centerX, centerZ)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":2,"chunkCount":3,"text":"with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"5064889817b6b361f54200ac4a2159229cc29ccc257665a116de5428bb238283"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/WorldMapGenerator.md::0000","path":"engine/reference/world/generation/WorldMapGenerator.md","title":"world/generation/WorldMapGenerator.js","description":"","kind":"reference","source":"engine/world/generation/WorldMapGenerator.js","updated":"","headings":["world/generation/WorldMapGenerator.js","Classes","class WorldMapGenerator","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Generate a world map preview from all chunks Calculate world bounds from chunks Build a heightmap from all chunks Returns a Map of \"x,z\" { material, height } Find the top solid block in a chunk column Render the heightmap to a canvas Add vignette effect Add chunk grid overlay Generate placeholder when no chunks available Generate preview and return as Blob for storage <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"34bc0b57439c0da4d34b80ba20298e156cbe3a8a7950a91f96882d9790491454"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/generation/index.md::0000","path":"engine/reference/world/generation/index.md","title":"world/generation/index.js","description":"","kind":"reference","source":"engine/world/generation/index.js","updated":"","headings":["world/generation/index.js","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"0314eca27cedade753142a81e7518591ffa6b546c4387969228c31d31ee2fc35"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/index.md::0000","path":"engine/reference/world/index.md","title":"world/index.js","description":"","kind":"reference","source":"engine/world/index.js","updated":"","headings":["world/index.js","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"3813b0ba90594805daa90f84ea8e310aba0fc676fd45c0465984ddb49a1754db"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/ChunkNetworking.md::0000","path":"engine/reference/world/storage/ChunkNetworking.md","title":"world/storage/ChunkNetworking.js","description":"","kind":"reference","source":"engine/world/storage/ChunkNetworking.js","updated":"","headings":["world/storage/ChunkNetworking.js","Classes","class ChunkNetworking","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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. Classes Method Signature Summary Constants — 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. <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"96c6ece64dae64ce749a140beb756041219f5aa87cb432a515162b5b58b2561d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/ChunkPersistence.md::0000","path":"engine/reference/world/storage/ChunkPersistence.md","title":"world/storage/ChunkPersistence.js","description":"","kind":"reference","source":"engine/world/storage/ChunkPersistence.js","updated":"","headings":["world/storage/ChunkPersistence.js","Classes","class ChunkPersistence","Functions","chunkPersistenceCurrentKey(legacyKey)","prepareChunkPersistenceRecord(record)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes Method Signature Summary Initialize persistence system. Start auto save timer. Queue a chunk for saving. Get delta data (only modified blocks). Get full chunk data. Simple RLE compression. Decompress RLE data. Save a chunk using legacy first/current last writes in one transaction. Load a chunk, preferring v2 unless a rollback writer changed v1. Process the save queue for this frame. Functions Validate one exact v1/v2 chunk record without manufacturing an upcast. Constants — 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 <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"d6196ea474b9b2d6a7330d0cdf29a77755c0ee5fa475594d75ab2141bbc91938"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/ChunkSerializer.md::0000","path":"engine/reference/world/storage/ChunkSerializer.md","title":"world/storage/ChunkSerializer.js","description":"","kind":"reference","source":"engine/world/storage/ChunkSerializer.js","updated":"","headings":["world/storage/ChunkSerializer.js","Functions","serializeChunk(chunk, options = {})","deserializeChunk(data, options = {})","applyDelta(voxels, modifications, forward = true)","chunkKey(x, y, z)","parseChunkKey(key)","estimateChunkSize(chunk)","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Serialize complete chunk state Parameters: (Object) — Chunk object with voxels, entities, metadata (Object) — Serialization options Returns: Serialized binary data Deserialize chunk from binary data Parameters: (Uint8Array) — No description in source JSDoc. (Object) — No description in source JSDoc. Returns: Chunk object Apply delta modifications to voxel array Parameters: (Uint8Array) — No description in source JSDoc. (boolean) — true = apply new values, false = apply old values (undo) Create chunk key from coordinates Parameters: (number) — No description in source JSDoc. (number) — No description in source JSDoc. (number) — No description in source JSDoc. Parse chunk key to coordinates Parameters: (string) — No description in source JSDoc. Returns: } Get serialized chunk size estimate Parameters: (Object) — No description in source JSDoc. Re exports , , , , , , , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"1fce1b3ed803555bb4bebf48e247433d86bd44387f029dc78e65bad8366dc019"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/DiskMeshCache.md::0000","path":"engine/reference/world/storage/DiskMeshCache.md","title":"world/storage/DiskMeshCache.js","description":"","kind":"reference","source":"engine/world/storage/DiskMeshCache.js","updated":"","headings":["world/storage/DiskMeshCache.js","Classes","class DiskMeshCache","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes DiskMeshCache IndexedDB backed mesh cache Method Signature Summary Initialize the IndexedDB database Generate cache key for a chunk Check if mesh exists in cache Get mesh from cache Save mesh to cache Immediate save (internal) Add to memory cache with LRU eviction Clear all cached meshes for current world Clear entire cache Clean up old entries Get cache statistics Get stats Set world seed (call when changing worlds) Close database connection Load configuration from engine.cfg section <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"c24fb28b8ef3feb220d7f9648cc0f8c85898987a76e764dec1f06d397eafa0f6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/PaletteCompression.md::0000","path":"engine/reference/world/storage/PaletteCompression.md","title":"world/storage/PaletteCompression.js","description":"","kind":"reference","source":"engine/world/storage/PaletteCompression.js","updated":"","headings":["world/storage/PaletteCompression.js","Classes","class CompressedChunk","class ChunkCompressor","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes CompressedChunk Palette compressed voxel storage Method Signature Summary Compress raw voxel data Decompress to raw voxel data Get voxel at position (without full decompression) Set voxel at position (may trigger recompression) Get compression ratio Serialize for storage/network Deserialize from storage/network ChunkCompressor Manages compression for multiple chunks Method Signature Summary Compress and store a chunk Get compressed chunk Decompress a chunk Remove a chunk Get overall compression ratio Get stats Clear all chunks <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"d188ec2aab1783a06fbf0b99df96f0f5c5b786fb4aa118c732a6a920222ab2a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/RLECompression.md::0000","path":"engine/reference/world/storage/RLECompression.md","title":"world/storage/RLECompression.js","description":"","kind":"reference","source":"engine/world/storage/RLECompression.js","updated":"","headings":["world/storage/RLECompression.js","Classes","class RLEChunkCompressor","class HybridChunkCompressor","Functions","encodeColumn(column)","decodeColumn(encoded, expectedLength)","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes RLEChunkCompressor RLE compression for entire chunks Method Signature Summary Compress a chunk using column based RLE Decompress a chunk from RLE format Get a single voxel from compressed data without full decompression Serialize compressed chunk for storage/network Deserialize compressed chunk from storage/network Get compression stats Reset stats Hybrid compression: Palette + RLE First applies palette compression, then RLE on the indices Method Signature Summary Compress chunk using palette + RLE Decompress palette + RLE compressed chunk Functions Encode a single column using RLE Parameters: (Uint8Array) — Voxel data for one column Returns: Compressed data Decode RLE column back to raw data Parameters: (Uint8Array) — No description in source JSDoc. (number) — Expected output length <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"d9c56dd98eaa428c0d58c76cda577ee9cbc587fea5dc9733ded791e5b882c762"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/RegionFile.md::0000","path":"engine/reference/world/storage/RegionFile.md","title":"world/storage/RegionFile.js","description":"","kind":"reference","source":"engine/world/storage/RegionFile.js","updated":"","headings":["world/storage/RegionFile.js","Classes","class RegionFile","class RegionManager","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes RegionFile Manages a single region file containing 32x32 chunks Method Signature Summary Get filename for this region Convert local chunk coordinates to index (2D per Y layer) Get location entry for a chunk Set location entry for a chunk Check if chunk exists in region Get chunk timestamp Allocate sectors for chunk data Free sectors used by a chunk Write chunk to region Read chunk data from region Delete chunk from region Serialize region to binary for storage Deserialize region from binary data Check if region needs compaction based on fragmentation Get region health status Defragment region file (compact sectors) Get list of all chunk coordinates in this region Get region statistics RegionManager High level interface for region based chunk storage Method Signature Summary Get region key from region coordinates Convert world chunk coordinates to region coordinates Get or create region file Save chunk to appropriate region Load chunk from appropriate region Check if chunk exists Delete chunk Get all dirty regions that need saving Mark region as saved Unload region from memory Get statistics Get health status for all loaded regions Compact all fragmented regions Re exports , , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"1c91b3fbd68383391f35caae486ccabff43c0b6e042b438cdebd621d661368eb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/StorageBackends.md::0000","path":"engine/reference/world/storage/StorageBackends.md","title":"world/storage/StorageBackends.js","description":"","kind":"reference","source":"engine/world/storage/StorageBackends.js","updated":"","headings":["world/storage/StorageBackends.js","Classes","class OPFSBackend","class IndexedDBBackend","class FileSystemBackend","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StorageBackends.js Storage backend implementations Extracted from WorldStorage.js for modularity Includes: OPFSBackend (Origin Private File System) IndexedDBBackend (fallback) FileSystemBackend (user selected folder) Classes Method Signature Summary Method Signature Summary Method Signature Summary <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"d8a412a71394141180d6e7bbc6f47286bdcb39651b2bc6080cc8f0d2dc372482"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/VoxelCompression.md::0000","path":"engine/reference/world/storage/VoxelCompression.md","title":"world/storage/VoxelCompression.js","description":"","kind":"reference","source":"engine/world/storage/VoxelCompression.js","updated":"","headings":["world/storage/VoxelCompression.js","Functions","crc32(data)","verifyCRC32(data, expectedCRC)","encodeMorton3D(x, y, z)","decodeMorton3D(morton)","generateMortonIndices(size)","getMortonIndices(size)","linearToMorton(data, size)","mortonToLinear(data, size)","buildPalette(data)","bitsForPalette(paletteSize)","paletteCompress(data)","paletteDecompress(palette, bits, packed, count)","rleEncode(data)","rleDecode(data)","compressChunk(voxels, chunkSize = 32)","decompressChunk(compressed, chunkSize = 32)","encodeDelta(modifications)","decodeDelta(data)","compressionStats(original, compressed)","testRoundtrip(data, chunkSize = 32)","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Calculate CRC32 checksum Parameters: (Uint8Array) — No description in source JSDoc. Returns: 32 bit CRC Verify data integrity Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. Encode 3D coordinates to Morton code (Z order) Parameters: (number) — X coordinate (0 1023) (number) — Y coordinate (0 1023) (number) — Z coordinate (0 1023) Returns: 30 bit Morton code Decode Morton code to 3D coordinates Parameters: (number) — No description in source JSDoc. Returns: } Generate Morton order traversal indices for a cubic chunk Parameters: (number) — Chunk dimension (e.g., 32) Returns: Morton ordered indices Get cached Morton indices for chunk size Parameters: (number) — No description in source JSDoc. Reorder voxel data from linear to Morton order Parameters: (Uint8Array Uint16Array) — Linear voxel data (number) — Chunk dimension Returns: Morton ordered data Reorder voxel data from Morton to linear order Parameters: (Uint8Array Uint16Array) — Morton ordered data (number) — Chunk dimension Returns: Linear data Build palette from voxel data Parameters: (Uint8Array Uint16Array) — No description in source JSDoc. Returns: } Calculate bits needed for palette size Parameters: (number) — No description in source JSDoc. Returns: Bits per index (1, 2, 4, 8, or 16) Compress voxels using palette compression Parameters: (Uint8Array Uint16Array) — Raw voxel data Returns: } Decompress palette compressed data Parameters: (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. (Uint8Array) — No description in","contentHash":"382aef1b6684bf60f8fc74971b75a124c3da15ad98b67be2b904e4375ae32f82"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/VoxelCompression.md::0001","path":"engine/reference/world/storage/VoxelCompression.md","title":"world/storage/VoxelCompression.js","description":"","kind":"reference","source":"engine/world/storage/VoxelCompression.js","updated":"","headings":["world/storage/VoxelCompression.js","Functions","crc32(data)","verifyCRC32(data, expectedCRC)","encodeMorton3D(x, y, z)","decodeMorton3D(morton)","generateMortonIndices(size)","getMortonIndices(size)","linearToMorton(data, size)","mortonToLinear(data, size)","buildPalette(data)","bitsForPalette(paletteSize)","paletteCompress(data)","paletteDecompress(palette, bits, packed, count)","rleEncode(data)","rleDecode(data)","compressChunk(voxels, chunkSize = 32)","decompressChunk(compressed, chunkSize = 32)","encodeDelta(modifications)","decodeDelta(data)","compressionStats(original, compressed)","testRoundtrip(data, chunkSize = 32)","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":2,"text":"palette compressed data Parameters: (number[]) — No description in source JSDoc. (number) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. (number) — Number of voxels 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) Parameters: (Uint8Array) — No description in source JSDoc. RLE decompress data Parameters: (Uint8Array) — No description in source JSDoc. Full compression pipeline for voxel chunk Pipeline: Morton → Palette → RLE Parameters: (Uint8Array) — Raw voxel data (linear order) (number) — Chunk dimension (e.g., 32) Returns: {{ Decompress voxel chunk Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. Returns: Linear ordered voxel data Encode chunk modifications as delta Decode delta modifications Parameters: (Uint8Array) — No description in source JSDoc. Returns: } Create a compression statistics report Parameters: (Uint8Array) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. Test compression roundtrip Parameters: (Uint8Array) — No description in source JSDoc. (number) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"c49486ced1ccff240fc0dfe792b9c5ad32bfe64138c56c735afcc0e042c545e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/WorldStorage.md::0000","path":"engine/reference/world/storage/WorldStorage.md","title":"world/storage/WorldStorage.js","description":"","kind":"reference","source":"engine/world/storage/WorldStorage.js","updated":"","headings":["world/storage/WorldStorage.js","Classes","class WorldStorage","Functions","validateWorldMetadata(metadata)","parseWorldWalHeader(data)","parseWorldWal(data)","Constants","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes WorldStorage Main API for world persistence Method Signature Summary Set the ChunkManager reference for preview generation Generate and save world map preview image Start periodic file log flushing Stop file logging Log a save operation with detailed chunk info Log a load operation with detailed chunk info Flush log buffers to files Append text to a log file in the world folder Uses a write queue to prevent file contention from concurrent writes Clear log files (call when starting fresh debugging session) Request persistent storage to prevent browser from evicting data under storage pressure Check available storage quota and warn if low Check if there's enough storage space for a write Select storage folder (MUST be called from user gesture like button click) Call this to switch from OPFS to real file system storage Check if using real file system (not OPFS/IndexedDB) Get current storage location info Check if storage is fully ready for save/load operations This ensures all handles are valid and buffers are clear Get current initialization phase Wait for storage to be ready Mark storage as ready after all initialization is complete Should be called after handles are verified and buffers are clear Load world metadata Save world metadata Create an empty region file on disk Use this to pre create region files before adding chunks Enable RAM first mode preloads all regions into memory After this, chunk operations are instant (no disk I/O) Check if RAM first mode is enabled Start background save timer periodically flushes dirty regions to disk Force save all dirty regions to","contentHash":"d262c2efb86fcef18102309f4bd3c9aa97ecfcb0f168d0601af138d5d55fc1cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/WorldStorage.md::0001","path":"engine/reference/world/storage/WorldStorage.md","title":"world/storage/WorldStorage.js","description":"","kind":"reference","source":"engine/world/storage/WorldStorage.js","updated":"","headings":["world/storage/WorldStorage.js","Classes","class WorldStorage","Functions","validateWorldMetadata(metadata)","parseWorldWalHeader(data)","parseWorldWal(data)","Constants","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":3,"text":"instant (no disk I/O) Check if RAM first mode is enabled Start background save timer periodically flushes dirty regions to disk Force save all dirty regions to disk (call before exit) Create multiple empty region files Start WAL flush timer for periodic writes Stop WAL timers Write a chunk modification to WAL (call BEFORE actual save) Flush WAL buffer to disk (append only) Record a region mutation and its required durable WAL generation. Clear a dirty marker only if no newer mutation replaced its snapshot. Checkpoint: Apply all WAL entries to regions and truncate WAL Called during idle time or when WAL gets too large Recover from WAL after crash Replays any entries that weren't checkpointed Force WAL flush and checkpoint (call before shutdown) Start autosave timer Stop autosave timer Set logging verbosity Set player position for distance based chunk loading priority Chunks nearest to player will be loaded first Batch log helper accumulates logs and flushes periodically Flush accumulated logs Queue chunk for batched save Flush all queued saves at once Queue a chunk modification for idle based saving Call this when player damages/modifies terrain Reset the idle flush timer Flush all queued modifications to disk Called automatically when idle detected Force flush all modifications immediately Call this before closing/unloading Save chunk to storage (immediate use queueSave for batching) Load chunk from storage Check if chunk exists in storage Delete chunk from storage Mark chunk as dirty (needs saving) Load chunk if exists, otherwise generate and save it This is the PRIMARY method for getting chunks ensures no duplicate generation Batch load or generate multiple chunks More efficient than calling loadOrGenerate individually Chunks are sorted by distance from player","contentHash":"e666d054f295bb24be857dd764a07535f6c6dfa6c5d159f57ee0e5335ae9de46"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/WorldStorage.md::0002","path":"engine/reference/world/storage/WorldStorage.md","title":"world/storage/WorldStorage.js","description":"","kind":"reference","source":"engine/world/storage/WorldStorage.js","updated":"","headings":["world/storage/WorldStorage.js","Classes","class WorldStorage","Functions","validateWorldMetadata(metadata)","parseWorldWalHeader(data)","parseWorldWal(data)","Constants","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":2,"chunkCount":3,"text":"duplicate generation Batch load or generate multiple chunks More efficient than calling loadOrGenerate individually Chunks are sorted by distance from player position (nearest first) Check if chunk needs generation (doesn't exist in storage) Use this to avoid generating chunks that already exist Save a single region immediately Set a chunk to trace for debugging load/save issues Ensure region is loaded from disk Uses loadingRegions Map to prevent race conditions where multiple chunks request the same region simultaneously before it's loaded Actually load region from disk (internal helper) Schedule a deferred save (non blocking, runs during idle time) Saves ONE region per idle callback to prevent frame stalls Save dirt","contentHash":"82765cbe0214bdd62cf551ff660a13525ee64fabe3f14e17006e2ab2490e9f31"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/storage/index.md::0000","path":"engine/reference/world/storage/index.md","title":"world/storage/index.js","description":"","kind":"reference","source":"engine/world/storage/index.js","updated":"","headings":["world/storage/index.js","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"3de73c99b38d8c06ff153d50aa08cc1b29302a740317f9b30d4650ed6f4e5ce0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/AdaptiveChunkBudget.md::0000","path":"engine/reference/world/streaming/AdaptiveChunkBudget.md","title":"world/streaming/AdaptiveChunkBudget.js","description":"","kind":"reference","source":"engine/world/streaming/AdaptiveChunkBudget.js","updated":"","headings":["world/streaming/AdaptiveChunkBudget.js","Classes","class AdaptiveChunkBudget","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes 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. Method Signature Summary Set limits based on GPU page allocator's detected VRAM Call this after GPUPageAllocator.init() completes Set limits based on GPU buffer pool (the actual mesh buffer allocator) This is more accurate than page allocator since it tracks real mesh memory Get VRAM based job limits for ChunkJobCoordinator Scales with detected VRAM: 4GB=base, 8GB=2x, 12GB=3x Check if we should stop loading chunks due to memory pressure Adapt chunk limit based on current VRAM usage Call this every frame internally rate limited Record frame metrics call every frame Uses EMA for smooth, responsive tracking Get current limits call when checking chunk counts Force immediate reduction (emergency) Get debug info <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"f6bccb8b425dfce51ccfad8a9e4ad46cfb5a347e0ef0eeef39098f07a8e248ee"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkHistory.md::0000","path":"engine/reference/world/streaming/ChunkHistory.md","title":"world/streaming/ChunkHistory.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkHistory.js","updated":"","headings":["world/streaming/ChunkHistory.js","Classes","class HistoryManager","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes HistoryManager Global history management Method Signature Summary Get or create history for chunk Record voxel change Record entity spawn Record entity despawn Undo last operation in chunk Redo operation in chunk Rollback chunk to timestamp Create snapshot for chunk Prune old history Clear history for chunk Get total memory usage Get statistics Re exports , , , , , , , , , , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"dc61abb1736d5e7cf07ff33532ba6bf46f285ea5d1d20f05f6752643dd633986"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkJobCoordinator.md::0000","path":"engine/reference/world/streaming/ChunkJobCoordinator.md","title":"world/streaming/ChunkJobCoordinator.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkJobCoordinator.js","updated":"","headings":["world/streaming/ChunkJobCoordinator.js","Classes","class ChunkJobCoordinator","Functions","encodeMorton3D(x, y, z)","decodeMorton3D(morton)","mortonBigmin(current, minMorton, maxMorton)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Generate chunk key Parse chunk key Get Morton code for chunk coordinates Update player velocity for predictive loading Get predicted player position for lookahead loading Calculate priority with velocity weighting Chunks in player's path get higher priority Check if chunk should be loaded using hysteresis Prevents thrashing at boundary distances Check if a chunk can be claimed for loading Try to claim a chunk for loading (atomic operation) Batch claim multiple chunks Update job state Mark a job as complete Cancel a job Cancel all jobs from a source Release a completed chunk (allow it to be loaded again, e.g., after unload) Check if chunk is being worked on Check if chunk is completed Get job state Get available slots for a source Get chunks that are not claimed by anyone and need loading Useful for load balancing between systems Prune stale jobs and distant completed chunks Per frame update Set limit for a source Get statistics Clear all state Load configuration from engine.cfg Get eviction candidates sorted by distance (furthest first) Uses max distance eviction instead of LRU for better spatial locality Evict chunks to free memory, prioritizing furthest chunks Combines distance with recency for optimal eviction Check if memory pressure requires eviction Debug: Get all active jobs Get comprehensive debug info for streaming visualization overlay Format debug info as multi line string for HUD display Compute visible chunks using BFS through open chunk faces (portal culling) Uses faceOpenness bits to traverse through connected air spaces Get","contentHash":"e6120c5fb0dc4eb3361da1019ae5ccec07c4637d7026ac42288223069cc3cb1c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkJobCoordinator.md::0001","path":"engine/reference/world/streaming/ChunkJobCoordinator.md","title":"world/streaming/ChunkJobCoordinator.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkJobCoordinator.js","updated":"","headings":["world/streaming/ChunkJobCoordinator.js","Classes","class ChunkJobCoordinator","Functions","encodeMorton3D(x, y, z)","decodeMorton3D(morton)","mortonBigmin(current, minMorton, maxMorton)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":2,"text":"for HUD display Compute visible chunks using BFS through open chunk faces (portal culling) Uses faceOpenness bits to traverse through connected air spaces Get visibility based priority boost for a chunk Returns higher priority for chunks reachable through open faces Get chunks in Morton order within a bounding box Uses Z order curve for cache friendly iteration Functions Encode 3D coordinates to Morton code (Z order curve) Preserves spatial locality for cache friendly iteration Parameters: (number) — X coordinate (0 to 1023) (number) — Y coordinate (0 to 1023) (number) — Z coordinate (0 to 1023) Returns: Morton code Decode Morton code back to 3D coordinates Parameters: (number) — Morton code Returns: } BIGMIN optimization: Find next Morton code inside query box Skips irrelevant ranges when iterating Morton ordered data Parameters: (number) — Current Morton code (number) — Min corner Morton code (number) — Max corner Morton code Returns: Next valid Morton code or 1 if none Constants — 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. <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"3597c0be6b4219b8dbf2b00791db7eed26b9aa12320794359260a8228933ef0e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkLoadingZone.md::0000","path":"engine/reference/world/streaming/ChunkLoadingZone.md","title":"world/streaming/ChunkLoadingZone.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkLoadingZone.js","updated":"","headings":["world/streaming/ChunkLoadingZone.js","Classes","class ChunkLoadingZone","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ChunkLoadingZone Manages player movement boundaries Method Signature Summary Update player position and check zones Check if player can move to position Get zone state at chunk position Check if all neighbors within radius are loaded Mark chunk as loaded Mark chunk as loading Mark chunk as pending Mark chunk as unloaded Get corrected position that respects barriers Get distance to nearest barrier Get all chunks in each zone around player Normalize direction vector Clear all chunk tracking Get stats Load configuration from engine.cfg section Constants — 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 <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"bc930ad9faf46137252c63c3522a1e7aa3af3c6f0d9ed969103ef529645dbbeb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkSeamSystem.md::0000","path":"engine/reference/world/streaming/ChunkSeamSystem.md","title":"world/streaming/ChunkSeamSystem.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkSeamSystem.js","updated":"","headings":["world/streaming/ChunkSeamSystem.js","Classes","class ChunkSeamSystem","Functions","chunkSeamStructureHash3D(x, y, z)","chunkSeamSeededStructureHash3D(x, y, z, seed)","chunkSeamChunkSeed3D(cx, cy, cz, seed = 0)","chunkSeamPositionSeed3D(x, y, z, seed = 0)","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize with external systems Register default structure generators Set the generation phase for a chunk Get the generation phase for a chunk Check if chunk has reached at least the given phase Check if all 6 face neighbors have reached the given phase Returns true if neighbor doesn't exist (will remesh when it loads) Check if chunk can be meshed (neighbors ready) NOTE: We now always allow meshing gaps are worse than seam artifacts Chunks will remesh when neighbors load to fix any edge issues Calculate all structure starts for a chunk This is deterministic based on seed + chunk coords Calculate deterministic tree positions for a chunk Get all structure references that may affect a chunk This checks the origin chunk AND all nearby chunks Place all structures that affect a chunk Call this during the STRUCTURES phase Generate tree voxels for a chunk from a structure reference Add a pending block for a chunk that may not exist yet Apply pending blocks to a chunk Generate deterministic seed for a chunk Generate deterministic seed for a world position Clear references for a chunk (when unloading) Get stats for debugging Functions Constants <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"12629cb6f897f0fa2cf52fe5b65de36688edf5b93063955f9dc72d67557d413e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkStreaming.md::0000","path":"engine/reference/world/streaming/ChunkStreaming.md","title":"world/streaming/ChunkStreaming.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkStreaming.js","updated":"","headings":["world/streaming/ChunkStreaming.js","Classes","class ChunkStreaming","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Begin frame reset budget Queue a chunk for loading Calculate priority for a chunk Process streaming queue for this frame Cancel pending load Clear all pending loads Get statistics Load configuration from engine.cfg section Re exports , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"eab8d528b411a4f0639ad81f51f914e56d417a085f956d0f243e2edc414ae83e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkStreamingCompute.md::0000","path":"engine/reference/world/streaming/ChunkStreamingCompute.md","title":"world/streaming/ChunkStreamingCompute.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkStreamingCompute.js","updated":"","headings":["world/streaming/ChunkStreamingCompute.js","Classes","class ChunkStreamingCompute","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Initialize the GPU streaming system Enable advanced terrain generation using GPUWorldGenerator Provides biomes, climate, caves, structures, erosion aware terrain Set world seed for terrain generation Find chunks to unload based on distance (GPU accelerated) Generate terrain for a chunk on GPU Batch generate terrain for multiple chunks 8 chunks per GPU dispatch Uses GPUWorldGenerator if advanced mode is enabled, otherwise basic terrain. Advanced terrain generation using GPUWorldGenerator Provides biomes, climate, caves, structures, erosion aware terrain Destroy all GPU resources <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"aad5bea191b1c090d238762b4fa0311616292188ba6594b7ca9385a1602ae837"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkUpdater.md::0000","path":"engine/reference/world/streaming/ChunkUpdater.md","title":"world/streaming/ChunkUpdater.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkUpdater.js","updated":"","headings":["world/streaming/ChunkUpdater.js","Classes","class ChunkUpdater","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ChunkUpdater.js Block Update Queue Manager Manages block updates with: Rate limited updates per frame Propagation for lighting/physics Lazy update batching Update coalescing Method Signature Summary Queue a block update Coalesce nearby updates Flush coalesced updates for a chunk Process updates for this frame Get statistics Clear all pending updates Load configuration from engine.cfg section <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"99675ebba79fa70faef0e50d3587a8520abd947d688b1f451bb622f2df91dc6c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ChunkWorkerPool.md::0000","path":"engine/reference/world/streaming/ChunkWorkerPool.md","title":"world/streaming/ChunkWorkerPool.js","description":"","kind":"reference","source":"engine/world/streaming/ChunkWorkerPool.js","updated":"","headings":["world/streaming/ChunkWorkerPool.js","Classes","class ChunkWorkerPool","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ChunkWorkerPool Manages a pool of Web Workers Method Signature Summary Initialize the worker pool Send message to specific worker Handle worker message Handle worker error Track task completion time Get an available worker index Process task queue Queue a task Generate terrain for a chunk Generate mesh for voxel data Generate terrain and mesh in one call Batch generate multiple chunks Get queue length Get busy worker count Check if pool is idle Update seed for all workers Get stats Load configuration from engine.cfg section Terminate all workers <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"1ff6480d5086fb7a5c7ab8bb875f21277a8fd6b830e4c4bc4570a25e8a0ed7b8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/MovementPredictor.md::0000","path":"engine/reference/world/streaming/MovementPredictor.md","title":"world/streaming/MovementPredictor.js","description":"","kind":"reference","source":"engine/world/streaming/MovementPredictor.js","updated":"","headings":["world/streaming/MovementPredictor.js","Classes","class MovementPredictor","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes MovementPredictor Predicts player movement for chunk prefetch Method Signature Summary Update with new player position Track prediction accuracy over time Get predicted chunk coordinates Check if prediction is active (player moving fast enough) Calculate priority boost for a chunk based on prediction Uses cascaded prediction tiers for different time horizons Get chunks that should be prioritized based on prediction Get current velocity Get movement direction (normalized) Get stats Reset state Load configuration from engine.cfg section <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"3e57c0bc2fc44b6c6b4b20aa95294e9a871336ff3b81c72f5fc6075cbf20de65"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/PriorityChunkLoader.md::0000","path":"engine/reference/world/streaming/PriorityChunkLoader.md","title":"world/streaming/PriorityChunkLoader.js","description":"","kind":"reference","source":"engine/world/streaming/PriorityChunkLoader.js","updated":"","headings":["world/streaming/PriorityChunkLoader.js","Classes","class PriorityChunkLoader","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: 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 Classes PriorityChunkLoader Manages chunk load ordering Method Signature Summary Rebuild the precomputed load orders Set load radius and rebuild orders Update player position and rebuild queues Prune queues remove chunks that are now too far away Called every position update to cancel unnecessary loads Re sort queues by distance without full rebuild More efficient when player moves within same chunk Rebuild load/mesh/unload queues based on player position Get load order based on current pattern Get directional load order (prioritize facing direction) Calculate priority for a chunk offset Calculate LOD level for a chunk based on distance Update FOV angle (call when camera FOV changes) Update FPS and adjust loading limits adaptively Call this every frame with current delta time or FPS Adjust loading limits based on current FPS Get current adaptive loads per frame Get current adaptive meshes per frame Process queues call once per frame Track load time for averaging Get chunks that should be loaded but aren't Get chunks waiting to be meshed Check if a specific chunk is loaded Check if a specific chunk is meshed Manually mark a chunk state Configure LOD distance thresholds Get current LOD for a chunk Get loading progress (0 1) Get visual representation of load state Get","contentHash":"9532b0c53b87c3ad7ef56dcd133906a47c068e7e6dc075aae707800a5fcda6f1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/PriorityChunkLoader.md::0001","path":"engine/reference/world/streaming/PriorityChunkLoader.md","title":"world/streaming/PriorityChunkLoader.js","description":"","kind":"reference","source":"engine/world/streaming/PriorityChunkLoader.js","updated":"","headings":["world/streaming/PriorityChunkLoader.js","Classes","class PriorityChunkLoader","Constants","Notes & Examples","World Streaming & Scenes"],"chunkIndex":1,"chunkCount":2,"text":"mark a chunk state Configure LOD distance thresholds Get current LOD for a chunk Get loading progress (0 1) Get visual representation of load state Get stats Clear all state Load configuration from engine.cfg section Constants <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"3b8e0fb0ad7a165d4c666ebfa5959698e035e3151bd38fbdc2eacde4b59d8395"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/ProgressiveChunkLoader.md::0000","path":"engine/reference/world/streaming/ProgressiveChunkLoader.md","title":"world/streaming/ProgressiveChunkLoader.js","description":"","kind":"reference","source":"engine/world/streaming/ProgressiveChunkLoader.js","updated":"","headings":["world/streaming/ProgressiveChunkLoader.js","Classes","class ProgressiveChunkLoader","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ProgressiveChunkLoader Manages progressive LOD loading Method Signature Summary Set callback functions Update camera state Register a chunk for progressive loading Unregister a chunk Update all chunk distances and queue refinements Check if a point is visible (basic frustum check) Build priority sorted refinement queue Process top refinements from queue Refine a chunk to the next level Process chunks that can be downgraded (moved away) Force immediate refinement of a chunk to target level Get current level for a chunk Get all sub meshes for a chunk at its current level Get statistics Re exports , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"ee9435c95c86a29da41058c0aebd053232c83aae87f5f2bc5693102ae7957b7e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/reference/world/streaming/index.md::0000","path":"engine/reference/world/streaming/index.md","title":"world/streaming/index.js","description":"","kind":"reference","source":"engine/world/streaming/index.js","updated":"","headings":["world/streaming/index.js","Re-exports","Notes & Examples","World Streaming & Scenes"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples World Streaming & Scenes The world system manages scene graphs, asset streaming, and level transitions. Scenes are entity hierarchies with spatial indexing (BVH) for fast culling and raycasts. Worlds stream assets asynchronously with priority based on distance and visibility. Example: Scene graph and streaming See also: Engine Overview","contentHash":"3c4c28f79a904f490081e126601eacdd244dafde53170ca443cf036fda248cb7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/rendering.md::0000","path":"engine/rendering.md","title":"Rendering Pipeline","description":"GPU-driven multi-pass rendering — frame structure, lighting, shader/debug modes, mesh rendering, half-res particle compositing, shadow atlas, and post-processing.","kind":"guide","source":"MD/engine/rendering.md","updated":"2026-08-03","headings":["Rendering Pipeline","Frame structure","Lighting system","Shader modes","Particle lighting integration","Mesh rendering","State-First representation capability floors","Half-resolution particle compositing","Grid renderer & shadow atlas","Debug visualization","Key files"],"chunkIndex":0,"chunkCount":3,"text":"GPU-driven multi-pass rendering — frame structure, lighting, shader/debug modes, mesh rendering, half-res particle compositing, shadow atlas, and post-processing. Rendering Pipeline GPU driven rendering with meshes, lights, materials, shader modes, and multi pass compositing. All rendering is built on the Virtual GPU (vGPU) abstraction. Frame structure A typical frame (from ) follows this pass order: Scene debug modes (steps 4, 8) skip all post processing (steps 9–14) so the debug output is clean and unmodified. Lighting system handles all lighting via a single GPU uniform buffer (832 bytes). It supports sun (directional), ambient, and dynamic point lights. Property Default Description FROM light direction (steep overhead) Warm white sun Sun brightness multiplier Cool ambient fill Ambient brightness Final multiplier on all lighting Direction convention: is the FROM light direction. The shader negates it internally ( ). SDF/Cloth/Rope renderers receive the already negated TO light direction from the Viewport. Shader modes Four debug modes controlled by and : Mode lightingMode debugMode Output Standard Full sun + ambient + dynamic lights Unlit Albedo color only, no lighting Normals World space normals ( ) Depth Distance based depth gradient Particle lighting integration Particles interact with lighting three ways: Receive — particles sample sun + ambient from frame uniforms. Emit — hot particles (fire/plasma) become dynamic point lights via . Shadow/tint — smoke dims sunlight ( ); fire tints it warm ( ). Mesh rendering Entity meshes are rendered by , which reads from ECS and components. Each entity gets a per object uniform buffer (its model matrix) and a bind group linking the uniform to the shader. State First representation capability floors State First semantic","contentHash":"9cbc41b281cec341ac4d97d7b99712a225da7d3e5f60c43cc724fd094e1f61bc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/rendering.md::0001","path":"engine/rendering.md","title":"Rendering Pipeline","description":"GPU-driven multi-pass rendering — frame structure, lighting, shader/debug modes, mesh rendering, half-res particle compositing, shadow atlas, and post-processing.","kind":"guide","source":"MD/engine/rendering.md","updated":"2026-08-03","headings":["Rendering Pipeline","Frame structure","Lighting system","Shader modes","Particle lighting integration","Mesh rendering","State-First representation capability floors","Half-resolution particle compositing","Grid renderer & shadow atlas","Debug visualization","Key files"],"chunkIndex":1,"chunkCount":3,"text":"object uniform buffer (its model matrix) and a bind group linking the uniform to the shader. State First representation capability floors State First semantic sources may set on an entity when their renderer does not implement every generic representation. The planner still returns for a hidden or out of frustum entity, but a visible entity cannot fall below its declared floor. This prevents a quality profile from asking an integration to draw a , , or when only a faithful mesh renderer exists. Actuated City Drive declares for its 13 rigged vehicles. State First continues to cull hidden cars, while every visible car uses the same body, glass, lights, wheels, steering, and suspension renderer as Native mode. It does not substitute chassis sized boxes. (Sources: , .) Half resolution particle compositing Particles render at half resolution for performance, then composite onto the main scene: 1. The SDF shader outputs — non premultiplied. 2. The SDF pipeline renders into a half res texture with alpha blend. 3. The half res texture starts cleared to ; after alpha blend, RGB = lit × alpha (premultiplied). 4. The composite pass uses fully additive blend ( ) onto the scene. Implication: with additive composite, particles can only brighten the scene, never darken it. Fire needs very low alpha (0.03–0.08) plus bright emission (2–5×) to avoid saturating the half res buffer into a solid red wall. Grid renderer & shadow atlas draws the ground plane as a solid fill (alpha 0.85) with sun + ambient lighting, receiving lighting from via each frame. provides unified shadow rendering: all casters (entities, ropes, particles) render into a shared 4096² depth texture, then shadows are composited per category with independent PCF, bias, and strength. Caster categories: ( ), ( shadow pass), (","contentHash":"cc207c9c85c4322151d21330685b5cdba23a7c621589beb9405936c69d19c410"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/rendering.md::0002","path":"engine/rendering.md","title":"Rendering Pipeline","description":"GPU-driven multi-pass rendering — frame structure, lighting, shader/debug modes, mesh rendering, half-res particle compositing, shadow atlas, and post-processing.","kind":"guide","source":"MD/engine/rendering.md","updated":"2026-08-03","headings":["Rendering Pipeline","Frame structure","Lighting system","Shader modes","Particle lighting integration","Mesh rendering","State-First representation capability floors","Half-resolution particle compositing","Grid renderer & shadow atlas","Debug visualization","Key files"],"chunkIndex":2,"chunkCount":3,"text":"into a shared 4096² depth texture, then shadows are composited per category with independent PCF, bias, and strength. Caster categories: ( ), ( shadow pass), ( , round billboard shadows). Debug visualization A two tier debug system, accessible via the editor's view mode dropdown. Scene wide modes (post process) read the actual hardware depth buffer (meshes + ropes) and composite with a particle depth color texture, via : Mode Technique Output Depth Buffer Linearize + particle depth composite Grayscale: near=white, far=black Normal Maps Finite difference world normals from composite depth RGB = XYZ world space normals Why two sources? Particles use (transparent billboards), so they never appear in the hardware depth","contentHash":"26e9c97d5c661c489cf1ce8f9fa25f8dcf7f7d6ab8b89ddfa4405e02f250236e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/shaders.md::0000","path":"engine/shaders.md","title":"Shaders & WGSL","description":"The modular WGSL shader system — organization, ShaderComposer, the WGSL preprocessor, shader reflection, compilation via vGPU, and common patterns.","kind":"guide","source":"MD/engine/shaders.md","updated":"2026-06-05","headings":["Shaders & WGSL","Shader organization","ShaderComposer","WGSL preprocessor","Shader reflection","Compilation via vGPU","Common pattern: billboard circle clipping"],"chunkIndex":0,"chunkCount":1,"text":"The modular WGSL shader system — organization, ShaderComposer, the WGSL preprocessor, shader reflection, compilation via vGPU, and common patterns. Shaders & WGSL A modular WGSL shader system with composition, preprocessing, a shared library of reusable modules, and the for assembling complex shaders from parts. Shader organization ShaderComposer assembles complex shaders from a library of reusable WGSL modules. Modules are registered by name and injected at compile time, avoiding duplicate functions (e.g. lighting) across shaders. The composer resolves the to inject WGSL function definitions before your main code. WGSL preprocessor supports C style directives before compilation: Shader reflection parses WGSL source to extract bind group layouts, struct definitions, and entry points, enabling automatic pipeline layout generation from shader source. Compilation via vGPU All shader compilation goes through (see Virtual GPU): Important: use instead of in compute shaders and non uniform control flow — WebGPU validation rejects outside uniform control flow. Common pattern: billboard circle clipping Particle debug shaders render billboard quads with vertices .. . The fragment shader must discard corners to produce circular particles: Without the hard clip, still passes the 0.01 threshold, making particles appear as squares.","contentHash":"ad1bcce89041171f200e3070a60ef5c29f9ede995a942c058226a30d059f1225"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/vgpu.md::0000","path":"engine/vgpu.md","title":"Virtual GPU (vGPU)","description":"The unified GPU abstraction that powers every engine system — automatic caching, pooling, and resource management over raw WebGPU, via six core managers plus advanced subsystems.","kind":"guide","source":"MD/engine/vgpu.md","updated":"2026-06-05","headings":["Virtual GPU (vGPU)","Quick start","Initialization","The 6 core managers","vgpu.buffer — buffer management","vgpu.bindings — layouts & bind groups","vgpu.shader — shader compilation","vgpu.pipeline — render & compute pipelines","vgpu.texture — textures & samplers","vgpu.command — command encoding","Advanced subsystems","Common patterns","Simple compute shader","Frame lifecycle & stats","Before & after","Device properties & cleanup"],"chunkIndex":0,"chunkCount":2,"text":"The unified GPU abstraction that powers every engine system — automatic caching, pooling, and resource management over raw WebGPU, via six core managers plus advanced subsystems. Virtual GPU (vGPU) is the unified GPU abstraction layer that powers every system in the engine. It wraps raw WebGPU with automatic caching, pooling, and resource management — turning 20 lines of boilerplate into one. This is the most important concept in the engine's GPU layer. Every renderer, simulation system, and compute shader goes through vGPU. It is the user space GPU service the OS mediates (see GPU Device Sharing). Source: . Quick start No flags, no bind group layout descriptors, no pipeline layout boilerplate — vGPU handles it. Initialization Three ways to get a vGPU instance: The 6 core managers Every vGPU instance exposes six manager objects — the primary API you'll use daily. — buffer management Create, write, and manage GPU buffers with automatic usage flag resolution and optional pooling. Usage strings map to WebGPU flags: String WebGPU flags Combined flags (pipe separated) — layouts & bind groups Define named layouts and create bind groups with caching and deduplication. Binding type strings: , , , , , . Visibility strings are pipe separated stage names: , , , . — shader compilation Compile WGSL with automatic caching, preprocessor defines, and hot reload support. — render & compute pipelines Create and cache pipelines with simplified blend state resolution. Blend strings: (opaque), (srcAlpha, oneMinusSrcAlpha), (one, one), (one, oneMinusSrcAlpha). Automatic caching: pipelines are keyed by their full configuration. Calling twice with identical options returns the cached pipeline instantly — zero GPU work. — textures & samplers — command encoding Advanced subsystems Beyond the six","contentHash":"c3572a4d4098f5060749ed9ccb185ef1e2a59939b07ccbdcfbae059a893e29d9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"engine/vgpu.md::0001","path":"engine/vgpu.md","title":"Virtual GPU (vGPU)","description":"The unified GPU abstraction that powers every engine system — automatic caching, pooling, and resource management over raw WebGPU, via six core managers plus advanced subsystems.","kind":"guide","source":"MD/engine/vgpu.md","updated":"2026-06-05","headings":["Virtual GPU (vGPU)","Quick start","Initialization","The 6 core managers","vgpu.buffer — buffer management","vgpu.bindings — layouts & bind groups","vgpu.shader — shader compilation","vgpu.pipeline — render & compute pipelines","vgpu.texture — textures & samplers","vgpu.command — command encoding","Advanced subsystems","Common patterns","Simple compute shader","Frame lifecycle & stats","Before & after","Device properties & cleanup"],"chunkIndex":1,"chunkCount":2,"text":"twice with identical options returns the cached pipeline instantly — zero GPU work. — textures & samplers — command encoding Advanced subsystems Beyond the six core managers, vGPU includes 20+ specialized modules as properties on the instance. Enhancement modules: (labels/markers), (streaming uploads), (GPU timing), (work scheduling), (render bundles), (mipmap gen), (occlusion/stats), (async pre compile). Resource management: (non blocking GPU→CPU), (usage tracking/budgets), (material bind groups), (resource transitions), (dynamic resolution), (draw calls, triangles). Advanced rendering (lazy initialized via factory methods): (pass scheduling + resource aliasing), (GPU driven indirect draws), (hierarchical Z occlusion), (texture/mesh streaming), (immediate mode debug shapes). Compute & shader utilities: (reduction/scan/fill/copy), (WGSL macros/includes), (shader introspection), , , (timeline sync). Common patterns Simple compute shader Frame lifecycle & stats Before & after Creating a particle compute pipeline takes 68 lines of raw WebGPU vs 12 with vGPU — about 82% less code , plus automatic caching, pooling, memory tracking, and debug labels for free. Device properties & cleanup","contentHash":"1a8ae85cc2402d6e59ff5d66c482e48d6b7469a6dbed4051006863c1ea263a61"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/faq.md::0000","path":"getting-started/faq.md","title":"FAQ & Troubleshooting","description":"Common questions and fixes — Node.js, HTTP serving, browser support, and verifying WebGPU availability.","kind":"guide","source":"MD/getting-started/faq.md","updated":"2026-06-05","headings":["FAQ & Troubleshooting","General","WebGPU OS","Documentation viewers","Engine / AGI"],"chunkIndex":0,"chunkCount":2,"text":"Common questions and fixes — Node.js, HTTP serving, browser support, and verifying WebGPU availability. FAQ & Troubleshooting Common questions and fixes. If something here is wrong or missing, follow the Contribution Workflow to update it. General Do I need Node.js or npm? No. The entire stack and the documentation tooling are pure browser + Python. There is no build step required to run anything. Why does everything need an HTTP server? Browsers block and ES module from URLs. Serve over HTTP with and use . Which browser do I need? Use a current browser release that exposes WebGPU on your operating system and GPU. Browser version alone is not proof of capability. Verify that exists and that returns an adapter. Update the browser and GPU driver if either check fails. Does the WebGPU OS Companion enable WebGPU or compatibility mode? No. Compatibility mode belongs to the browser's WebGPU implementation. The optional Companion extension supplies approved browser and provider integrations for WebGPU OS; it cannot make an unsupported GPU/browser combination support WebGPU. The engine and Playground run without the Companion when browser WebGPU is available. WebGPU OS The boot loader is stuck or shows \"Boot failed\". Open the console. The boot sequence logs each phase. Common causes: WebGPU unavailable, shell root elements missing from the DOM, or an app/mod discovery error (these are logged as warnings and do not block boot). How do I see security posture? Boot with or set . This runs the syscall guard audit, capability map drift check, and Security Doctor, logging results. See Security & Trust Model. Where do apps live, and why aren't they bundled? Apps are discovered and fetched at runtime from (and mods from ). They are intentionally not bundled so they can be added/updated","contentHash":"5c8c93691ce53e1c0e12b86c7801ebae1cdd436d753cc75211fbeed64496ba80"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/faq.md::0001","path":"getting-started/faq.md","title":"FAQ & Troubleshooting","description":"Common questions and fixes — Node.js, HTTP serving, browser support, and verifying WebGPU availability.","kind":"guide","source":"MD/getting-started/faq.md","updated":"2026-06-05","headings":["FAQ & Troubleshooting","General","WebGPU OS","Documentation viewers","Engine / AGI"],"chunkIndex":1,"chunkCount":2,"text":"and why aren't they bundled? Apps are discovered and fetched at runtime from (and mods from ). They are intentionally not bundled so they can be added/updated without rebuilding the OS. Documentation viewers The viewer shows \"Could not load navigation\". You opened the viewer from . Serve over HTTP. Code blocks are unstyled and Mermaid diagrams don't render. The vendored libraries are missing. Run . The viewer falls back to a built in Markdown renderer so pages still load. A reference page says \"(run extract api.py)\" in the sidebar. The API reference hasn't been generated yet. Run then . Search returns nothing / only titles. The search index isn't built. Run to create . Without it, the viewer falls back to title only search. Engine / AGI AGI training won't progress. Confirm WebGPU support, verify 60 FPS physics, and review reward weights. See the Training Guide. Performance is poor. Close other tabs, reduce buffer sizes, disable debug visualizations, and check GPU utilization.","contentHash":"948cd1899bc0af98020e15092c22faba51f28368b9cf40761f6aaf2857197ff7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/glossary.md::0000","path":"getting-started/glossary.md","title":"Glossary","description":"Definitions of the core terms used across the docs — stack and runtime, GPU concepts, kernel, shell, and more.","kind":"guide","source":"MD/getting-started/glossary.md","updated":"2026-08-02","headings":["Glossary","Stack & runtime","GPU","MorphField","OS concepts","ECS","AGI / ML","Navi","Realm Network"],"chunkIndex":0,"chunkCount":3,"text":"Definitions of the core terms used across the docs — stack and runtime, GPU concepts, kernel, shell, and more. Glossary Terms used throughout this documentation. Each term is defined once here and linked from the pages that use it. Stack & runtime Engine — the WebGPU runtime in : GPU device, frame graph, ECS, rendering, simulation, networking, audio. Plauna — the hybrid DOM/GPU UI framework in (panels, widgets, surfaces, theming). AGI — the reinforcement learning rigging system in (\"parasite rig\"), plus a WebGPU tensor library and AGI Studio. WebGPU OS — the composition layer in : compositor, shell, kernel, package system, app runtime. Kernel — the OS's privileged core ( ): syscalls, scheduling, GPU mediation, trust, permissions. Shell — the desktop UI ( ): , , , windows, notifications. GPU WebGPU — the browser GPU API the whole stack targets. WGSL — WebGPU Shading Language; the portable shader format used across tiers. VGPU (Virtual GPU) — the engine's abstraction over the raw WebGPU device ( ) that adds multi queue, bind group management, streaming, and resource tracking. GPU device broker — the kernel service ( ) that shares the single WebGPU device across all apps. device lost — a WebGPU event raised when the GPU context is lost; the kernel fans this out to apps for recovery. MorphField MorphField — the Engine's additive semantic field renderer and compiler under . Nexel — a public semantic scene element that describes source geometry or media, material, motion, collision, simulation, and quality intent without selecting a GPU backend. Fieldlet — MorphField's private compiled execution record. A Fieldlet belongs to one of four stable execution families and exposes a mask of supported typed queries. Certified query — a query backed by compiler derived conservative","contentHash":"8a9b8977572f25acc4ba523da49aaa6467ad550bc3657ab52ac21c856c6413e1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/glossary.md::0001","path":"getting-started/glossary.md","title":"Glossary","description":"Definitions of the core terms used across the docs — stack and runtime, GPU concepts, kernel, shell, and more.","kind":"guide","source":"MD/getting-started/glossary.md","updated":"2026-08-02","headings":["Glossary","Stack & runtime","GPU","MorphField","OS concepts","ECS","AGI / ML","Navi","Realm Network"],"chunkIndex":1,"chunkCount":3,"text":"to one of four stable execution families and exposes a mask of supported typed queries. Certified query — a query backed by compiler derived conservative bounds or error records. Authored data cannot declare itself certified. OS concepts App — a plug in module discovered at runtime from , described by a manifest. Manifest — the JSON describing an app: id, entry, permissions, capabilities (see App Manifest Spec). Package ( ) — an installable, signed, encrypted container (v2 = encrypted ZIP + public envelope). Mod — a runtime extension discovered from via . Syscall — a kernel mediated operation exposed to apps ( ). Capability — a permission token gating a syscall or resource (see ). Trust ring / ring 0 roots — the trust hierarchy; ring 0 roots live in . Provenance — verifiable origin/lineage of a package ( , ). Surface — a renderable region (DOM, DOM+GPU, or pure GPU) managed by /Plauna. Workspace / Panel — Plauna's dockable window units; every OS window is a Plauna panel. ECS ECS — Entity Component System; the engine's state model. Entity — an id; Component — data attached to an entity; System — logic over components. World — a container of entities/components/systems (the engine and Plauna each have worlds). AGI / ML PPO — Proximal Policy Optimization, the RL algorithm used to train the rig. Tensor library — the custom WebGPU tensor implementation in . Curriculum — the staged training progression ( ). Ragdoll — the physics body the rig learns to control ( ). Observation / Action space — the RL input (12D) and output (17D) vectors. Navi Navi — a persistent OS principal whose identity, authority, memory, and lineage remain independent from any model, provider, session, device, or body. Continuity Kernel — the kernel owned Navi service that protects persistent identity and","contentHash":"3e7ab95a5b2360756630add6722b9261e48996ae4f1a0a5de93bf69c0bcd74bc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/glossary.md::0002","path":"getting-started/glossary.md","title":"Glossary","description":"Definitions of the core terms used across the docs — stack and runtime, GPU concepts, kernel, shell, and more.","kind":"guide","source":"MD/getting-started/glossary.md","updated":"2026-08-02","headings":["Glossary","Stack & runtime","GPU","MorphField","OS concepts","ECS","AGI / ML","Navi","Realm Network"],"chunkIndex":2,"chunkCount":3,"text":"remain independent from any model, provider, session, device, or body. Continuity Kernel — the kernel owned Navi service that protects persistent identity and operational signing authority. Covenant — the signed operator Navi contract that bounds observation, memory, autonomy, disclosure, approvals, transfer, recovery, and separation. Cognition Fabric — the model neutral router that selects replaceable remote or local cognition engines while preserving task continuity. Faculty — a signed, versioned, inspectable ability module with typed inputs and outputs, declared permissions, tools, models, costs, tests, and failure behavior. Causal Memory Weave — append only evidence bearing Navi memory and its derived","contentHash":"18f4b906dd1d49d7bed72212b2889489d9e2cc4edaa6cf9e9cb5684bcc24673f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/install.md::0000","path":"getting-started/install.md","title":"Install & Run","description":"Prerequisites (a WebGPU browser and Python — no Node.js) and how to serve the stack and these docs locally without a compile step.","kind":"guide","source":"MD/getting-started/install.md","updated":"2026-06-05","headings":["Install & Run","Prerequisites","Platform downloads and the optional network service","Serve the project","WebGPU compatibility and the Companion are different","Set up the documentation tooling","1. Vendor the viewer's front-end libs locally (offline, no CDN)","2. Generate the per-symbol API reference from source","3. Build the search index and validate navigation","Optional: MkDocs Material site","Troubleshooting"],"chunkIndex":0,"chunkCount":2,"text":"Prerequisites (a WebGPU browser and Python — no Node.js) and how to serve the stack and these docs locally without a compile step. Install & Run This page covers prerequisites and how to serve the stack and these docs locally. Everything runs in the browser — there is no compile step. Prerequisites A current WebGPU capable browser — support depends on the browser release, operating system, GPU, and driver. Confirm that exists and that returns an adapter. Localhost is treated as a secure context; deployed sites must use HTTPS. Python 3.x — used only to serve files over HTTP and to run the docs tooling. There is no Node.js dependency . A dedicated GPU is recommended for the engine, AGI training, and GPU heavy apps. Platform downloads and the optional network service Platform downloads: BTSpaniel/particlerealms.engine publishes browser ready distribution artifacts, including the compressed bundles. It is the public download repository, not the source tree used to generate this API reference. Optional master server source: BTSpaniel/particlerealms.engine master server is a separate discovery, admission, encrypted signaling, TURN, and trusted node service. It is never gameplay authority and is not required to run the engine or Playground locally. Serve the project The repository ships a static HTTP server. From the repository root ( ): Then open the relevant entry point in a WebGPU browser: WebGPU OS — Editor — AGI Studio — These docs (zero build viewer) — Why a server? The viewers and the OS load Markdown, JSON, and ES modules with / , which browsers block from URLs. Always serve over HTTP. WebGPU compatibility and the Companion are different WebGPU compatibility mode is a browser/adapter capability intended for systems backed by older native graphics APIs. When available,","contentHash":"630f8c894a9a16d0223f3cb5df6dd01a15a92c2287fdc8d1b6aba254dfaf6ce1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/install.md::0001","path":"getting-started/install.md","title":"Install & Run","description":"Prerequisites (a WebGPU browser and Python — no Node.js) and how to serve the stack and these docs locally without a compile step.","kind":"guide","source":"MD/getting-started/install.md","updated":"2026-06-05","headings":["Install & Run","Prerequisites","Platform downloads and the optional network service","Serve the project","WebGPU compatibility and the Companion are different","Set up the documentation tooling","1. Vendor the viewer's front-end libs locally (offline, no CDN)","2. Generate the per-symbol API reference from source","3. Build the search index and validate navigation","Optional: MkDocs Material site","Troubleshooting"],"chunkIndex":1,"chunkCount":2,"text":"Companion are different WebGPU compatibility mode is a browser/adapter capability intended for systems backed by older native graphics APIs. When available, it still appears through the browser's WebGPU interfaces. It does not come from an extension and may expose lower limits or fewer optional features, so rely on adapter, feature, and limit checks instead of a browser name test. The WebGPU OS Companion Chrome extension is an optional bridge for approved browser controls, provider connectivity, and other OS integrations. It cannot add WebGPU to an unsupported browser, GPU, or driver. The engine and Playground use browser WebGPU directly; install the Companion only for the OS features that explicitly request it. Set up the documentation tooling The docs are plain Markdown, but a few Python helpers build derived artifacts. From : After step 1, open to browse. Optional: MkDocs Material site For the polished static site experience: See Contribution Workflow for the full build/lint pipeline. Troubleshooting Blank page / CORS errors — you opened a URL. Serve over HTTP instead. \"WebGPU not available\" — update your browser or enable WebGPU; verify with in the console. Viewer renders unstyled code / no diagrams — run . The viewer still works via its built in fallback, but without syntax highlighting or Mermaid. More in FAQ & Troubleshooting.","contentHash":"439f738818999c3ba4a2c2a8f18c392914121595d1161ea5d3ce9ee514f7abbc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/overview.md::0000","path":"getting-started/overview.md","title":"Overview","description":"What the WebGPU OS stack is, the five subsystems (engine, editor, Plauna, AGI, WebGPU OS), who each part is for, and where to go next.","kind":"guide","source":"MD/getting-started/overview.md","updated":"2026-06-05","headings":["Overview","The five subsystems","Design principles (shared across the stack)","Who should read what","Next steps"],"chunkIndex":0,"chunkCount":2,"text":"What the WebGPU OS stack is, the five subsystems (engine, editor, Plauna, AGI, WebGPU OS), who each part is for, and where to go next. Overview This page explains what the stack is, who each part is for, and where to go next. Read it first if you are new to the project. The five subsystems Subsystem What it is Audience Source Engine Browser resident WebGPU runtime: GPU device, frame graph, ECS, rendering, simulation, networking, audio. Engine/graphics/sim developers Editor Scene and asset authoring IDE built on the engine. Content creators, tools developers Plauna Hybrid DOM/GPU UI framework and workbench (panels, widgets, surfaces, theming). UI/app developers AGI Reinforcement learning \"parasite rig\" that learns to control humanoid ragdolls, plus a WebGPU tensor library and AGI Studio. ML/animation developers WebGPU OS Composition glue: a GPU first compositor, shell, kernel, package system, and app runtime that turns the above into a desktop like OS in a browser tab. App/package developers, end users Design principles (shared across the stack) Pure browser runtime — no Node.js dependency, no build step required to run. GPU first — heavy work runs on WebGPU compute; a single GPU device is shared. ECS driven — state lives in components. Modular — each subsystem is independent and testable, consumed by the next as a library. Composition, not forking — consumes , , , ; fixes go upstream, not into the glue layer. Who should read what End users of the OS: WebGPU OS Overview → App Catalog. App / package developers : WebGPU OS Architecture, the kernel API Reference , and the Security & Trust Model. Engine / UI / ML developers : the relevant subsystem Overview + Architecture + API Reference . Documentation contributors : Docs Style Guide and Contribution Workflow. Next steps 1.","contentHash":"bc97517647f7c44e6a3a5b12bd1b0f5d34a9cda5eb74f0e25d14e85b6a1e1fe8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/overview.md::0001","path":"getting-started/overview.md","title":"Overview","description":"What the WebGPU OS stack is, the five subsystems (engine, editor, Plauna, AGI, WebGPU OS), who each part is for, and where to go next.","kind":"guide","source":"MD/getting-started/overview.md","updated":"2026-06-05","headings":["Overview","The five subsystems","Design principles (shared across the stack)","Who should read what","Next steps"],"chunkIndex":1,"chunkCount":2,"text":": the relevant subsystem Overview + Architecture + API Reference . Documentation contributors : Docs Style Guide and Contribution Workflow. Next steps 1. Install & Run — get the stack serving locally. 2. Quickstart — boot the OS and open your first app. 3. Architecture Overview — the big picture. 4. Glossary — terms used throughout these docs.","contentHash":"075de94a26fabc027061454df2fa542f7114cde1adafebb4d319e1848dc4ed9e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"getting-started/quickstart.md::0000","path":"getting-started/quickstart.md","title":"Quickstart","description":"Boot the WebGPU OS and open your first app after installing, using the bundled local Python HTTP server.","kind":"guide","source":"MD/getting-started/quickstart.md","updated":"2026-06-05","headings":["Quickstart","1. Boot the OS","then browse to:","http://127.0.0.1:9001/webgpu-os/","2. Boot programmatically (embedding)","3. Open an app","4. Run a security self-audit (optional)","Where to go next"],"chunkIndex":0,"chunkCount":1,"text":"Boot the WebGPU OS and open your first app after installing, using the bundled local Python HTTP server. Quickstart This guide boots the WebGPU OS and opens an app. It assumes you have completed Install & Run. 1. Boot the OS Serve the repo and open the OS: The boot loader shows progress ( ). When it finishes, is ready and the desktop appears. 2. Boot programmatically (embedding) exports a side effect free boot function you can call yourself: The thin simply calls this on for plain ES module usage. 3. Open an app Apps are discovered at runtime from (see ). From the desktop, open the Start Menu and launch any app — for example Terminal , Files , or Settings . The full list is in the App Catalog. 4. Run a security self audit (optional) Append to the URL (or set ) to run the syscall guard audit, capability map drift check, and Security Doctor on boot. Results are logged to the console. See the Security & Trust Model. Where to go next Build an app/package: WebGPU OS Architecture. Understand boot internals: Boot Sequence. Understand GPU sharing across apps: GPU Device Sharing.","contentHash":"e0663de596769484340655b6a0f2fb17786d7fb21fe2cc5efb8c6f0f6ba1f278"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"guides/capabilities.md::0000","path":"guides/capabilities.md","title":"Capabilities — What You Can Build","description":"A routing/decision map for the whole stack — which subsystem to use for each goal, public API maps (engine, Plauna, AGI), rendering/physics recipes, bundle targets, the editor module map, and AI editing rules.","kind":"guide","source":"MD/guides/capabilities.md","updated":"2026-06-05","headings":["Capabilities — What You Can Build","Decision map","What you can build","Core engine runtime","Public engine API map","Rendering","Particles, matter, and fluids","Physics and active bodies","Plauna UI runtime","AGI Core","Editor","Bundled runtime","Engine / public playground bundle","Full platform: Engine + Editor + Plauna + AGI Core","Template starter","AI editing rules for this stack"],"chunkIndex":0,"chunkCount":3,"text":"A routing/decision map for the whole stack — which subsystem to use for each goal, public API maps (engine, Plauna, AGI), rendering/physics recipes, bundle targets, the editor module map, and AI editing rules. Capabilities — What You Can Build What the stack can actually build: browser native WebGPU games, simulation sandboxes, tools, editors, UI systems, AI training experiments, and deployable single file runtimes. Use this page to pick the right subsystem before writing code. Decision map Goal Use Primary files Docs WebGPU buffer/pipeline/compute work vGPU vGPU Game state, entities, components ECS , ECS v2 Visual frame, render passes, debug views Rendering Rendering Particles, fire, fluid, matter demos Particle System , Particles Menus, HUDs, app panels Plauna Plauna Training, observations, rewards, neural agents AGI Core AGI Scene authoring and inspection Editor , Editor New app / prototype Template , Template starter Primary entry points: engine → · compiled global → · Plauna → · AGI → · editor → · template → . What you can build GPU simulation demos — particles, fluids, boids, wave optics, ray/path tracing, reaction diffusion, sand, thermal systems, terrain, state first rasterization, diagnostic scenes. Living worlds — ECS driven worlds with items, rules, events, saves, AI state, perception, laws, factions, social graphs, and procedural simulation layers. Physics sandboxes — rigid bodies, GPU physics, PBD ragdolls, active rig controllers, cloth, rope, fluids, soft body hooks, constraints, collision debug, PhysX backed editor workflows. Visual tools — browser editor workflows with viewport, inspector, hierarchy, world settings, gizmos, particles, audio patches, materials, project saves, runtime debug modes. Core engine runtime The engine exports a single public API","contentHash":"5c765181d22eda718786f892b9d3fd785612540b5893061166e98575a66b066b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"guides/capabilities.md::0001","path":"guides/capabilities.md","title":"Capabilities — What You Can Build","description":"A routing/decision map for the whole stack — which subsystem to use for each goal, public API maps (engine, Plauna, AGI), rendering/physics recipes, bundle targets, the editor module map, and AI editing rules.","kind":"guide","source":"MD/guides/capabilities.md","updated":"2026-06-05","headings":["Capabilities — What You Can Build","Decision map","What you can build","Core engine runtime","Public engine API map","Rendering","Particles, matter, and fluids","Physics and active bodies","Plauna UI runtime","AGI Core","Editor","Bundled runtime","Engine / public playground bundle","Full platform: Engine + Editor + Plauna + AGI Core","Template starter","AI editing rules for this stack"],"chunkIndex":1,"chunkCount":3,"text":"world settings, gizmos, particles, audio patches, materials, project saves, runtime debug modes. Core engine runtime The engine exports a single public API through (source mode) or (compiled bundle mode). Public engine API map Category Common exports Use for Version , , , Runtime identity, diagnostics, release banners Math , , , , Transforms, camera math, simulation utilities ECS , , , Entity state and system stepping Gameplay , , , World rules, events, perception, AI state Saves , , Local persistence and schema aware saves Animation , , , Motion matching, animation datasets, rig features GPU , , , WebGPU device, buffers, shaders, pipelines, compute Compiled runtime pattern: Rendering Classic scene rendering plus experimental research paths (see Rendering): Scene rendering — entities, instancing, mesh segments, materials, lighting, shadows, debug visualizations. Post processing — tonemapping, bloom, temporal reconstruction, FSR/TSR style upscaling, depth/normal debug passes. Path tracing — engine native path tracing foundation, ReSTIR GI experiments, guide buffers, temporal accumulation. Spectral rendering — coherent wave optics pass (double slit demo). State first rendering — CPU/GPU visibility, representation selection, temporal visibility, cluster expansion, GPU culling. Proxy geometry — ray portal proxy with TLAS/BLAS, SDF, billboard, impostor, octahedral cache tiers. Need Start with Notes Normal 3D scene + ECS transforms Use existing passes before adding a new renderer Experimental GI/path tracing (via EngineBootstrap) Playground demos consume it through compiled Many simple visible objects State first rasterizer/culler APIs Use representation selection + GPU culling Debug visual output Scene debug visualizer + editor view modes Prefer debug modes over console only","contentHash":"332c6129aa3c953d313715d6b2052ffc97b727a5ec0e5d4f87c171c381fddea8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"guides/capabilities.md::0002","path":"guides/capabilities.md","title":"Capabilities — What You Can Build","description":"A routing/decision map for the whole stack — which subsystem to use for each goal, public API maps (engine, Plauna, AGI), rendering/physics recipes, bundle targets, the editor module map, and AI editing rules.","kind":"guide","source":"MD/guides/capabilities.md","updated":"2026-06-05","headings":["Capabilities — What You Can Build","Decision map","What you can build","Core engine runtime","Public engine API map","Rendering","Particles, matter, and fluids","Physics and active bodies","Plauna UI runtime","AGI Core","Editor","Bundled runtime","Engine / public playground bundle","Full platform: Engine + Editor + Plauna + AGI Core","Template starter","AI editing rules for this stack"],"chunkIndex":2,"chunkCount":3,"text":"APIs Use representation selection + GPU culling Debug visual output Scene debug visualizer + editor view modes Prefer debug modes over console only diagnosis Particles, matter, and fluids Built for large GPU workloads and material behavior, not just sprites (see Particles): high count GPU particles (compaction, sorting, billboards, trails, decals, bonds, adaptive quality); matter states (solid/liquid/gas/plasma); thermal behavior (temperature, heat transfer, phase transitions); SPH fluids + volume fields; interaction (SDF collision, flocking/boids, terrain/sandbox demos). Physics and active bodies Engine physics modules + PhysX integration + active ragdoll architecture (see Physics and GPU Phys","contentHash":"515cf890d78d282a72b9f04a12ac849c61602526ec427e39c735fd5cd8f42d71"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"guides/engine-stack-usage.md::0000","path":"guides/engine-stack-usage.md","title":"Engine Stack Usage Guide","description":"The practical \"how do I build with this?\" guide — choosing a bundle, runtime loading, minimal apps, ECS/render/particle conventions, Plauna, AGI Core, the editor, and the release checklist.","kind":"guide","source":"MD/guides/engine-stack-usage.md","updated":"2026-06-05","headings":["Engine Stack Usage Guide","1. Which build should you use?","Engine-only bundle","Full platform bundle","Ad-hoc bundle","2. Runtime loading pattern","3. Minimal Engine app","4. WebGPU initialization pattern","5. ECS conventions","6. Rendering conventions","7. Particle system usage","8. Plauna UI usage","9. AGI Core usage","10. Editor workflow","11. Template folder usage","12. Project starter template","13. What to build first","14. Release checklist","15. Design rules for this repository"],"chunkIndex":0,"chunkCount":3,"text":"The practical \"how do I build with this?\" guide — choosing a bundle, runtime loading, minimal apps, ECS/render/particle conventions, Plauna, AGI Core, the editor, and the release checklist. Engine Stack Usage Guide Version targets: Engine , Editor , Plauna , AGI Core . This guide is the practical \"how do I build with this?\" document for the full stack: Particle Engine : WebGPU, ECS, rendering, particles, physics, audio, saves, gameplay systems. Plauna : retained mode UI runtime for menus, HUDs, tools, dashboards, and editor like panels. AGI Core : training/control utilities for neural, ragdoll, motion, and simulation agents. Editor : visual scene/project tool for authoring, inspecting, testing, and exporting. Template : a copyable starter app at . Use this guide when starting a new game, demo, tool, or prototype. 1. Which build should you use? Engine only bundle Use this for public demos, playground content, engine examples, and small games that do not need AGI/Plauna/editor APIs. Output identity: Full platform bundle Use this when you want Engine + Editor + Plauna + AGI Core in one runtime. This adds: Ad hoc bundle Use this for local experiments where you want Engine plus one optional layer. 2. Runtime loading pattern For source mode development, import from . For generated release, Playground, Editor, and WebGPU OS pages, await the shared compressed runtime contract and use . writes the external tag with the exact gzip URL, decoded byte count, SHA 384 identity, asset base, and subsystem base. The loader expands , rejects size or integrity mismatches, executes the verified bytes from a CSP approved Blob URL, and resolves . Do not replace it with inline source execution or publish the oversized raw file. Rule: playground/release pages should use compiled APIs, not","contentHash":"bfa065138cde1b059326efacadd495e6b08aa1a5133cb72f055d4e99611ec577"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"guides/engine-stack-usage.md::0001","path":"guides/engine-stack-usage.md","title":"Engine Stack Usage Guide","description":"The practical \"how do I build with this?\" guide — choosing a bundle, runtime loading, minimal apps, ECS/render/particle conventions, Plauna, AGI Core, the editor, and the release checklist.","kind":"guide","source":"MD/guides/engine-stack-usage.md","updated":"2026-06-05","headings":["Engine Stack Usage Guide","1. Which build should you use?","Engine-only bundle","Full platform bundle","Ad-hoc bundle","2. Runtime loading pattern","3. Minimal Engine app","4. WebGPU initialization pattern","5. ECS conventions","6. Rendering conventions","7. Particle system usage","8. Plauna UI usage","9. AGI Core usage","10. Editor workflow","11. Template folder usage","12. Project starter template","13. What to build first","14. Release checklist","15. Design rules for this repository"],"chunkIndex":1,"chunkCount":3,"text":"and resolves . Do not replace it with inline source execution or publish the oversized raw file. Rule: playground/release pages should use compiled APIs, not direct source imports. 3. Minimal Engine app This is the smallest pattern for a browser app using EngineBootstrap. Recommended app layout: 4. WebGPU initialization pattern Use raw WebGPU only when a high level helper does not exist yet. Use a single long lived . Recreate size dependent textures on resize. Do not create pipelines every frame. 5. ECS conventions Use components as plain serializable data. System pattern: Recommended phases: Keep simulation state deterministic where possible. Keep DOM/UI state outside physics critical loops. 6. Rendering conventions For simple demos, render from compact state snapshots: For large worlds: Use dirty flags for transforms/materials/bounds. Use culling before upload. Prefer packed typed arrays over per entity object uploads. Use state first representation selection for many simple entities. Avoid GPU readback in the frame loop unless it is delayed/asynchronous. 7. Particle system usage Basic emitter data should be content driven. Good particle app structure: Rules: Keep presets in data modules. Keep GPU buffers owned by one system. Separate emitter authoring from simulation stepping. Add debug counters early: alive count, spawn count, upload bytes, frame ms. 8. Plauna UI usage Use Plauna when you need retained UI, themed panels, menus, HUDs, inspectors, or app shells. Source mode import: Bundle mode usage: Minimal Plauna mount: Recommended Plauna file layout: Plauna rules: Use Plauna for UI state, not physics state. Pass simulation snapshots into UI; do not let UI own simulation truth. Keep UI events as intents: , , , . Avoid creating/destroying large UI trees every frame.","contentHash":"d7736fe6168836a3d8333d8900d4e487e823072f7e116f22b240a9a5aabd8181"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"guides/engine-stack-usage.md::0002","path":"guides/engine-stack-usage.md","title":"Engine Stack Usage Guide","description":"The practical \"how do I build with this?\" guide — choosing a bundle, runtime loading, minimal apps, ECS/render/particle conventions, Plauna, AGI Core, the editor, and the release checklist.","kind":"guide","source":"MD/guides/engine-stack-usage.md","updated":"2026-06-05","headings":["Engine Stack Usage Guide","1. Which build should you use?","Engine-only bundle","Full platform bundle","Ad-hoc bundle","2. Runtime loading pattern","3. Minimal Engine app","4. WebGPU initialization pattern","5. ECS conventions","6. Rendering conventions","7. Particle system usage","8. Plauna UI usage","9. AGI Core usage","10. Editor workflow","11. Template folder usage","12. Project starter template","13. What to build first","14. Release checklist","15. Design rules for this repository"],"chunkIndex":2,"chunkCount":3,"text":"Pass simulation snapshots into UI; do not let UI own simulation truth. Keep UI events as intents: , , , . Avoid creating/destroying large UI trees every frame. 9. AGI Core usage Use AGI Core for training agents, observation builders, rewards, motion teachers, and neural control experiments. Source mode import: Bundle mode usage: Minimal training loop shape: AGI rules: Keep side effect free. Do not use as a bundle entry; it auto boots a DOM app. Keep observations explicit and versioned. Keep rewards readable and decomposed. Log training metrics every episode, not every frame. Avoid blocking GPU readback in training loops. 10. Editor workflow Use the editor for authoring, inspection, debugging, and visual iteration.","contentHash":"1017e6084d6787fa0dffefb1d5c33d42c01f37aadbf3b7f0578906364227d819"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"index.md::0000","path":"index.md","title":"WebGPU OS Documentation","description":"Unified, versioned home for the WebGPU OS stack — engine, editor, plauna, agi, and the OS itself. Plain Markdown, readable by AI agents and rendered for humans.","kind":"guide","source":"MD/index.md","updated":"2026-06-05","headings":["WebGPU OS Documentation","What is this stack?","Find your path","How this documentation is built","For AI agents","Accuracy & safety","Status"],"chunkIndex":0,"chunkCount":2,"text":"Unified, versioned home for the WebGPU OS stack — engine, editor, plauna, agi, and the OS itself. Plain Markdown, readable by AI agents and rendered for humans. WebGPU OS Documentation A unified, versioned home for the entire stack — the engine, the editor, the Plauna UI framework, the AGI rigging system, and the WebGPU OS that composes them all. This site is the single source of truth: plain Markdown that AI tools can read directly, rendered for humans through three viewers that all read the same files. New here? Start with Overview, then the Architecture Overview to see how the pieces fit. What is this stack? The project grew in layers. Each layer is independent and reusable, and the next one builds on it: See History & Evolution for the full story (engine → editor → plauna → agi → webgpu os). Find your path I want to use the OS — WebGPU OS Overview and the App Catalog. I'm building an app/package — WebGPU OS Architecture and the kernel/package API reference. I'm working on the renderer or simulation — Engine Overview. I'm building UI — Plauna Overview. I'm training the rig — AGI Overview and the Training Guide. I'm editing scenes/assets — Editor Overview. I'm writing docs — Docs Style Guide. How this documentation is built This folder is the source. Three viewers consume it: 1. Zero build HTML viewer ( ) — opens over , no build step. 2. MkDocs Material site ( ) — for a polished static site. 3. app inside WebGPU OS — reachable from the OS shell itself. Navigation, search, and reference indexes are generated by Python tools in (no Node). See Contribution Workflow. For AI agents If you are an AI assistant working with these docs, read first — it tells you where things live and the hard boundaries. A curated machine index is at (with full text in ), following the","contentHash":"154cfdfd52c57ea79676a06e5fd0f9eb8e330f37cb7fc46778fb00afc55f389d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"index.md::0001","path":"index.md","title":"WebGPU OS Documentation","description":"Unified, versioned home for the WebGPU OS stack — engine, editor, plauna, agi, and the OS itself. Plain Markdown, readable by AI agents and rendered for humans.","kind":"guide","source":"MD/index.md","updated":"2026-06-05","headings":["WebGPU OS Documentation","What is this stack?","Find your path","How this documentation is built","For AI agents","Accuracy & safety","Status"],"chunkIndex":1,"chunkCount":2,"text":"working with these docs, read first — it tells you where things live and the hard boundaries. A curated machine index is at (with full text in ), following the llmstxt.org standard. Incremental consumers can stream bounded documentation chunks or source backed API modules and symbols, one JSON object per line. Conventions for keeping the docs AI and human safe are in AI & Accessibility. Accuracy & safety The per symbol API reference is machine extracted from source and can lag — verify against the cited source file before relying on it. Fix inaccuracies by improving JSDoc upstream, then regenerating. Documentation contains no secrets ; never paste keys or tokens into examples. Every page links to View source so you can check the original. Status This is the restructured documentation set (v0.1.0). Conceptual and structural docs are authored by hand; the per symbol API reference is generated by and enriched with hand written notes. See the Changelog.","contentHash":"ddfaf4be4c239bdcea7af229b94e110ece0810352c73187b2ef9d67a58d056ad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/architecture.md::0000","path":"plauna/architecture.md","title":"Plauna Architecture","description":"How Plauna renders and manages UI — a UI ECS world reconciled to DOM and/or GPU surfaces through a dirty-tracking pipeline.","kind":"guide","source":"MD/plauna/architecture.md","updated":"2026-06-05","headings":["Plauna Architecture","Rendering pipeline","Core (plauna/core/)","Surfaces and the GPU bridge","Workspace (the window manager)","Text engine","Integration with the engine and editor","See also"],"chunkIndex":0,"chunkCount":1,"text":"How Plauna renders and manages UI — a UI ECS world reconciled to DOM and/or GPU surfaces through a dirty-tracking pipeline. Plauna Architecture How Plauna renders and manages UI. State lives in a UI ECS world; a visual tree is reconciled to DOM and/or GPU surfaces through a dirty tracking pipeline. Rendering pipeline Core ( ) — , the top level application object ( ). / — the retained UI tree. — UI state container. — binds state to the visual tree. — tracks what changed so only dirty regions re render. — renders the tree to DOM. / — view/surface registry and event system. — module self tests. Surfaces and the GPU bridge manages renderable surfaces (rect/warped, interactive, hit testable). bridges surfaces to the engine's VGPU, so GPU UI shares the single device. See GPU Device Sharing. Workspace (the window manager) provides , , , , , and . Every OS window is a Plauna panel — the OS shell ( ) builds its desktop/taskbar on top of this. (Source: .) Text engine measures and lays out text without the DOM (Pretext style), enabling GPU rendered text and accurate layout in non DOM surfaces. Public API: , , , . Integration with the engine and editor Bootstraps via ( , exposed as ). Uses the existing VGPU instance and ECS patterns — no separate device. Can enhance existing editor panels incrementally ( ). See also Plauna Overview — rendering modes and module map. WebGPU OS Architecture — how the shell consumes Plauna. Plauna API Reference .","contentHash":"feae68de6e1042c6d5d8ed8a706b87a4a6194d512366a881a124a146f7389e6c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/getting-started.md::0000","path":"plauna/getting-started.md","title":"Plauna Getting Started","description":"Initialize Plauna and create UI, measure text, and manage surfaces, mirroring the examples in the Plauna README.","kind":"guide","source":"MD/plauna/getting-started.md","updated":"2026-06-05","headings":["Plauna Getting Started","Initialize","Measure text without the DOM","Create a GPU surface","Enhance existing editor panels","Choosing a rendering mode","See also"],"chunkIndex":0,"chunkCount":1,"text":"Initialize Plauna and create UI, measure text, and manage surfaces, mirroring the examples in the Plauna README. Plauna Getting Started Initialize Plauna and create UI. This mirrors the examples in . Assumes Install & Run is done. Initialize Plauna bootstraps through the engine's editor bootstrap: options: Option Meaning DOM element for the Plauna root. Function returning the VGPU instance to share. The engine instance. An instance (optional). Load Plauna CSS (default ). Text engine to use (default ). Measure text without the DOM Create a GPU surface Enhance existing editor panels Choosing a rendering mode DOM for text heavy, accessible UI. DOM+GPU for panels with GPU visuals. GPU for warped/particle reactive, performance critical UI. See also Plauna Architecture. Plauna API Reference — , , , .","contentHash":"15bfe405b5835a518fa19bfcd2872abb9838c943b0b2a38fa71712c1203fce36"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/index.md::0000","path":"plauna/index.md","title":"Plauna","description":"Section index for Plauna — the hybrid DOM/GPU UI framework and workbench (overview, architecture, getting started, API reference).","kind":"guide","source":"MD/plauna/index.md","updated":"2026-06-05","headings":["Plauna","In this section","Module map","Related"],"chunkIndex":0,"chunkCount":1,"text":"Section index for Plauna — the hybrid DOM/GPU UI framework and workbench (overview, architecture, getting started, API reference). Plauna Hybrid DOM/GPU UI framework and workbench. Source: . In this section Overview — features, rendering modes, module map. Architecture — the state → visual tree → DOM/GPU pipeline. Getting Started — initialize, measure text, create surfaces. API Reference — per file symbols from (browse ). Module map Related WebGPU OS — the shell built on Plauna workspaces. GPU Device Sharing.","contentHash":"fb894f1733019042c6fc625924c7e39bc738a3d8bb7071cb24cfde61aaa73070"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/overview.md::0000","path":"plauna/overview.md","title":"Plauna Overview","description":"The browser-first hybrid DOM/GPU UI framework and workbench — DOM-free text, GPU surfaces, a dockable workspace, and ECS-driven UI state.","kind":"guide","source":"MD/plauna/overview.md","updated":"2026-06-05","headings":["Plauna Overview","What it provides","Audience","Rendering modes","Module map","UI ECS components","Next steps"],"chunkIndex":0,"chunkCount":2,"text":"The browser-first hybrid DOM/GPU UI framework and workbench — DOM-free text, GPU surfaces, a dockable workspace, and ECS-driven UI state. Plauna Overview Plauna ( ) is a browser first hybrid DOM/GPU UI framework and workbench. It extends the engine with advanced UI: DOM free text measurement, GPU surfaces, a dockable workspace, and ECS driven UI state. It is the compositor/window manager foundation the WebGPU OS shell is built on. What it provides From : Hybrid rendering — DOM, DOM+GPU, and pure GPU modes. Text engine — DOM free text measurement/layout (Pretext style). Surface graph — GPU accelerated surfaces with clipping, warping, composition. Workbench layout — dockable panels, tabs, splitters, floating windows. ECS integration — a dedicated UI world with component driven state. Zero dependencies — pure ES modules, no build step. Audience UI and app developers. OS shell developers depend on Plauna's workspace/surface/widget systems. Rendering modes Mode Use for DOM Standard UI (inspector, forms, menus); full CSS/accessibility/text editing. DOM+GPU Viewports with GPU overlays; DOM structure + GPU visuals. GPU Warped/particle reactive UI; pure WGSL rendering for performance critical visuals. Module map Module Path Purpose Core , , , , , , , , , Layout layout engine Surface GPU surface management Workspace workspaces, panels, splitters, compositor, switcher Widgets UI atoms (Primitive, Form, Navigation, DataViews, Layout, Feedback) Text DOM free text measurement/layout Input input devices/handling Motion animation/motion Themes / Style , , design tokens + CSS Particle VGPU bridge for GPU UI Notifications notification system / toasts Console dev REPL / system console Showcase / Lab , demos / experiments Editor / ECS , editor integration, UI components UI ECS components","contentHash":"8a028336f7694733f09ca7676c609f8527717fa24baa47344ae7d73205f1f845"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/overview.md::0001","path":"plauna/overview.md","title":"Plauna Overview","description":"The browser-first hybrid DOM/GPU UI framework and workbench — DOM-free text, GPU surfaces, a dockable workspace, and ECS-driven UI state.","kind":"guide","source":"MD/plauna/overview.md","updated":"2026-06-05","headings":["Plauna Overview","What it provides","Audience","Rendering modes","Module map","UI ECS components","Next steps"],"chunkIndex":1,"chunkCount":2,"text":"system / toasts Console dev REPL / system console Showcase / Lab , demos / experiments Editor / ECS , editor integration, UI components UI ECS components Plauna defines UI components that integrate with the engine's ECS: , , , , , , . Next steps Plauna Architecture. Plauna Getting Started. Plauna API Reference — generated from by .","contentHash":"738d3d3628a1da28c040eda80a7271e02fae8487149b0a6486af045011687bb2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/boot.md::0000","path":"plauna/reference/boot.md","title":"boot.js","description":"","kind":"reference","source":"plauna/boot.js","updated":"","headings":["boot.js","Classes","class PlaunaDevShell","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ PLAUNA ENGINE BOOTSTRAP ============================================================================ PlaunaDevShell is the main entry point for the Plauna UI system. It: 1. Initializes the rendering pipeline (WidgetRenderer, DOMRenderer) 2. Loads and applies themes from plauna/themes/{id}/theme.json 3. Sets up the workspace system for virtual desktops (optional GPU panels) 4. Injects base CSS for the widget gallery/showcase 5. Provides a public API for theme switching and widget rendering ARCHITECTURE FLOW: PlaunaDevShell.boot(root, options) → PlaunaDevShell instance init() → loads styles, theme, workspace manager ThemeLoader applies CSS variables to :root WidgetRenderer converts UINode trees to DOM WorkspaceManager (optional) handles GPU accelerated panels USAGE: const shell = await PlaunaDevShell.boot(document.body, { logger: console }); shell.setTheme('dark'); const element = shell.render(myUINode); document.body.appendChild(element); THEME SYSTEM: Themes live in plauna/themes/{id}/theme.json Themes can extend other themes via \"extends\": \"parent\" CSS variables are written to <style data plauna theme=\"1\" tags Per session overrides can be applied via applyOverrides() WORKSPACE SYSTEM (OPTIONAL): Requires gpuDevice option for WebGPU support Creates virtual desktop layers for multi panel layouts Supports DOM panels and GPU panels (WebGPU textures) Managed by WorkspaceManager class Classes Method Signature Summary Static factory — boot the engine and return a ready context. Initialize the Plauna engine. Initialization flow: 1. Load base stylesheet (plauna.css) 2. Inject widget base CSS (scoped to story","contentHash":"9c47c7769311142bca4a620fd3eca47c5929a89b4f3676e8ce74904be1bde147"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/boot.md::0001","path":"plauna/reference/boot.md","title":"boot.js","description":"","kind":"reference","source":"plauna/boot.js","updated":"","headings":["boot.js","Classes","class PlaunaDevShell","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"and return a ready context. Initialize the Plauna engine. Initialization flow: 1. Load base stylesheet (plauna.css) 2. Inject widget base CSS (scoped to story preview cells) 3. Inject modern primitive CSS overrides 4. Create workspace container for virtual desktop layers 5. Initialize WorkspaceManager if GPU device provided 6. Determine initial theme (saved or system preference) 7. Apply theme from themes/{id}/theme.json 8. Pre discover available themes in background Inject base widget CSS for story preview cells. CSS injection pattern: Scoped to .plauna story preview class Provides baseline styles for all primitive widgets Uses design tokens for theme consistency Idempotent (checks for existing style element) Includes animations (skeleton shimmer, progress stripes) Widgets styled: Button, Badge, Avatar, Chip, Text, Progress, Skeleton Variant styles (primary, secondary, success, warning, error) Size variants (sm, lg) Inject modern primitive CSS overrides. Modern pattern injection: Scoped to .plauna story preview class Uses !important to override base styles Modern UI patterns inspired by Material Design 3 and Apple HIG Soft gradients, glassy blur, larger radii, subtle elevation Clearer focus rings for accessibility Modern patterns applied: Buttons: Gradient backgrounds, backdrop blur, larger border radius Badges: Softer backgrounds, glassy blur, refined shadows Avatars: Gradient backgrounds, hover elevation, border styling Chips: Alpha transparent backgrounds, hover states Progress: Gradient fills, inset shadows for depth Tooltip: Glassy blur, refined shadows Input: Soft focus rings, hover elevation Load the base Plauna stylesheet. Stylesheet loading pattern: Loads plauna.css from ./styles/ directory Uses import.meta.url for relative path resolution Idempotent (checks","contentHash":"3cd9b5fa3909c58106dc810f612404e92b60a568d6a18f1af3d7b79819cbbc27"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/boot.md::0002","path":"plauna/reference/boot.md","title":"boot.js","description":"","kind":"reference","source":"plauna/boot.js","updated":"","headings":["boot.js","Classes","class PlaunaDevShell","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"Plauna stylesheet. Stylesheet loading pattern: Loads plauna.css from ./styles/ directory Uses import.meta.url for relative path resolution Idempotent (checks for existing link element) Graceful error handling (warns if stylesheet not found) Sets data attribute for identification Apply a theme by ID. Theme application pattern: Delegates to ThemeLoader to load theme from themes/{id}/theme.json Handles theme extension via \"extends\" property Writes CSS variables to :root Falls back to 'dark' theme on error Notifies observers of theme change Returns metadata list for all registered themes. Apply per session CSS var overrides on top of the active theme. Direct access to the loader for advanced use. Workspace manager f","contentHash":"00101139c17921e23898027ad29b11621f2bde8a5f6f38ed960c48da0e94de9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/console/PlaunaConsole.md::0000","path":"plauna/reference/console/PlaunaConsole.md","title":"console/PlaunaConsole.js","description":"","kind":"reference","source":"plauna/console/PlaunaConsole.js","updated":"","headings":["console/PlaunaConsole.js","Functions","createPlaunaConsole(options = {})","getPlaunaConsole()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PlaunaConsole Main console system for Plauna Integrates HtmlConsole with Plauna specific features and debugging capabilities Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"582138ee92e70082e9f3d11ba24c15d7dc3e9044d73d26c70274a3163619ee7f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/BindingEngine.md::0000","path":"plauna/reference/core/BindingEngine.md","title":"core/BindingEngine.js","description":"","kind":"reference","source":"plauna/core/BindingEngine.js","updated":"","headings":["core/BindingEngine.js","Classes","class BindingEngine","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Lifecycle safe StateStore UINode bindings and UINode intent dispatch. Two way bindings never promote local UI values into authoritative state. Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"4a23e521bec256d60e9dc2d0fc8a11d4a119c0dd5b7203e71c24eb7456f8183b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/DOMRenderer.md::0000","path":"plauna/reference/core/DOMRenderer.md","title":"core/DOMRenderer.js","description":"","kind":"reference","source":"plauna/core/DOMRenderer.js","updated":"","headings":["core/DOMRenderer.js","Classes","class DOMRenderer","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ DOMRenderer Visual Tree to DOM Renderer ============================================================================ DOMRenderer connects Plauna's retained mode UINode system to the browser DOM. It takes a VisualTree (rooted UINode tree) and renders it to actual DOM elements. DIFFERENCES FROM WidgetRenderer: WidgetRenderer: Converts single UINode widgets to DOM (used by widgets themselves) DOMRenderer: Renders entire visual tree from game/engine to DOM (used by PlaunaApp) RENDERING FLOW: 1. render(visualTree) Entry point, renders entire tree to container 2. renderNode(node) Recursively renders node and all children 3. createDOMElement(node) Creates DOM element based on node type 4. Applies styles, attributes, and content 5. Updates mapping tables for bidirectional lookup MAPPING TABLES: nodeToDOM: Map<UINode, HTMLElement UINode → DOM element domToNode: Map<HTMLElement, UINode DOM element → UINode (reverse lookup) renderedNodes: Set<UINode Track which nodes have been rendered ELEMENT TYPE HANDLING: 'text': Renders as <div with text content 'button': <button element 'input': <input element with type, value, placeholder, validation attributes 'image': <img element with src, alt 'svg': SVG namespace elements for graphics Other: <div as fallback DIRTY FLAG PROCESSING: DIRTY.STYLE: Re apply inline styles to DOM DIRTY.LAYOUT: Re compute position/size DIRTY.PAINT: Re render entire node DIRTY.TEXT: Update text content DIRTY.CHILDREN: Re render child subtree UPDATE MECHANISM: updateNode(node): Incrementally updates a single node based on dirty flags updateDOMElement(element, node): Applies node properties to DOM","contentHash":"c799bf89eb9df804041fd3c7c3df8c284f4bec4d96cceba3f9395577a6154e75"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/DOMRenderer.md::0001","path":"plauna/reference/core/DOMRenderer.md","title":"core/DOMRenderer.js","description":"","kind":"reference","source":"plauna/core/DOMRenderer.js","updated":"","headings":["core/DOMRenderer.js","Classes","class DOMRenderer","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"UPDATE MECHANISM: updateNode(node): Incrementally updates a single node based on dirty flags updateDOMElement(element, node): Applies node properties to DOM element processStyleDirty(nodes): Batch updates for style changes TEXT SERVICE: Optional textService for internationalization If provided, wraps text content through translation layer Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"73278ce9674a55018d46daecccbcc00193526ad64324b26391c89daae2ef77d4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/DirtyGraph.md::0000","path":"plauna/reference/core/DirtyGraph.md","title":"core/DirtyGraph.js","description":"","kind":"reference","source":"plauna/core/DirtyGraph.js","updated":"","headings":["core/DirtyGraph.js","Classes","class DirtyGraph","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DirtyGraph Optimized dirty flag propagation and update scheduling. Dirty flag management pattern: Efficient dirty flag propagation for large UI trees Categorizes dirty flags by type (STYLE, LAYOUT, PAINT, etc.) Batch processing of dirty nodes Performance tracking for propagation timing Propagation rules: LAYOUT dirtiness propagates to parent PAINT dirtiness propagates to parent if node affects parent's paint CHILDREN dirtiness propagates to descendants STYLE dirtiness propagates to descendants if style affects them Architecture: dirtyNodes: Set of all dirty nodes dirtySets: Map of flag → Set of nodes (categorized by flag type) propagationQueue: Queue for deferred propagations isProcessing: Flag to prevent re entrant propagation Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"d961dc8a74bfeebf1fb062898dce11be637aaf8381900ea44225ebf7b03d7169"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/ModuleTester.md::0000","path":"plauna/reference/core/ModuleTester.md","title":"core/ModuleTester.js","description":"","kind":"reference","source":"plauna/core/ModuleTester.js","updated":"","headings":["core/ModuleTester.js","Classes","class PlaunaModuleTester","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PlaunaModuleTester Smoke test runner for modules/widgets. Module testing pattern: Verifies module registration and instantiation Exposes widget properties for console diagnostics Summarizes complex values for readable output Tracks widget registry and available widgets Testing features: Module registration verification Widget instantiation testing Property exposure and summarization Value normalization for comparison Helper functions: summarizeValue(): Human readable value summaries normalizeComparableValue(): Normalize values for comparison isPlainObject(): Check if value is plain object Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"a23b11505b65bab53d4e55c23dfc05ec7d08711e6f62e04324730cbddebad0e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/StateStore.md::0000","path":"plauna/reference/core/StateStore.md","title":"core/StateStore.js","description":"","kind":"reference","source":"plauna/core/StateStore.js","updated":"","headings":["core/StateStore.js","Classes","class StateStore","Functions","createStore(initialState = {}, options = {})","useStore(store, path, defaultValue)","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Observable projection store used by Plauna bindings. The store is intentionally authority neutral: networked UI writes arrive as projections, while user actions leave through BindingEngine intent handlers. Classes Method Signature Summary Functions Framework neutral compatibility helper. The third tuple item subscribes to future values; no React global or hidden lifecycle is required. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"7468dcbaf7364639322b9dc1b9bf130362377e82e228a8fac3e8710a67958428"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/UINode.md::0000","path":"plauna/reference/core/UINode.md","title":"core/UINode.js","description":"","kind":"reference","source":"plauna/core/UINode.js","updated":"","headings":["core/UINode.js","Classes","class UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ UINode Retained Visual Tree Node ============================================================================ UINode is the base class for all UI nodes in Plauna's retained visual tree. It represents a node in a virtual DOM like tree that can be rendered to actual DOM. KEY CONCEPTS: Retained Mode: The tree persists in memory and is incrementally updated Dirty Flags: Bits that track what parts of the node need re rendering Layout Box: Computed layout metrics (position, size, margins, padding) Event Handlers: Map of event types to handler functions Accessibility: ARIA attributes and role information DIRTY FLAGS (bitmask): STYLE: CSS styles changed → re apply styles to DOM LAYOUT: Position/size changed → re compute layout PAINT: Visual appearance changed → re render to DOM TEXT: Text content changed → update text nodes ACCESSIBILITY: ARIA attributes changed → update DOM attributes CHILDREN: Child nodes added/removed → re render subtree FOCUS: Focus state changed → update focus ring NODE STATE (bitmask): VISIBLE: Node is visible FOCUSED: Node has keyboard focus HOVERED: Mouse is over the node ACTIVE: Node is being pressed/clicked DISABLED: Node is disabled FOCUSABLE: Node can receive focus CHECKED: Checkbox/radio is checked SELECTED: Option is selected LOADING: Node is in loading/processing state ERROR: Node is in error/validation failure state INPUT FLAGS (bitmask): POINTER CAPTURE: Node captures pointer events KEYBOARD CAPTURE: Node captures keyboard events DRAG TARGET: Node is a drag target DROP TARGET: Node is a drop target SCROLLABLE: Node can be scrolled RENDER FLAGS (bitmask): CLIPS CONTENT: Children","contentHash":"07b0b944f115abd3e4737850aa4b9dc95e8b94b25565f4bf58d766ccf18a2b7e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/UINode.md::0001","path":"plauna/reference/core/UINode.md","title":"core/UINode.js","description":"","kind":"reference","source":"plauna/core/UINode.js","updated":"","headings":["core/UINode.js","Classes","class UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"events DRAG TARGET: Node is a drag target DROP TARGET: Node is a drop target SCROLLABLE: Node can be scrolled RENDER FLAGS (bitmask): CLIPS CONTENT: Children outside bounds are clipped OPAQUE: Node is fully opaque (optimization hint) REQUIRES LAYER: Needs separate compositing layer TRANSFORM CHANGED: Transform property changed OPACITY CHANGED: Opacity property changed TREE STRUCTURE: parent: Reference to parent UINode children: Array of child UINodes firstChild/lastChild: Linked list pointers for fast traversal nextSibling/previousSibling: Linked list pointers for siblings LAYOUT BOX: x, y: Position relative to parent width, height: Computed size minX, minY, maxX, maxY: Computed bounds paddingLeft, paddingTop, paddingRight, paddingBottom: Padding marginLeft, marginTop, marginRight, marginBottom: Margin borderLeft, borderTop, borderRight, borderBottom: Border width Classes Method Signature Summary Constants — UINode Retained visual tree node. UINode pattern: Base class for all UI nodes in Plauna's retained visual tree Virtual DOM like tree that persists in memory Incrementally updated via dirty flags Supports tree structure (parent/children/siblings) Event handling and accessibility support Key concepts: Dirty flags: Track what needs re rendering Layout box: Computed layout metrics Event handlers: Map of event types to functions Accessibility: ARIA attributes and role information <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount","contentHash":"a4796190d11cc13e72cc8d4c6156471f45dc926a86ebdf209c852efb751f7534"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/UINode.md::0002","path":"plauna/reference/core/UINode.md","title":"core/UINode.js","description":"","kind":"reference","source":"plauna/core/UINode.js","updated":"","headings":["core/UINode.js","Classes","class UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"529039e53fff594309dae46668fe544b4bda938f4854e2d1d8faa32b7cdc4637"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/VisualTree.md::0000","path":"plauna/reference/core/VisualTree.md","title":"core/VisualTree.js","description":"","kind":"reference","source":"plauna/core/VisualTree.js","updated":"","headings":["core/VisualTree.js","Classes","class VisualTree","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VisualTree Manages the retained visual tree and dirty propagation. Visual tree management pattern: Manages UINode hierarchy with root node Dirty flag management and propagation Update scheduling with requestAnimationFrame Performance tracking for update timing Callback hooks for layout, paint, accessibility updates Features: setRoot(): Change root node (marks subtree dirty) markDirty(): Mark node as dirty (schedules update) markSubtreeDirty(): Mark entire subtree as dirty update(): Main update loop (processes dirty nodes) Update queues: layoutQueue: Nodes needing layout recalculation paintQueue: Nodes needing paint updates textQueue: Nodes needing text content updates accessibilityQueue: Nodes needing ARIA updates Architecture: root: Root UINode of the tree dirtyNodes: Set of all dirty nodes isUpdating: Flag to prevent re entrant updates updateScheduled: Flag for RAF scheduling Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"237ecf59dd3144e9042833bc6d13e4facf50828bfd3b09ad2703c56b56b35092"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/app.md::0000","path":"plauna/reference/core/app.md","title":"core/app.js","description":"","kind":"reference","source":"plauna/core/app.js","updated":"","headings":["core/app.js","Classes","class PlaunaApp","Functions","async createPlaunaApp(options = {})","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ PlaunaApp Main Plauna Application Class ============================================================================ PlaunaApp is the main application class that integrates Plauna UI with the Particle Engine. It manages the visual tree, rendering, events, and development tools. CORE COMPONENTS: VisualTree: Retained mode UI tree (UINode hierarchy) DOMRenderer: Renders visual tree to DOM elements PlaunaEventSystem: Event handling and dispatching ThemeManager: Theme management and CSS variable application TransitionEngine: Animation and transition system PlaunaTextService: Text internationalization (pretext) PlaunaSurfaceManager: Surface/layer management PlaunaGPUBridge: GPU integration bridge PlaunaRegistry: Component registry DEVELOPMENT TOOLS: TreeInspector: Visual tree inspector for debugging StyleInspector: Style inspector for debugging HotReload: Hot module replacement for development PlaunaModuleTester: Module testing framework PlaunaSmartContextMenu: Context aware right click menu INTEGRATION WITH PARTICLE ENGINE: Uses ECS World from engine/ecs/world/World.js Integrates with GPU via PlaunaGPUBridge Uses PlaunaSurfaceManager for surface management Text engine integration (pretext or custom) INITIALIZATION FLOW: 1. createPlaunaApp(options) Factory function 2. PlaunaApp constructor Sets up core components 3. initialize() Initializes all subsystems 4. mount() Mounts to root DOM element OPTIONS: root: Required DOM element to mount to getVGPU: Function to get VGPU instance engine: Particle engine instance editor: Editor instance (optional) useCSS: Enable CSS injection (default: true) textEngine: Text","contentHash":"e41f42b34aefd7b0fbaa7068f27a40b39f904db11e556491cc3eadb7e7751ebd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/app.md::0001","path":"plauna/reference/core/app.md","title":"core/app.js","description":"","kind":"reference","source":"plauna/core/app.js","updated":"","headings":["core/app.js","Classes","class PlaunaApp","Functions","async createPlaunaApp(options = {})","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"Function to get VGPU instance engine: Particle engine instance editor: Editor instance (optional) useCSS: Enable CSS injection (default: true) textEngine: Text engine to use ('pretext' or custom) enableModuleTester: Enable module tester (default: true) enableSmartContextMenu: Enable smart context menu (default: true) PUBLIC API: mount(): Mount app to root element destroy(): Cleanup and destroy app addComponent(): Add component to registry getComponent(): Get component from registry visualTree: Access visual tree instance renderer: Access DOM renderer instance eventSystem: Access event system instance themeManager: Access theme manager instance LIFECYCLE: Created via createPlaunaApp() factory Must call mount() to display UI Call destroy() to cleanup USAGE: const app = await createPlaunaApp({ root: document.body, getVGPU: () = vgpuInstance, engine: particleEngine }); await app.mount(); // ... use app app.destroy(); Classes PlaunaApp Main Plauna application class. Application architecture: Integrates Plauna UI with Particle Engine Manages visual tree, rendering, events, and development tools Provides public API for component registration and access Core systems: uiWorld: ECS World for UI entities textService: Internationalization service surfaceManager: Surface/layer management gpuBridge: GPU integration bridge registry: Component registry events: Event system Retained mode systems: visualTree: UINode hierarchy domRenderer: DOM renderer themeManager: Theme management transitionEngine: Animation system Development tools: treeInspector: Visual tree inspector styleInspector: Style inspector hotReload: Hot module replacement moduleTester: Module testing framework smartContextMenu: Context aware menu Method Signature Summary Functions PlaunaApp factory function. Application","contentHash":"2bb58c73c962f2854a78788597a03fe94052bdacecdbbb50a477108b51a77cd2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/app.md::0002","path":"plauna/reference/core/app.md","title":"core/app.js","description":"","kind":"reference","source":"plauna/core/app.js","updated":"","headings":["core/app.js","Classes","class PlaunaApp","Functions","async createPlaunaApp(options = {})","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"moduleTester: Module testing framework smartContextMenu: Context aware menu Method Signature Summary Functions PlaunaApp factory function. Application factory pattern: Creates PlaunaApp instance with provided options Initializes core components (visual tree, renderer, events) Sets up development tools if enabled Returns ready to use app instance Parameters: (Object) — Configuration options (HTMLElement) — Required DOM element to mount to (Function) — Function to get VGPU instance (Object) — Particle engine instance (Object) — Editor instance (optional) (boolean) — Enable CSS injection (default: true) (string) — Text engine to use ('pretext' or custom) (boolean) — Enable module tester (default: true) (boolean)","contentHash":"2a394e70ffdb26d2094937e74bb5e0f12d3651062df559c432a9e5c1459424d1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/events.md::0000","path":"plauna/reference/core/events.md","title":"core/events.js","description":"","kind":"reference","source":"plauna/core/events.js","updated":"","headings":["core/events.js","Classes","class PlaunaEventSystem","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PlaunaEventSystem Event system for Plauna. Event bus pattern: Simple publish subscribe event system Follows existing engine/ editor patterns Supports multiple listeners per event Returns unsubscribe function for cleanup Error handling for faulty event handlers Features: on(): Subscribe to event with callback off(): Unsubscribe from event emit(): Dispatch event to all listeners once(): Subscribe for single event occurrence removeAllListeners(): Clean up listeners Classes PlaunaEventSystem Event system for Plauna. Event bus pattern: Simple publish subscribe event system Follows existing engine/ editor patterns Supports multiple listeners per event Returns unsubscribe function for cleanup Error handling for faulty event handlers Features: on(): Subscribe to event with callback off(): Unsubscribe from event emit(): Dispatch event to all listeners once(): Subscribe for single event occurrence removeAllListeners(): Clean up listeners Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"5c2896945952bc4235db9cd073d1cb7ecb3aafa940c23ef808c6f81558b75886"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/registry.md::0000","path":"plauna/reference/core/registry.md","title":"core/registry.js","description":"","kind":"reference","source":"plauna/core/registry.js","updated":"","headings":["core/registry.js","Classes","class PlaunaRegistry","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PlaunaRegistry Registry for views, surfaces, and templates. Registry pattern: Centralized registration system for UI components Follows existing engine registry patterns Supports views, surfaces, templates, and factories Warns on duplicate registrations (overwrites) Provides getters for retrieving registered items Registry types: views: UI view configurations with render mode, size, closability surfaces: Surface definitions for GPU rendering (viewport, texture) templates: Reusable template configurations factories: Factory functions for component instantiation Classes PlaunaRegistry Registry for views, surfaces, and templates. Registry pattern: Centralized registration system for UI components Follows existing engine registry patterns Supports views, surfaces, templates, and factories Warns on duplicate registrations (overwrites) Provides getters for retrieving registered items Registry types: views: UI view configurations with render mode, size, closability surfaces: Surface definitions for GPU rendering (viewport, texture) templates: Reusable template configurations factories: Factory functions for component instantiation Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and","contentHash":"e064b28ec3dd9bbd4d6400c3b80dd516dd5ace3073cbda92ad9cfc9e609b4f38"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/core/registry.md::0001","path":"plauna/reference/core/registry.md","title":"core/registry.js","description":"","kind":"reference","source":"plauna/core/registry.js","updated":"","headings":["core/registry.js","Classes","class PlaunaRegistry","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"→ unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"5b970e059b7a9ce7ab8900dddf60f4f733154b125b5371b96f2efdf76172ce16"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ecs/components.md::0000","path":"plauna/reference/ecs/components.md","title":"ecs/components.js","description":"","kind":"reference","source":"plauna/ecs/components.js","updated":"","headings":["ecs/components.js","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Plauna ECS Components Follow existing engine component registration patterns. Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"44e196b3af659af6948470efb9fc92544b362a262c7ad0e45f164bd83af68ed6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/editor/HotReload.md::0000","path":"plauna/reference/editor/HotReload.md","title":"editor/HotReload.js","description":"","kind":"reference","source":"plauna/editor/HotReload.js","updated":"","headings":["editor/HotReload.js","Classes","class HotReload","Functions","plaunaHotReloadTextHash(text)","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: HotReload Live development tool for Plauna Provides hot module replacement and live style updates with robust validation Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"a01056d6dbdd1382aff00e3e11c17458e90213bd95aa289fc4da39281c48ddc6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/editor/StyleInspector.md::0000","path":"plauna/reference/editor/StyleInspector.md","title":"editor/StyleInspector.js","description":"","kind":"reference","source":"plauna/editor/StyleInspector.js","updated":"","headings":["editor/StyleInspector.js","Classes","class StyleInspector","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StyleInspector Live style debugging tool for Plauna Provides real time style inspection and editing capabilities Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"a6e6107f523567cae28d90522651ccfd37d34931d1847019c9cf811346599420"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/editor/TreeInspector.md::0000","path":"plauna/reference/editor/TreeInspector.md","title":"editor/TreeInspector.js","description":"","kind":"reference","source":"plauna/editor/TreeInspector.js","updated":"","headings":["editor/TreeInspector.js","Classes","class TreeInspector","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TreeInspector Visual tree inspector for Plauna Provides debugging and inspection of the UI visual tree Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"8c8eb95cc53170e43956d70702dd34848ae854fe1e72ba6b9de8dc291b1e37cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/index.md::0000","path":"plauna/reference/index.md","title":"index.js","description":"","kind":"reference","source":"plauna/index.js","updated":"","headings":["index.js","Re-exports","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Plauna Advanced UI System for Particle Engine Browser first UI runtime with hybrid DOM/GPU rendering ============================================================================ MODULE STRUCTURE ============================================================================ This is the main entry point for the Plauna UI system. It re exports all public APIs in a structured, organized manner. Export Categories: Core System: createPlaunaApp: Main application entry point PlaunaModuleTester: Module testing utilities UINode, DIRTY, NODE STATE: Core retained mode UI tree VisualTree: Visual tree management UI Components: PlaunaSmartContextMenu: Type aware context menu for debugging PlaunaTextService: Internationalization service (Pretext) PlaunaSurfaceManager: Surface/layer management PlaunaGPUBridge: WebGPU integration bridge Widget System: Layout widgets: Grid, Divider, Spacer Primitive widgets: Button, Panel, Text, Modal, Tooltip, Badge, Avatar, Progress, Skeleton Form widgets: Input, Checkbox, Radio, Switch, Select, Textarea, Slider, Rating Navigation widgets: Tabs, Dropdown, Breadcrumb, Pagination Data view widgets: ListView, Card Utilities: Style system: Design tokens, theme management Console system: PlaunaConsole for debugging Notification system: Toast, Notify Showcase system: WidgetShowcase for widget gallery Particle controller: ParticleController for particle integration Lab/Development: mountPlaunaWorkbenchLab: Workbench development environment mountShowcaseApp: Widget showcase application Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples App & widget lifecycle","contentHash":"cb756972306882e5f06dc6b2b26d24b78cffdbb2b6e4bc0bd63c7bbb4b916600"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/index.md::0001","path":"plauna/reference/index.md","title":"index.js","description":"","kind":"reference","source":"plauna/index.js","updated":"","headings":["index.js","Re-exports","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"64e5018f4b2fc560b1e359c88e3a649775b86ff373e3c8ffaecbfb49aa5b1ce0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/input/EventRouter.md::0000","path":"plauna/reference/input/EventRouter.md","title":"input/EventRouter.js","description":"","kind":"reference","source":"plauna/input/EventRouter.js","updated":"","headings":["input/EventRouter.js","Classes","class EventRouter","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EventRouter Event capture/target/bubble routing system for Plauna Handles DOM style event propagation with capture and bubble phases Classes EventRouter Event capture/target/bubble routing system for Plauna Handles DOM style event propagation with capture and bubble phases Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"c10cbd044366e5b12e790ac30bca2f6feec1fdc92390afffd52b93b7338e7524"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/lab/showcase-app.md::0000","path":"plauna/reference/lab/showcase-app.md","title":"lab/showcase-app.js","description":"","kind":"reference","source":"plauna/lab/showcase-app.js","updated":"","headings":["lab/showcase-app.js","Classes","class ShowcaseApp","Functions","mountShowcaseApp(options = {})","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ShowcaseApp Thin shell that boots the Plauna engine and mounts WidgetGallery Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"4a110d69accfb4eae873fe561512ead6f5bfed211b66159025e035e880c24563"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/lab/workbench-lab.md::0000","path":"plauna/reference/lab/workbench-lab.md","title":"lab/workbench-lab.js","description":"","kind":"reference","source":"plauna/lab/workbench-lab.js","updated":"","headings":["lab/workbench-lab.js","Functions","mountPlaunaWorkbenchLab(options)","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"49adb9a6828c4ffc058202057c6f39d6397d7c97e71dc3eddc85eeaf39173182"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/layout/Constraints.md::0000","path":"plauna/reference/layout/Constraints.md","title":"layout/Constraints.js","description":"","kind":"reference","source":"plauna/layout/Constraints.js","updated":"","headings":["layout/Constraints.js","Classes","class Constraints","class BoxConstraints","class LayoutConstraints","class ConstraintResolver","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Constraints Size constraint system for Plauna layout Handles min/max/preferred sizes and constraint resolution Classes Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"0c7f3aff965caf47ddfd65cacd29f8b2addf74a212cde88c0b65a398f7dbeb63"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/layout/FlexLayout.md::0000","path":"plauna/reference/layout/FlexLayout.md","title":"layout/FlexLayout.js","description":"","kind":"reference","source":"plauna/layout/FlexLayout.js","updated":"","headings":["layout/FlexLayout.js","Classes","class FlexLayout","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FlexLayout Flexbox inspired layout engine for Plauna Provides CSS Flexbox like layout functionality with constrained feature set Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"9ca444231bc6e3162956962bad4b53cac33af19a9b1e92f07fbaf539b7ff8ce9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/layout/LayoutSizing.md::0000","path":"plauna/reference/layout/LayoutSizing.md","title":"layout/LayoutSizing.js","description":"","kind":"reference","source":"plauna/layout/LayoutSizing.js","updated":"","headings":["layout/LayoutSizing.js","Functions","resolvePlaunaLayoutSize(value, containerSize, options = {})","resolvePlaunaLayoutConstraints(style = {}, containerSize = 0)","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"27e7a8f31ad3e623bb84797faddc5ce451215978bc108d608c590f0cc43acc13"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/motion/MPAFallback.md::0000","path":"plauna/reference/motion/MPAFallback.md","title":"motion/MPAFallback.js","description":"","kind":"reference","source":"plauna/motion/MPAFallback.js","updated":"","headings":["motion/MPAFallback.js","Exports","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MPAFallback Cross document view transition fallback for mobile/legacy browsers. Browsers that don't support the CSS @view transition at rule for MPA navigation get a minimal fade in of the new page instead of a hard cut. This is a graceful degradation, not a full polyfill; the real cross document transition only works in browsers that support the View Transitions API Level 2. Usage: include synchronously in the <head of any landing page: <script src=\"/plauna/motion/MPAFallback.js\" </script Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"9612d766626c2e7bb37b5556a86d9c933c298567e42dfe4501f47eb83bb2e9d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/motion/PageTransition.md::0000","path":"plauna/reference/motion/PageTransition.md","title":"motion/PageTransition.js","description":"","kind":"reference","source":"plauna/motion/PageTransition.js","updated":"","headings":["motion/PageTransition.js","Classes","class PageTransition","Functions","startPageTransition(update, options = {})","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PageTransition Modern page/view blending for Plauna. Wraps the native View Transitions API (Level 1/2) where available and falls back to CSS class/transition based cross fades for older browsers. Designed for SPA \"page\" swaps, tab changes, and content fades inside a Plauna app. Usage: const pt = new PageTransition({ type: 'slide left', duration: 350 }); await pt.start(() = { // update the DOM here }); Classes Method Signature Summary Start a view transition. Calls inside the transition callback, passes an AbortSignal for cooperative async cancellation, then waits for every browser owned lifecycle promise to settle. Cancel only presentation work owned by this transition instance. Native View Transitions API path. Fallback path using the Web Animations API. This gives us cross browser keyframe interpolation without the complexity of CSS class transition states. Build keyframes for a transition type for the Web Animations fallback. Inject a shared stylesheet for the View Transitions API pseudo element tree. Generates @keyframes and active view transition type rules for every effect. Functions Convenience function for one off transitions. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"478d39541a38c618fa79ec188b4d284192b9dbcaab3ccd487d28b5893375422e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/motion/PageTransitionContracts.md::0000","path":"plauna/reference/motion/PageTransitionContracts.md","title":"motion/PageTransitionContracts.js","description":"","kind":"reference","source":"plauna/motion/PageTransitionContracts.js","updated":"","headings":["motion/PageTransitionContracts.js","Classes","class UnsupportedPageTransitionVersionError extends Error","Functions","preparePageTransitionIntent(input)","preparePageTransitionResolved(input)","Constants","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"b36a2028ca7dc204634462c01fa1d91135fafa4646de4ccd54bf04aadcbb8719"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/motion/PageTransitionManager.md::0000","path":"plauna/reference/motion/PageTransitionManager.md","title":"motion/PageTransitionManager.js","description":"","kind":"reference","source":"plauna/motion/PageTransitionManager.js","updated":"","headings":["motion/PageTransitionManager.js","Exports","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PageTransitionManager Cross document (MPA) view transition orchestration. This module runs on every page that opts in. It injects a shared stylesheet containing the PageTransition presets and, on supported browsers, sets the active view transition type for cross document navigations via the pageswap and pagereveal events. Pages can control their transition with a data attribute on the <html element: <html data transition preset=\"etch\" <html data transition preset=\"random\" <html data transition preset=\"cycle\" The default is the project's default preset (etch). If the attribute is absent or the value is unknown, the default is used. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"08e3276b594307f2b2a964b0f5fa6bd107b7741cecb4cbccb5174c8d50c6e81a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/motion/PageTransitionPresets.md::0000","path":"plauna/reference/motion/PageTransitionPresets.md","title":"motion/PageTransitionPresets.js","description":"","kind":"reference","source":"plauna/motion/PageTransitionPresets.js","updated":"","headings":["motion/PageTransitionPresets.js","Functions","directionToPreset(direction)","resolvePreset(name, state = { index: 0 })","keyframesForPreset(name)","presetStyleSheet(namespace)","ensureStyleSheet(namespace)","Constants","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PageTransitionPresets Shared transition presets and stylesheet generation. This module is the single source of truth for the keyframes and CSS used by both the same document PageTransition engine and the cross document PageTransitionManager. Keeping the presets in one place means SPA demos and MPA page navigation can share the same effects and the same default. Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"aed617f0922c2d69afd29a4706f5ebe98a026801b7f4441ee4679d7b4ef56f56"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/motion/TransitionEngine.md::0000","path":"plauna/reference/motion/TransitionEngine.md","title":"motion/TransitionEngine.js","description":"","kind":"reference","source":"plauna/motion/TransitionEngine.js","updated":"","headings":["motion/TransitionEngine.js","Classes","class TransitionEngine","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TransitionEngine Property animation system for Plauna Provides smooth transitions and animations for UI properties Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"265dbe9d3aa6bda2a4b49f39999cabbfd7482174cc6c122829b2264257bea42b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/notifications/NotificationSystem.md::0000","path":"plauna/reference/notifications/NotificationSystem.md","title":"notifications/NotificationSystem.js","description":"","kind":"reference","source":"plauna/notifications/NotificationSystem.js","updated":"","headings":["notifications/NotificationSystem.js","Classes","class NotificationSystem","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ NotificationSystem Centralized Notification Management ============================================================================ NotificationSystem provides a unified API for user notifications, separating them from debug logging and integrating with ToastManager for UI feedback. NOTIFICATION CHANNELS: 1. Toasts: UI notifications via ToastManager (top right corner) 2. Console: Browser console.log/error/warn for debugging 3. Sounds: Optional audio feedback using Web Audio API NOTIFICATION LEVELS (priority order): debug (0): Development debugging information info (1): General informational messages success (2): Success confirmations warning (3): Warning messages error (4): Error messages critical (5): Critical errors requiring immediate attention NOTIFICATION TYPES: system: System level notifications (startup, shutdown, etc.) action: User action feedback (clicks, submissions, etc.) validation: Form validation errors performance: Performance metrics and warnings security: Security related alerts network: Network request status GROUPING: createGroup(name, options): Create a notification group Groups collect related notifications and report summary Useful for batch operations or multi step processes CONVENIENCE METHODS: debug(message, type, data): Debug level notification info(message, type, data): Info level notification success(message, type, data): Success level notification warning(message, type, data): Warning level notification error(message, type, data): Error level notification critical(message, type, data): Critical level notification SOUND EFFECTS: Uses Web Audio API to generate simple beep","contentHash":"9badb306f3b3b5fb1662efd53d2e6d54ef191ba6a6330b72fbdecdd39284794c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/notifications/NotificationSystem.md::0001","path":"plauna/reference/notifications/NotificationSystem.md","title":"notifications/NotificationSystem.js","description":"","kind":"reference","source":"plauna/notifications/NotificationSystem.js","updated":"","headings":["notifications/NotificationSystem.js","Classes","class NotificationSystem","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"type, data): Error level notification critical(message, type, data): Critical level notification SOUND EFFECTS: Uses Web Audio API to generate simple beep sounds Different frequencies for different levels Can be disabled via enableSounds option MIN LEVEL FILTERING: minLevel option filters notifications below specified level Useful for suppressing debug messages in production INTEGRATION: Uses global Toast from ToastManager for UI toasts Toast position defaults to top right Console output includes prefix (default: '[Plauna]') USAGE: const notify = new NotificationSystem({ minLevel: 'info' }); notify.success('File saved successfully', 'action'); notify.error('Failed to load data', 'network', { url: '/api/data' }); Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"1f8d7f96b20fa597e1d9c106907c65b61eca4b89a2e399eaebe8fef1c0653b76"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/particle/ParticleController.md::0000","path":"plauna/reference/particle/ParticleController.md","title":"particle/ParticleController.js","description":"","kind":"reference","source":"plauna/particle/ParticleController.js","updated":"","headings":["particle/ParticleController.js","Classes","class ParticleController","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ParticleController Manages particle effects and animations Handles particle system initialization and control for showcase Method Signature Summary Initialize particle system Resize canvas to fit window Setup event listeners Create particles Create a single particle Update particles Draw particles Start particle animation Stop particle animation Set particle configuration Set particle count Add particles at position Clear all particles Get particle count Destroy particle controller <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"7107c9dc3ebf08859d24b5c25215c6c7db16c2bf09f8468433f975462a11504d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/particle/bridge.md::0000","path":"plauna/reference/particle/bridge.md","title":"particle/bridge.js","description":"","kind":"reference","source":"plauna/particle/bridge.js","updated":"","headings":["particle/bridge.js","Classes","class PlaunaGPUBridge","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PlaunaParticleBridge Connects Plauna to Particle Engine's VGPU Follows existing VGPU patterns from ViewportPanel Classes PlaunaParticleBridge Connects Plauna to Particle Engine's VGPU Follows existing VGPU patterns from ViewportPanel Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"2951b47f5853bc5039342cc5a2d7f69f20bff4bcd97342e7768fdc42c0eda374"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/AdaptiveThemeFactory.md::0000","path":"plauna/reference/style/AdaptiveThemeFactory.md","title":"style/AdaptiveThemeFactory.js","description":"","kind":"reference","source":"plauna/style/AdaptiveThemeFactory.js","updated":"","headings":["style/AdaptiveThemeFactory.js","Classes","class AdaptiveThemeFactory","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"c5821799d776e823e9db12d8c4b349d288e2bc116ee4c4c8738bbdf462b0d47d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/CSSGenerator.md::0000","path":"plauna/reference/style/CSSGenerator.md","title":"style/CSSGenerator.js","description":"","kind":"reference","source":"plauna/style/CSSGenerator.js","updated":"","headings":["style/CSSGenerator.js","Classes","class CSSGenerator","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CSSGenerator Runtime CSS generation from DesignTokens and LayerManager. CSS generation pattern: Generates CSS custom properties from design tokens Supports theme based variable sets (bright/night) Caches generated CSS for performance Injects CSS into document via style tags Supports z index layer variables Architecture: tokens: DesignTokens instance for token resolution layerValues: LayerManager z index values generatedCSS: Map of cached CSS strings styleElement: DOM style element for CSS injection themes: Pre defined theme variable sets Classes Method Signature Summary Generate CSS custom properties from design tokens Generate theme specific CSS selectors Generate all CSS (tokens + themes) Inject generated CSS into document Get CSS as text without injecting Clear cache Get all available tokens Get all layer values Export tokens as JSON Export CSS as downloadable file Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"fb942f6369d97e773ad0c792fa269965beab46ce8ca035a900e33137405d2ab9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/ComputedStyle.md::0000","path":"plauna/reference/style/ComputedStyle.md","title":"style/ComputedStyle.js","description":"","kind":"reference","source":"plauna/style/ComputedStyle.js","updated":"","headings":["style/ComputedStyle.js","Classes","class ComputedStyle","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ComputedStyle Style resolution and caching system for Plauna. Style resolution pattern: Handles style inheritance from parent nodes Resolves design token references Computes final style values for rendering Caches computed styles for performance Tracks performance statistics Architecture: cache: Map of computed style results tokenCache: Map of resolved token values styleCache: Map of style property resolutions performanceStats: Metrics for cache hits/misses and timing Style categories: Position and layout: position, display, flex properties Sizing: width, height, min/max dimensions, flex basis/grow/shrink Spacing: margin, padding Visual: colors, borders, shadows, opacity Typography: font family, size, weight, line height, alignment Interaction: pointer events, cursor Accessibility: visibility, z index Transform and animation Classes Method Signature Summary Compute style for a node. Style computation pattern: Generates cache key from node and parentStyle Returns cached result if available Resolves all style properties with inheritance Applies design token resolution Caches result for subsequent calls Tracks performance statistics <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone.","contentHash":"39c9a1b197ce8b7caafbd4267ecea877fcf3ff59f68c1213145b927e83b570c8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/ComputedStyle.md::0001","path":"plauna/reference/style/ComputedStyle.md","title":"style/ComputedStyle.js","description":"","kind":"reference","source":"plauna/style/ComputedStyle.js","updated":"","headings":["style/ComputedStyle.js","Classes","class ComputedStyle","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"bc59708bd5b4faffff862c21bf1abc6d475d05ddd132acfdfe0a6d482f862729"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/DesignTokenContracts.md::0000","path":"plauna/reference/style/DesignTokenContracts.md","title":"style/DesignTokenContracts.js","description":"","kind":"reference","source":"plauna/style/DesignTokenContracts.js","updated":"","headings":["style/DesignTokenContracts.js","Classes","class UnsupportedDesignTokenVersionError extends Error","Functions","prepareDesignTokenDocument(input)","createDesignTokenExport(input)","Constants","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Accept legacy raw token maps and return a canonical, safely cloned v1 envelope. Emit metadata additively so legacy readers still see token categories at the root. Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"b51e869683f7377d0a06801c208a064eaa83b82a85b51c662fb281ee0fc5cebe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/DesignTokens.md::0000","path":"plauna/reference/style/DesignTokens.md","title":"style/DesignTokens.js","description":"","kind":"reference","source":"plauna/style/DesignTokens.js","updated":"","headings":["style/DesignTokens.js","Classes","class DesignTokens","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes DesignTokens Design system token management. Token management pattern: Centralized token system for Plauna styling Manages spacing, typography, color, motion, borderRadius, shadows, zIndex Observer pattern for token change notifications Caching for performance optimization Deep merge strategy for token inheritance Architecture: tokens: Merged token object (defaults + custom) observers: Set of callback functions cache: Map of cached token lookups Method Signature Summary Get a token value by path. Token access pattern: Supports dot notation (e.g., 'spacing.md') Returns cached value if available Falls back to defaultValue if token not found Caches result for subsequent lookups Set a token value by path. Token mutation pattern: Sets token value using dot notation Clears cache to invalidate stale values Notifies observers of token change Provides old value for comparison Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"ab5299ea0edb4744239e08bf242350a6b825bc1b98a1df92adddaf0bbbd2d06e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/LayerManager.md::0000","path":"plauna/reference/style/LayerManager.md","title":"style/LayerManager.js","description":"","kind":"reference","source":"plauna/style/LayerManager.js","updated":"","headings":["style/LayerManager.js","Functions","getStackingContextCSS(layerName)","getLayerZIndex(layerName)","getLayerCSSVariables()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: LayerManager Semantic z index management system. Z index management pattern: Centralized z index constants organized by stacking context Arithmetic relationships for self documenting code Prevents z index wars by providing semantic layer names Uses isolation: isolate for stacking context isolation Stacking contexts (lowest to highest): Layout: backdrop, surface, widget gallery Modal: backdrop, panel Dropdown: backdrop, dropdown Tooltip Notification: toast, alert Arithmetic pattern: base = 0 above = 1 below = 1 Each layer is defined relative to the previous layer Functions Create CSS for stacking context isolation. Stacking context pattern: Uses isolation: isolate to create new stacking context Prevents side effects from parent stacking contexts Returns CSS object with isolation and z index Parameters: (string) — Name of the layer (e.g., 'z modal panel') Returns: CSS object with isolation and z index Get z index value for a layer Parameters: (string) — Name of the layer Returns: Z index value Get all layer values as CSS custom properties Returns: CSS custom property declarations Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also:","contentHash":"b037819be017821e2b49152d4923d6fe7180874d73942b756ee9b581b7e2cf7d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/LayerManager.md::0001","path":"plauna/reference/style/LayerManager.md","title":"style/LayerManager.js","description":"","kind":"reference","source":"plauna/style/LayerManager.js","updated":"","headings":["style/LayerManager.js","Functions","getStackingContextCSS(layerName)","getLayerZIndex(layerName)","getLayerCSSVariables()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"a589c0de17205df666e811a78434f2cb26ffecbc34d2cfde11e2192754ec4f07"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/StyleSizing.md::0000","path":"plauna/reference/style/StyleSizing.md","title":"style/StyleSizing.js","description":"","kind":"reference","source":"plauna/style/StyleSizing.js","updated":"","headings":["style/StyleSizing.js","Functions","resolvePlaunaStyleSize(value, options = {})","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"27e7a8f31ad3e623bb84797faddc5ce451215978bc108d608c590f0cc43acc13"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/ThemeController.md::0000","path":"plauna/reference/style/ThemeController.md","title":"style/ThemeController.js","description":"","kind":"reference","source":"plauna/style/ThemeController.js","updated":"","headings":["style/ThemeController.js","Classes","class ThemeController","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ThemeController Runtime theme management and switching. Theme switching pattern: Manages bright/night theme switching with live CSS updates Persists theme preference to localStorage Listens to system theme preference (prefers color scheme) Observer pattern for theme change notifications Applies theme via data theme attribute and CSS variables Features: Auto switch based on system preference Manual theme switching with setTheme() Theme persistence across sessions Observer notifications for reactive updates Classes Method Signature Summary Load saved theme from localStorage. Persistence pattern: Reads theme preference from localStorage Validates theme value (bright or night) Falls back to 'bright' if invalid or unavailable Gracefully handles localStorage errors Save theme preference to localStorage Setup system theme listener (prefers color scheme) Set the current theme. Theme switching pattern: Validates theme value (bright or night) Skips if already set to same theme Updates currentTheme state Applies theme to DOM (data theme attribute + CSS variables) Persists to localStorage Notifies observers of change Apply theme to DOM and CSS Get current theme Toggle between bright and night themes Subscribe to theme changes Notify all observers of theme change Get all available themes Check if theme is dark Check if theme is light Get theme specific CSS variable value Initialize theme system Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna","contentHash":"15b586ce4b4b5d9406720bdbe2ef136f8dfe39da9ed316edb1c062afcab5edfe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/ThemeController.md::0001","path":"plauna/reference/style/ThemeController.md","title":"style/ThemeController.js","description":"","kind":"reference","source":"plauna/style/ThemeController.js","updated":"","headings":["style/ThemeController.js","Classes","class ThemeController","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"(storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"165efcb9210ad6b5c21b0b57ac25204d963ff95993cce52ffb02f34b62bd8083"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/ThemeManager.md::0000","path":"plauna/reference/style/ThemeManager.md","title":"style/ThemeManager.js","description":"","kind":"reference","source":"plauna/style/ThemeManager.js","updated":"","headings":["style/ThemeManager.js","Classes","class ThemeManager","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ThemeManager Theme management system for Plauna. Theme management pattern: Provides theme registration and switching Supports custom token overrides Observer pattern for theme change notifications Deep merge strategy for token inheritance Pre registered themes (light, dark) Architecture: themes: Map of registered theme definitions observers: Set of callback functions for change notifications customTokens: Map of custom token overrides currentTheme: Currently active theme ID Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"2e51157f404d8eede8425c47fce0093f8e1a628591616630bca21f81759ed540"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/style/index.md::0000","path":"plauna/reference/style/index.md","title":"style/index.js","description":"","kind":"reference","source":"plauna/style/index.js","updated":"","headings":["style/index.js","Exports","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Style Module Exports Central export point for all Plauna styling utilities and managers. Exported modules: LayerManager: Semantic z index management system ThemeManager: Theme registration and management DesignTokens: Design system token management WidgetStyleManager: Theme aware widget styling CSSGenerator: Runtime CSS generation ThemeController: Runtime theme switching Usage: import { tokens, ThemeManager, layerValues } from './style/index.js'; Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"978915731754f20e81da4b71c206802fb0e1ae7521f64f29608f43bff76359c0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/surface/surface-manager.md::0000","path":"plauna/reference/surface/surface-manager.md","title":"surface/surface-manager.js","description":"","kind":"reference","source":"plauna/surface/surface-manager.js","updated":"","headings":["surface/surface-manager.js","Classes","class PlaunaSurfaceManager","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PlaunaSurfaceManager Manages GPU surfaces and rendering Integrates with existing VGPU patterns Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"644dc11028b4aeeb20ad7ae1cf0136c8065b3792292d20fd94fc48dae07e290a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/text/pretext-service.md::0000","path":"plauna/reference/text/pretext-service.md","title":"text/pretext-service.js","description":"","kind":"reference","source":"plauna/text/pretext-service.js","updated":"","headings":["text/pretext-service.js","Classes","class PlaunaTextService","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PlaunaTextService DOM free text measurement and layout Implements Pretext style text measurement for Plauna Classes PlaunaTextService DOM free text measurement and layout Implements Pretext style text measurement for Plauna Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"255ad75639059a37b432d741fa3355b04c94e852013579c6366eafe64d0bb08a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/themes/ThemeContracts.md::0000","path":"plauna/reference/themes/ThemeContracts.md","title":"themes/ThemeContracts.js","description":"","kind":"reference","source":"plauna/themes/ThemeContracts.js","updated":"","headings":["themes/ThemeContracts.js","Functions","validateThemeId(value, label = 'Theme id')","prepareThemeVariables(input, { allowNull = true } = {})","prepareThemeRegistry(input)","prepareThemeManifest(input, requestedId)","Constants","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"85a64bc6910afa70496f6e2978ca512d8d83eba5751488f5a7a1ab95c115643c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/themes/ThemeLoader.md::0000","path":"plauna/reference/themes/ThemeLoader.md","title":"themes/ThemeLoader.js","description":"","kind":"reference","source":"plauna/themes/ThemeLoader.js","updated":"","headings":["themes/ThemeLoader.js","Classes","class ThemeLoader","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ ThemeLoader File Based Theme Discovery and Loading ============================================================================ ThemeLoader is a file based theme system inspired by WordPress but modernized. It loads themes from plauna/themes/{id}/theme.json and applies CSS variables. THEME STRUCTURE: plauna/themes/ ├── base/ Base theme with all token defaults (required) │ └── theme.json Defines every possible CSS variable ├── dark/ Dark theme (extends base) │ └── theme.json Only overrides what's different from base ├── light/ Light theme (extends base) │ └── theme.json ├── high contrast/ High contrast theme (extends dark) │ └── theme.json ├── custom/ User starter template (extends dark) │ └── theme.json └── index.json Registry of discoverable themes THEME MANIFEST (theme.json): { \"name\": \"Theme Name\", \"description\": \"Theme description\", \"extends\": \"parent theme id\", // Optional: parent theme to inherit from \"variables\": { \"color primary\": \" 3b82f6\", // CSS variable name → value \"spacing md\": \"16px\", // null or omitted values inherit from parent } } THEME RESOLUTION CASCADE (highest priority wins): 1. base theme defaults (all variables defined) 2. Parent theme variables (if extends is set) 3. Current theme variables (overrides parent) 4. Runtime overrides (applyOverrides() per session changes) CSS VARIABLE APPLICATION: Variables are written to <style data plauna theme=\"1\" tag on :root Format: variable name: value; Overrides use separate <style data plauna overrides=\"1\" tag REGISTRY (themes/index.json): { \"themes\": [\"dark\", \"light\", \"high contrast\", \"custom\"] } Add your theme folder name here to make it","contentHash":"2fbccef39e990054d5e8a219eff084c94a119db1493a67dca6503e9ce895c064"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/themes/ThemeLoader.md::0001","path":"plauna/reference/themes/ThemeLoader.md","title":"themes/ThemeLoader.js","description":"","kind":"reference","source":"plauna/themes/ThemeLoader.js","updated":"","headings":["themes/ThemeLoader.js","Classes","class ThemeLoader","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"plauna overrides=\"1\" tag REGISTRY (themes/index.json): { \"themes\": [\"dark\", \"light\", \"high contrast\", \"custom\"] } Add your theme folder name here to make it discoverable without code changes. METHODS: discover(): Load themes/index.json and return available theme IDs load(id): Load raw theme.json without resolving parent chain resolve(id): Resolve full theme with parent chain merged apply(id): Apply theme CSS variables to DOM applyOverrides(vars): Apply per session variable overrides clearOverrides(): Remove runtime overrides listThemes(): Return theme metadata for all discoverable themes Classes ThemeLoader File based theme discovery and loading. Theme loading pattern: Loads themes from plauna/themes/{id}/theme.json Supports theme extension via \"extends\" property Resolves parent chain with cascading variable inheritance Applies CSS variables to :root via style tags Caches resolved themes for performance Architecture: cache: Resolved theme manifests (parent chain merged) rawCache: Raw theme.json files registry: Discoverable theme IDs from index.json styleEl: CSS variable style tag overrideEl: Runtime override style tag Method Signature Summary Discover available themes from themes/index.json. Discovery pattern: Loads themes/index.json registry Returns list of discoverable theme IDs Filters out base (internal theme) Falls back to ['dark', 'light'] on error Caches registry for subsequent calls Load raw theme.json without resolving parent chain. Raw loading pattern: Fetches theme.json from plauna/themes/{id}/theme.json Caches raw manifest in rawCache Returns unmodified JSON (no parent resolution) Throws error if theme not found Apply resolved theme variables to :root as CSS custom properties. CSS variable application pattern: Creates <style data plauna theme=\"1\" tag if not","contentHash":"3ca164a966f21752ea7dc2e92155d269217bee24e6c9fa3ee9eb49b2ed420540"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/themes/ThemeLoader.md::0002","path":"plauna/reference/themes/ThemeLoader.md","title":"themes/ThemeLoader.js","description":"","kind":"reference","source":"plauna/themes/ThemeLoader.js","updated":"","headings":["themes/ThemeLoader.js","Classes","class ThemeLoader","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"not found Apply resolved theme variables to :root as CSS custom properties. CSS variable application pattern: Creates <style data plauna theme=\"1\" tag if not exists Writes variables as :root { name: value; } Sets data theme attribute on document.documentElement Replaces existing content on subsequent calls Load, resolve, and apply a theme by ID. Theme application pattern: Resolves theme with parent chain Applies CSS variables to :root Sets data theme attribute Returns resolved theme for reference Apply per session CSS variable overrides on top of the active theme. Override pattern: Creates <style data plauna overrides=\"1\" tag if not exists Overrides win over all theme variables (highest priority) Useful for","contentHash":"20750ff363e0e790d8791b0847189c830dcbd290a9290eb3d5c11dd40d5ed49a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/themes/ThemePreference.md::0000","path":"plauna/reference/themes/ThemePreference.md","title":"themes/ThemePreference.js","description":"","kind":"reference","source":"plauna/themes/ThemePreference.js","updated":"","headings":["themes/ThemePreference.js","Functions","migrateLegacyThemePreference(storage)","readFileThemePreference(storage)","writeFileThemePreference(value, storage)","readColorModePreference(storage)","writeColorModePreference(value, storage)","Constants","Notes & Examples","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Expand legacy state into both namespaced keys without contracting the old key. Older tabs may still be reading it during a rolling browser rollout. Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"211f14efb2e961e0aff9abb56ecedd4934bbd46c7e3a4c600d98de4792e1906c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/SmartContextMenu.md::0000","path":"plauna/reference/ui/SmartContextMenu.md","title":"ui/SmartContextMenu.js","description":"","kind":"reference","source":"plauna/ui/SmartContextMenu.js","updated":"","headings":["ui/SmartContextMenu.js","Classes","class PlaunaSmartContextMenu","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ PlaunaSmartContextMenu Context Aware Right Click Menu ============================================================================ PlaunaSmartContextMenu provides a context aware right click menu that scans the visual tree near the cursor and builds a smart action panel based on nearby UI nodes. SCANNING ALGORITHM: 1. On right click, collectNearbyNodes() scans the visual tree around cursor 2. Uses adaptive radius based on node density (shrinks when many nodes nearby) 3. Scores each node based on type, role, text content, and distance 4. Returns top N nodes within scan radius NODE SCORING: Inside node: +1000 + inset depth (prioritizes deeper inside) Has role: +22 Has text content: +10 Has className: +8 Button type: +25 Input type: +18 Menu type: +15 Small area: +6 (prefers compact elements) ADAPTIVE RADIUS: Base radius: 140px (configurable) Density = 8: 48% of base (72px min) Density = 6: 55% of base (80px min) Density = 4: 65% of base (90px min) Density = 2: 80% of base (112px min) Density < 2: 100% of base (140px) DOM FALLBACK: If visualTree is unavailable (e.g., in showcase shell), falls back to DOM scanning Uses element. plaunaNode back reference set by WidgetRenderer Scans all elements in root and collects associated UINodes ACTION GENERATION: For each nearby node, generates contextual actions Actions include: inspect, copy text, copy ID, copy styles, toggle visibility Actions are sorted by relevance and displayed in a radial menu VISUAL FEEDBACK: Draws a scan ring around cursor during scanning Highlights nearby nodes with visual indicators Shows tie nodes (nodes with similar scores) with special","contentHash":"33efe0193ba66385e74982d39956e1aa71506a3e992d44fe2e6bf397fe24e0d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/SmartContextMenu.md::0001","path":"plauna/reference/ui/SmartContextMenu.md","title":"ui/SmartContextMenu.js","description":"","kind":"reference","source":"plauna/ui/SmartContextMenu.js","updated":"","headings":["ui/SmartContextMenu.js","Classes","class PlaunaSmartContextMenu","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"Draws a scan ring around cursor during scanning Highlights nearby nodes with visual indicators Shows tie nodes (nodes with similar scores) with special styling INTEGRATION: Requires: app (PlaunaApp), root (DOM element), visualTree (optional) Optional: domRenderer (WidgetRenderer instance), console (logger) Configurable: radius, maxNearby, maxActions, enabled flag USAGE: const menu = new PlaunaSmartContextMenu({ app: plaunaApp, root: document.body, visualTree: app.visualTree, domRenderer: app.domRenderer, radius: 140, maxNearby: 6, maxActions: 6 }); menu.enable(); Classes PlaunaSmartContextMenu Context aware right click menu. Context menu pattern: Scans visual tree near cursor on right click Builds smart action panel based on nearby UI nodes Adaptive radius based on node density Node scoring for relevance ranking Visual feedback with scan ring and highlights Integration: Requires: app (PlaunaApp), root (DOM element), visualTree (optional) Optional: domRenderer (WidgetRenderer), console (logger) Configurable: radius, maxNearby, maxActions, enabled flag Method Signature Summary Attach context menu event listeners. Attachment pattern: Registers contextmenu event handler (right click) Registers keydown handler (Escape to dismiss) Registers pointerdown handler (click outside to dismiss) Uses capture phase for early event interception Idempotent (checks enabled flag before attaching) Detach context menu event listeners. Detachment pattern: Removes all event listeners registered by attach() Uses capture phase to match attachment Cleans up event references Create context menu data from right click event. Context creation pattern: Extracts cursor position from event Finds target node from event target Scans for nearby nodes using adaptive radius Selects primary node (target or","contentHash":"c2349ac46cb5139c0e3d46115a732b2a4075c64c75e258794530126b1c5e2bbe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/SmartContextMenu.md::0002","path":"plauna/reference/ui/SmartContextMenu.md","title":"ui/SmartContextMenu.js","description":"","kind":"reference","source":"plauna/ui/SmartContextMenu.js","updated":"","headings":["ui/SmartContextMenu.js","Classes","class PlaunaSmartContextMenu","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"pattern: Extracts cursor position from event Finds target node from event target Scans for nearby nodes using adaptive radius Selects primary node (target or top nearby) Builds contextual actions for nodes Collect nearby nodes from visual tree or DOM. Scanning algorithm: Uses adaptive radius based on node density Falls back to DOM scanning if visualTree unavailable Scores each node based on type, role, text, and distance Returns top N nodes within scan radius Extract type aware detail items for the smart context panel. Returns a list of metadata pills that adapt to node type: Type/Role/ID: always shown for identification Variant/Size/Status: shown when present for styling/state context Profile specific: na","contentHash":"958c73cccb25d04bf4883064cd48d58e370b31964007b3998809601e8c2c87ca"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/ToastManager.md::0000","path":"plauna/reference/ui/ToastManager.md","title":"ui/ToastManager.js","description":"","kind":"reference","source":"plauna/ui/ToastManager.js","updated":"","headings":["ui/ToastManager.js","Classes","class ToastManager","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ ToastManager Unified Toast Notification System ============================================================================ ToastManager provides a user friendly toast notification system for Plauna. It separates UI notifications from debug logging and provides a clean API. TOAST POSITIONS: top right: Top right corner (default) top left: Top left corner top center: Top center bottom right: Bottom right corner bottom left: Bottom left corner bottom center: Bottom center TOAST TYPES: success: Green checkmark, 3s duration error: Red X, 5s duration warning: Yellow warning, 4s duration info: Blue info, 3s duration loading: Gray spinner, indefinite (must be manually dismissed) TOAST LIFECYCLE: 1. show(options): Creates toast element and appends to container 2. Animate in: Slide in animation based on position 3. Display: Shows for duration (or indefinite) 4. Animate out: Slide out animation 5. Remove: Element removed from DOM TOAST STRUCTURE: Container: Fixed position div at specified position Toast Element: Individual toast with type styling Icon: Type specific icon (✓, ✕, ⚠, ℹ, ⟳) Content: Title and optional description Close Button: X button to dismiss manually Progress Bar: Optional countdown indicator AUTO DISMISS: maxToasts: Maximum concurrent toasts (default: 5) defaultDuration: Default display time (default: 4000ms) Oldest toasts are dismissed when limit is reached Loading toasts have indefinite duration (duration: 0) ANIMATIONS: Slide in/out based on position Fade effect for smooth transitions CSS transitions defined in Toast.css CONVENIENCE METHODS: success(message, options): Show success toast","contentHash":"2e01b0ec14015929bdb2c185a9a3abf34a0df3290fa5bb765b133c4eaad04271"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/ToastManager.md::0001","path":"plauna/reference/ui/ToastManager.md","title":"ui/ToastManager.js","description":"","kind":"reference","source":"plauna/ui/ToastManager.js","updated":"","headings":["ui/ToastManager.js","Classes","class ToastManager","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"based on position Fade effect for smooth transitions CSS transitions defined in Toast.css CONVENIENCE METHODS: success(message, options): Show success toast error(message, options): Show error toast warning(message, options): Show warning toast info(message, options): Show info toast loading(message, options): Show loading toast GLOBAL SINGLETON: Toast.initialize() creates global singleton Toast.show() uses global singleton Used by NotificationSystem and widget gallery USAGE: const manager = new ToastManager({ position: 'top right' }); manager.success('Operation completed'); manager.error('Failed to save', { duration: 6000 }); // Or use global singleton Toast.initialize(); Toast.show('Hello world', 'info'); Classes ToastManager Unified toast notification system. Toast pattern: Fixed position container at specified position Type specific styling (success, error, warning, info, loading) Auto dismiss with configurable duration Slide in/out animations based on position Max concurrent toast limit with FIFO dismissal Lifecycle: 1. show(): Creates toast and appends to container 2. Animate in: Slide in based on position 3. Display: Shows for duration (or indefinite for loading) 4. Animate out: Slide out animation 5. Remove: Element removed from DOM Method Signature Summary Show a toast notification. Toast creation pattern: Creates toast element with type specific styling Adds icon, content, close button, and optional progress bar Appends to container at specified position Enforces max concurrent toast limit (dismisses oldest) Auto dismisses after duration (0 for indefinite) Returns toast ID for update/dismiss operations Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command","contentHash":"d98db13c7aa9844471f88e526eb0f5b8a23d2e6c42d0f29e81c1ee63d46469bd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/ToastManager.md::0002","path":"plauna/reference/ui/ToastManager.md","title":"ui/ToastManager.js","description":"","kind":"reference","source":"plauna/ui/ToastManager.js","updated":"","headings":["ui/ToastManager.js","Classes","class ToastManager","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"<! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"a6fda47cf15043eae0fcba64dcafc1285198fe3824a19e81dc6e8a0dcec529af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/WidgetGallery.md::0000","path":"plauna/reference/ui/WidgetGallery.md","title":"ui/WidgetGallery.js","description":"","kind":"reference","source":"plauna/ui/WidgetGallery.js","updated":"","headings":["ui/WidgetGallery.js","Classes","class WidgetGallery","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ WidgetGallery Storybook Style Widget Showcase ============================================================================ WidgetGallery is a Storybook like gallery that renders real interactive widget instances from widget.stories() definitions. It's used for development and documentation of Plauna widgets. RENDERING STRATEGY: Uses widgetRenderer.render() directly to bypass the broken require() in create() Instantiates widgets with new WidgetClass(id, storyOptions) Renders each widget to DOM in preview cells Adds interactive state badges (on/off/animating/sending toast) Wires click/change/input events to emit toast notifications GALLERY STRUCTURE: Header: Title and theme selector dropdown Tabs: Category navigation (Primitive, Input, Form, Layout, Navigation, etc.) Content Area: Grid of widget story previews Story Cell: Widget preview + label + state badges STORY PATTERN: Each widget defines static stories() returning named configurations: static stories() { return { 'Story Name': { variant: 'primary', size: 'md' }, 'Another Story': { disabled: true } }; } SPECIAL HANDLING: Tooltips: Appended to document.body for correct overlay positioning Toasts: Call show() immediately for visible demos State Badges: Display on/off/animating/sending toast indicators Interactive Events: Click/change/input emit toast notifications DATA ATTRIBUTES: data widget: Widget ID (e.g., 'button', 'badge') data variant: Story variant name data size: Story size name data story: Story name TOAST INTEGRATION: Uses global Toast from ToastManager Emits toasts on widget interactions for immediate feedback Toast position defaults to top","contentHash":"dc09f00c55901641ed41d2a96c6d20f963aa47fe85b88b572995d04318e4d82a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/WidgetGallery.md::0001","path":"plauna/reference/ui/WidgetGallery.md","title":"ui/WidgetGallery.js","description":"","kind":"reference","source":"plauna/ui/WidgetGallery.js","updated":"","headings":["ui/WidgetGallery.js","Classes","class WidgetGallery","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"Story name TOAST INTEGRATION: Uses global Toast from ToastManager Emits toasts on widget interactions for immediate feedback Toast position defaults to top right THEME SELECTOR: Async dropdown in header Calls shell.setTheme() on change Refreshes gallery on theme change Classes WidgetGallery Interactive widget showcase. Gallery architecture: Storybook like interface for widget documentation Renders real interactive widget instances Category based navigation with tabs Interactive state badges (on/off/animating/sending toast) Toast integration for immediate feedback Method Signature Summary Mount the gallery to a DOM element. Mounting pattern: Creates gallery app container with flex layout Builds header with title and theme selector Builds category tabs for navigation Creates content area for widget previews Activates first category on mount <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"ad81aa8781918d02063d12513dde57a902f602f1b1081851329cafe8a74e75ad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/WidgetShowcase.md::0000","path":"plauna/reference/ui/WidgetShowcase.md","title":"ui/WidgetShowcase.js","description":"","kind":"reference","source":"plauna/ui/WidgetShowcase.js","updated":"","headings":["ui/WidgetShowcase.js","Classes","class WidgetShowcase","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WidgetShowcase Display system for widget examples and variants. Architecture: Renders individual widget examples with state variations Creates structured showcase sections with title, description, and variants Supports variant grids, state grids, size grids, and color grids Uses PlaunaTextService for internationalization Returns UINode trees for integration with Plauna rendering Showcase structure: Container: Card like container with title and description Variants grid: Auto fit grid for widget variants States grid: Grid for different widget states (hover, active, disabled) Size grid: Grid for different widget sizes Color grid: Grid for different color variants Classes WidgetShowcase Widget example renderer. Showcase pattern: Creates structured sections for widget documentation Renders variants, states, sizes, and colors in grids Returns UINode trees for Plauna rendering Supports optional interactive mode Method Signature Summary Create a showcase section for a widget. Showcase creation pattern: Creates card like container with title and description Renders variants in auto fit grid if provided Renders states grid if provided (hover, active, disabled) Renders size grid if provided Renders color grid if provided Returns UINode tree for Plauna rendering Create a variant card Create a state card Create a size card Create a color card Get showcase by widget name Get all showcases Clear all showcases Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also:","contentHash":"0dac2c0580bd0bed234e620b6cb67c3ddad145e0458d154a4a2116cbf6cc4939"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/ui/WidgetShowcase.md::0001","path":"plauna/reference/ui/WidgetShowcase.md","title":"ui/WidgetShowcase.js","description":"","kind":"reference","source":"plauna/ui/WidgetShowcase.js","updated":"","headings":["ui/WidgetShowcase.js","Classes","class WidgetShowcase","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"b9a251354fd9ee1c234717781c61c1060679068b0313c776537df0665ac6b525"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/DataViews/Card.md::0000","path":"plauna/reference/widgets/DataViews/Card.md","title":"widgets/DataViews/Card.js","description":"","kind":"reference","source":"plauna/widgets/DataViews/Card.js","updated":"","headings":["widgets/DataViews/Card.js","Classes","class Card extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Card Flexible content container widget for Plauna Provides header, body, and footer slots with variant system Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"ef16281ca5884570cf6389a31a9776f057fae73bca0e4f5e8536296de9c8e3ab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/DataViews/List.md::0000","path":"plauna/reference/widgets/DataViews/List.md","title":"widgets/DataViews/List.js","description":"","kind":"reference","source":"plauna/widgets/DataViews/List.js","updated":"","headings":["widgets/DataViews/List.js","Classes","class List extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: List Basic list widget for Plauna Provides list functionality with multiple variants and states Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"801646cb8e99e668844f98229367ac51a9a205662baf995a1067c8510eacee85"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/DataViews/ListView.md::0000","path":"plauna/reference/widgets/DataViews/ListView.md","title":"widgets/DataViews/ListView.js","description":"","kind":"reference","source":"plauna/widgets/DataViews/ListView.js","updated":"","headings":["widgets/DataViews/ListView.js","Classes","class ListView extends UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ListView Data display widget for Plauna Provides virtualized list rendering with selection and sorting Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"439b5a05296ef1f8b9b5a0f950180d5741a681dfb51ec6c901025c4e81b9ed18"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/DataViews/Table.md::0000","path":"plauna/reference/widgets/DataViews/Table.md","title":"widgets/DataViews/Table.js","description":"","kind":"reference","source":"plauna/widgets/DataViews/Table.js","updated":"","headings":["widgets/DataViews/Table.js","Classes","class Table extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Table Data table widget for Plauna Provides table functionality with sorting, filtering, and pagination Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"72c77ce2541bc0d1a5d1a237e4da8573fc38f2383e1cffb5b422c6fcebef52c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/DataViews/Tree.md::0000","path":"plauna/reference/widgets/DataViews/Tree.md","title":"widgets/DataViews/Tree.js","description":"","kind":"reference","source":"plauna/widgets/DataViews/Tree.js","updated":"","headings":["widgets/DataViews/Tree.js","Classes","class Tree extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Tree Hierarchical data display widget for Plauna Provides tree functionality with expand/collapse and navigation Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"b3393ced640abc53dceb31326b74f8fe89c0fec2c97d39527f4c175195d37ac0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/DataViews/index.md::0000","path":"plauna/reference/widgets/DataViews/index.md","title":"widgets/DataViews/index.js","description":"","kind":"reference","source":"plauna/widgets/DataViews/index.js","updated":"","headings":["widgets/DataViews/index.js","Functions","getDataviewsWidget(id)","getAllDataviewsWidgets()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Data Views Widgets Category Data display and visualization widgets Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"3bac4a2357c2acb18d7ddfe0f51c72be7c54f838e94b688ec0876cc92f93966c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Feedback/Alert.md::0000","path":"plauna/reference/widgets/Feedback/Alert.md","title":"widgets/Feedback/Alert.js","description":"","kind":"reference","source":"plauna/widgets/Feedback/Alert.js","updated":"","headings":["widgets/Feedback/Alert.js","Classes","class Alert extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Alert Alert message widget for Plauna Provides alert functionality with multiple variants and dismissible options Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"9b6e903b9953dcedcee6509b9d5be6d4e5679be88b117bedba53fc7d3b34ce67"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Feedback/EmptyState.md::0000","path":"plauna/reference/widgets/Feedback/EmptyState.md","title":"widgets/Feedback/EmptyState.js","description":"","kind":"reference","source":"plauna/widgets/Feedback/EmptyState.js","updated":"","headings":["widgets/Feedback/EmptyState.js","Classes","class EmptyState extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: EmptyState Empty state widget for Plauna Provides empty state functionality with multiple variants and content options Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"aff1db1957d680e24d4a7bc4be391807028c6c2e046541b71b8ded3f3d6d95d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Feedback/Spinner.md::0000","path":"plauna/reference/widgets/Feedback/Spinner.md","title":"widgets/Feedback/Spinner.js","description":"","kind":"reference","source":"plauna/widgets/Feedback/Spinner.js","updated":"","headings":["widgets/Feedback/Spinner.js","Classes","class Spinner extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Spinner Loading spinner widget for Plauna Provides spinner functionality with multiple variants and sizes Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"af005224834dfe9b529f42cb02a827aba2954de13414dcabdce57c746fea1dac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Feedback/Status.md::0000","path":"plauna/reference/widgets/Feedback/Status.md","title":"widgets/Feedback/Status.js","description":"","kind":"reference","source":"plauna/widgets/Feedback/Status.js","updated":"","headings":["widgets/Feedback/Status.js","Classes","class Status extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Status Status indicator widget for Plauna Provides status functionality with multiple variants and sizes Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"281db6cedd56bcc2eec5c60ed323507651003711ba1ba163469a84bbc0186e1d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Feedback/Toast.md::0000","path":"plauna/reference/widgets/Feedback/Toast.md","title":"widgets/Feedback/Toast.js","description":"","kind":"reference","source":"plauna/widgets/Feedback/Toast.js","updated":"","headings":["widgets/Feedback/Toast.js","Classes","class Toast extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Toast Notification toast widget for Plauna Provides toast functionality with multiple variants and auto dismiss Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"0514362d825c7ca42141f7a659d4893d9955117566534172133b5904589d6d7d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Feedback/index.md::0000","path":"plauna/reference/widgets/Feedback/index.md","title":"widgets/Feedback/index.js","description":"","kind":"reference","source":"plauna/widgets/Feedback/index.js","updated":"","headings":["widgets/Feedback/index.js","Functions","getFeedbackWidget(id)","getAllFeedbackWidgets()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Feedback Widgets Category User feedback and notification widgets Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"36c40fd740e7f59e8be01713b4662e9e25e629ce6dd540ba4b405feae45d10a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/Checkbox.md::0000","path":"plauna/reference/widgets/Form/Checkbox.md","title":"widgets/Form/Checkbox.js","description":"","kind":"reference","source":"plauna/widgets/Form/Checkbox.js","updated":"","headings":["widgets/Form/Checkbox.js","Classes","class Checkbox extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Checkbox Multi select form control widget for Plauna Provides checkbox functionality with multiple states and variants Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"e5bec918ec9d22890d417e04401f58d5d26be0e864647e8a60050d0c0d4f16a1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/Input.md::0000","path":"plauna/reference/widgets/Form/Input.md","title":"widgets/Form/Input.js","description":"","kind":"reference","source":"plauna/widgets/Form/Input.js","updated":"","headings":["widgets/Form/Input.js","Classes","class Input extends UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Input Form input widget for Plauna Provides text input with validation and styling options Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"2d72000e405217ab19eae2207ced7285382ce5cbf0784fbe24a55cc70ba02122"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/Radio.md::0000","path":"plauna/reference/widgets/Form/Radio.md","title":"widgets/Form/Radio.js","description":"","kind":"reference","source":"plauna/widgets/Form/Radio.js","updated":"","headings":["widgets/Form/Radio.js","Classes","class Radio extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Radio Single select form control widget for Plauna Provides radio button functionality with multiple states and variants Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"14e871859347361f5a6f944967ed054a147fadcef413fc7f2267fba36c9eaf37"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/Rating.md::0000","path":"plauna/reference/widgets/Form/Rating.md","title":"widgets/Form/Rating.js","description":"","kind":"reference","source":"plauna/widgets/Form/Rating.js","updated":"","headings":["widgets/Form/Rating.js","Classes","class Rating extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Rating Star rating widget for Plauna Provides rating functionality with multiple states and variants Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"d2a110e4e34bfd9635caaa78a66d019a29140091f1a10630ce3591bd617286a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/Select.md::0000","path":"plauna/reference/widgets/Form/Select.md","title":"widgets/Form/Select.js","description":"","kind":"reference","source":"plauna/widgets/Form/Select.js","updated":"","headings":["widgets/Form/Select.js","Classes","class Select extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Select Multi option selection widget for Plauna Provides dropdown functionality with search and keyboard navigation Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"7de29f2eae13475a9476a305180ad1d2fa60a40b7cd075cff70f4337c94e499d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/Slider.md::0000","path":"plauna/reference/widgets/Form/Slider.md","title":"widgets/Form/Slider.js","description":"","kind":"reference","source":"plauna/widgets/Form/Slider.js","updated":"","headings":["widgets/Form/Slider.js","Classes","class Slider extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Slider Range selection widget for Plauna Provides slider functionality with multiple states and variants Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"d07f7c068b00c8fcc312d54fdd547310e5c0ba4e8623237f59e1540e2eb4faf4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/Switch.md::0000","path":"plauna/reference/widgets/Form/Switch.md","title":"widgets/Form/Switch.js","description":"","kind":"reference","source":"plauna/widgets/Form/Switch.js","updated":"","headings":["widgets/Form/Switch.js","Classes","class Switch extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Switch Binary on/off form control widget for Plauna Provides toggle functionality with multiple states and variants Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"99c712ae3adad5bc413075e8e8ed8fa1d65d689b807ee224321c04578dfda37e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/Textarea.md::0000","path":"plauna/reference/widgets/Form/Textarea.md","title":"widgets/Form/Textarea.js","description":"","kind":"reference","source":"plauna/widgets/Form/Textarea.js","updated":"","headings":["widgets/Form/Textarea.js","Classes","class Textarea extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Textarea Multi line text input widget for Plauna Provides textarea functionality with multiple states and variants Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"83b6aa19dd582509bc398d2a6f01968dd20890ae8ea0a7a6b53340691268c64e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Form/index.md::0000","path":"plauna/reference/widgets/Form/index.md","title":"widgets/Form/index.js","description":"","kind":"reference","source":"plauna/widgets/Form/index.js","updated":"","headings":["widgets/Form/index.js","Functions","getFormWidget(id)","getAllFormWidgets()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Form Widgets Category Form elements and validation widgets Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"f2303dfdada66c50f5c313bde334bd630092f5888eaf9fba060b1ec775e85e59"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Button.md::0000","path":"plauna/reference/widgets/Input/Button.md","title":"widgets/Input/Button.js","description":"","kind":"reference","source":"plauna/widgets/Input/Button.js","updated":"","headings":["widgets/Input/Button.js","Classes","class Button extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Button Interactive button widget for Plauna Provides various button types, states, and accessibility Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"507dac1ca0ff5d05044646ccf673dfbf088d0d44699a1b69a0fb63015d7cfdf5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Color.md::0000","path":"plauna/reference/widgets/Input/Color.md","title":"widgets/Input/Color.js","description":"","kind":"reference","source":"plauna/widgets/Input/Color.js","updated":"","headings":["widgets/Input/Color.js","Classes","class Color extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Color Color picker widget for Plauna Provides color selection with various input formats Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"9568cceb0991a16d2ee8e3757a2be319363a23f698f7f69a67466cfb2117b087"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Date.md::0000","path":"plauna/reference/widgets/Input/Date.md","title":"widgets/Input/Date.js","description":"","kind":"reference","source":"plauna/widgets/Input/Date.js","updated":"","headings":["widgets/Input/Date.js","Classes","class Date extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Date Date picker widget for Plauna Provides date selection with various formats and validation Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"b97ae456bad8cc99287ad45ab2cf2c7dd6a7e5cc7d5fade48918a5fbf656adec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/File.md::0000","path":"plauna/reference/widgets/Input/File.md","title":"widgets/Input/File.js","description":"","kind":"reference","source":"plauna/widgets/Input/File.js","updated":"","headings":["widgets/Input/File.js","Classes","class File extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: File File input widget for Plauna Provides file upload functionality with drag and drop support Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"b8b421605339f22839ca1a1a43b3a1897acfaab403733689229fc914040e6ac6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Input.md::0000","path":"plauna/reference/widgets/Input/Input.md","title":"widgets/Input/Input.js","description":"","kind":"reference","source":"plauna/widgets/Input/Input.js","updated":"","headings":["widgets/Input/Input.js","Classes","class Input extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Input Text input widget for Plauna Provides various input types with validation, states, and accessibility Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"c61d2d7e1bec695714f553547382e536214d60fa2992f520a5d9ed4b4099cd4e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Number.md::0000","path":"plauna/reference/widgets/Input/Number.md","title":"widgets/Input/Number.js","description":"","kind":"reference","source":"plauna/widgets/Input/Number.js","updated":"","headings":["widgets/Input/Number.js","Classes","class Number extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Number Number input widget for Plauna Provides numeric input with validation, controls, and formatting Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"f16fbfa1613fd38822398767719eb23b6c2a1c49e58dcc070344cecc462e7485"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Range.md::0000","path":"plauna/reference/widgets/Input/Range.md","title":"widgets/Input/Range.js","description":"","kind":"reference","source":"plauna/widgets/Input/Range.js","updated":"","headings":["widgets/Input/Range.js","Classes","class Range extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Range Range slider widget for Plauna Provides range selection with various configurations Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"49a1ce7201746cfbe6cd7a25834434037835b91c2a07eb74a10a2b69d42a35d6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Search.md::0000","path":"plauna/reference/widgets/Input/Search.md","title":"widgets/Input/Search.js","description":"","kind":"reference","source":"plauna/widgets/Input/Search.js","updated":"","headings":["widgets/Input/Search.js","Classes","class Search extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Search Search input widget for Plauna Provides search functionality with suggestions and filters Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"5500b29a48a7fc4a257fefdc10f7322944c6f640668ce20c21bccf4c7a20fb94"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Search.new.md::0000","path":"plauna/reference/widgets/Input/Search.new.md","title":"widgets/Input/Search.new.js","description":"","kind":"reference","source":"plauna/widgets/Input/Search.new.js","updated":"","headings":["widgets/Input/Search.new.js","Classes","class Search extends WidgetItem","Re-exports","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Search Search input widget for Plauna Provides search functionality with suggestions and filters Refactored to follow the new WidgetItem pattern while maintaining UINode compatibility Classes Method Signature Summary Get default widget options Get supported events Get theme tokens requirements Create widget instance Validate widget specific options Re exports <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"b4d8a1ace93f4a77f096d5e762b2b5a0adba99841ed68457e7dad3b1b459d37d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Tag.md::0000","path":"plauna/reference/widgets/Input/Tag.md","title":"widgets/Input/Tag.js","description":"","kind":"reference","source":"plauna/widgets/Input/Tag.js","updated":"","headings":["widgets/Input/Tag.js","Classes","class Tag extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Tag Tag input widget for Plauna Provides tag management with autocomplete and suggestions Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"ab98218ccb32ac9c1505268728f002d81b2718ba85d05fc3afa466c5e0c6a413"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Time.md::0000","path":"plauna/reference/widgets/Input/Time.md","title":"widgets/Input/Time.js","description":"","kind":"reference","source":"plauna/widgets/Input/Time.js","updated":"","headings":["widgets/Input/Time.js","Classes","class Time extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Time Time picker widget for Plauna Provides time selection with various formats and validation Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"150c16186fd348ba406f56bc2db42bea0ce0d981e1d1f95c05815c2a8705a7b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/Upload.md::0000","path":"plauna/reference/widgets/Input/Upload.md","title":"widgets/Input/Upload.js","description":"","kind":"reference","source":"plauna/widgets/Input/Upload.js","updated":"","headings":["widgets/Input/Upload.js","Classes","class Upload extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Upload File upload widget for Plauna Provides advanced file upload with drag and drop, progress, and preview Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"43f5d2b929dee72c44a9cad839e62d1e1dbf1023657f7fbc2966b44d84599687"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Input/index.md::0000","path":"plauna/reference/widgets/Input/index.md","title":"widgets/Input/index.js","description":"","kind":"reference","source":"plauna/widgets/Input/index.js","updated":"","headings":["widgets/Input/index.js","Functions","getInputWidget(id)","getAllInputWidgets()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Input Widgets Category User input and data entry widgets Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"fc8a75acac5a63e1535159a0654091f5f3f57494faf094885bab71a968148c68"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/Collapse.md::0000","path":"plauna/reference/widgets/Layout/Collapse.md","title":"widgets/Layout/Collapse.js","description":"","kind":"reference","source":"plauna/widgets/Layout/Collapse.js","updated":"","headings":["widgets/Layout/Collapse.js","Classes","class Collapse extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Collapse Collapsible content widget for Plauna Provides collapsible/expandable content areas with smooth animations Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"14f12f668b4fa2391333cb61b037db32e46cfaaa36e8b700130bd832c11c6fed"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/Container.md::0000","path":"plauna/reference/widgets/Layout/Container.md","title":"widgets/Layout/Container.js","description":"","kind":"reference","source":"plauna/widgets/Layout/Container.js","updated":"","headings":["widgets/Layout/Container.js","Classes","class Container extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Container Layout container widget for Plauna Provides flexible container with multiple variants and layouts Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"e026934d5865039a86f90fd1ba8b85045e5627764d8015b0f4e8095fbe954e6a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/Divider.md::0000","path":"plauna/reference/widgets/Layout/Divider.md","title":"widgets/Layout/Divider.js","description":"","kind":"reference","source":"plauna/widgets/Layout/Divider.js","updated":"","headings":["widgets/Layout/Divider.js","Classes","class Divider extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Divider Visual separation widget for Plauna Provides orientation variants with text label support Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"1dc61fdc942d6e9fb0d411781ea9930d2948d4001e0de545165a9c35b3a94654"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/Grid.md::0000","path":"plauna/reference/widgets/Layout/Grid.md","title":"widgets/Layout/Grid.js","description":"","kind":"reference","source":"plauna/widgets/Layout/Grid.js","updated":"","headings":["widgets/Layout/Grid.js","Classes","class Grid extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Grid CSS Grid wrapper widget for Plauna Provides responsive breakpoints and template areas support Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"eea3c21e44c034285b7131d8294aaa03aa380ba808bc0b0694c1590f7675b759"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/HeaderFooter.md::0000","path":"plauna/reference/widgets/Layout/HeaderFooter.md","title":"widgets/Layout/HeaderFooter.js","description":"","kind":"reference","source":"plauna/widgets/Layout/HeaderFooter.js","updated":"","headings":["widgets/Layout/HeaderFooter.js","Classes","class HeaderFooter extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: HeaderFooter Header and Footer widget for Plauna Provides semantic header and footer containers with comprehensive styling options Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"5745aa77fb65c6580e9408285055bb132e9c6138bb1ac6dbd28ecaa835839ac9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/Panel.md::0000","path":"plauna/reference/widgets/Layout/Panel.md","title":"widgets/Layout/Panel.js","description":"","kind":"reference","source":"plauna/widgets/Layout/Panel.js","updated":"","headings":["widgets/Layout/Panel.js","Classes","class Panel extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Panel Content panel widget for Plauna Provides panel containers with various styles and configurations Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"844e799c0473339820720ad04c44a77b50bf29ae7e9e6d6e401221354b6986da"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/Section.md::0000","path":"plauna/reference/widgets/Layout/Section.md","title":"widgets/Layout/Section.js","description":"","kind":"reference","source":"plauna/widgets/Layout/Section.js","updated":"","headings":["widgets/Layout/Section.js","Classes","class Section extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Section Content section widget for Plauna Provides semantic section containers with layout and styling options Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"d3c3a75c814eee94bdae25b9ba0e36db252c9da1e103f83a9b6f6479d78649ae"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/Spacer.md::0000","path":"plauna/reference/widgets/Layout/Spacer.md","title":"widgets/Layout/Spacer.js","description":"","kind":"reference","source":"plauna/widgets/Layout/Spacer.js","updated":"","headings":["widgets/Layout/Spacer.js","Classes","class Spacer extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Spacer Flexible spacing utility widget for Plauna Provides flexible sizing with token integration Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"6af204111d90441428e3faa93424131e0afa275e45535c411a390c7ddbf90386"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Layout/index.md::0000","path":"plauna/reference/widgets/Layout/index.md","title":"widgets/Layout/index.js","description":"","kind":"reference","source":"plauna/widgets/Layout/index.js","updated":"","headings":["widgets/Layout/index.js","Functions","getLayoutWidget(id)","getAllLayoutWidgets()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Layout Widgets Category Layout and container widgets Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"8d544b3e8fd206e3d7e0c628fc37e2d8112dac4513904c9739e985be14af5064"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/Breadcrumb.md::0000","path":"plauna/reference/widgets/Navigation/Breadcrumb.md","title":"widgets/Navigation/Breadcrumb.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/Breadcrumb.js","updated":"","headings":["widgets/Navigation/Breadcrumb.js","Classes","class Breadcrumb extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Breadcrumb Navigation hierarchy widget for Plauna Provides breadcrumb navigation with customizable separators Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"61fa7fcc75b6767a83d3d666198a405dc6dfb2cf26be413de40fe3f7abfd2e44"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/Dropdown.md::0000","path":"plauna/reference/widgets/Navigation/Dropdown.md","title":"widgets/Navigation/Dropdown.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/Dropdown.js","updated":"","headings":["widgets/Navigation/Dropdown.js","Classes","class Dropdown extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Dropdown Context menu widget for Plauna Provides dropdown menus with keyboard navigation and accessibility Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"52c8513ca460572b52055480c5416ae51e7840d3dcb2dac671a5c81f50b97a8d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/Menu.md::0000","path":"plauna/reference/widgets/Navigation/Menu.md","title":"widgets/Navigation/Menu.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/Menu.js","updated":"","headings":["widgets/Navigation/Menu.js","Classes","class Menu extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Menu Navigation menu widget for Plauna Provides menu functionality with multiple variants and states Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"85aedd1f8b209a1a0ffaecca49602b6b9c11353f4352764080aa5aa32a0c1a84"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/Navbar.md::0000","path":"plauna/reference/widgets/Navigation/Navbar.md","title":"widgets/Navigation/Navbar.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/Navbar.js","updated":"","headings":["widgets/Navigation/Navbar.js","Classes","class Navbar extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Navbar Navigation bar widget for Plauna Provides navbar functionality with multiple variants and layouts Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"a1a0b3784cdbd559c1deb1829488817dd05b3b62f02e0c267dd8e94c2fa512ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/Pagination.md::0000","path":"plauna/reference/widgets/Navigation/Pagination.md","title":"widgets/Navigation/Pagination.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/Pagination.js","updated":"","headings":["widgets/Navigation/Pagination.js","Classes","class Pagination extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Pagination Data navigation widget for Plauna Provides page controls with ellipsis and keyboard navigation Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"f4cd208866464f94926719e16ce1928d88eabd1412fd99d07d6d5f4a81c62e1d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/Sidebar.md::0000","path":"plauna/reference/widgets/Navigation/Sidebar.md","title":"widgets/Navigation/Sidebar.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/Sidebar.js","updated":"","headings":["widgets/Navigation/Sidebar.js","Classes","class Sidebar extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Sidebar Sidebar navigation widget for Plauna Provides sidebar functionality with multiple variants and states Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"c694e304ca25e7d66415dcab3a8abcaebcf0c0036a5a5f4d9eb7e79c29776a5b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/Stepper.md::0000","path":"plauna/reference/widgets/Navigation/Stepper.md","title":"widgets/Navigation/Stepper.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/Stepper.js","updated":"","headings":["widgets/Navigation/Stepper.js","Classes","class Stepper extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Stepper Step indicator widget for Plauna Provides stepper functionality with multiple variants and states Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"0aefff535f830b7908f3b44a5a93e55eeaea540ffdaeadc037f493ad6c1c435a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/Tabs.md::0000","path":"plauna/reference/widgets/Navigation/Tabs.md","title":"widgets/Navigation/Tabs.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/Tabs.js","updated":"","headings":["widgets/Navigation/Tabs.js","Classes","class Tabs extends UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Tabs Tab navigation widget for Plauna Provides tabbed interface with keyboard navigation and styling Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"47b09d28ceb07866b55416ebeefffee2000b02a3882da1cf85b636201fd483d9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Navigation/index.md::0000","path":"plauna/reference/widgets/Navigation/index.md","title":"widgets/Navigation/index.js","description":"","kind":"reference","source":"plauna/widgets/Navigation/index.js","updated":"","headings":["widgets/Navigation/index.js","Functions","getNavigationWidget(id)","getAllNavigationWidgets()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Navigation Widgets Category Navigation and menu widgets Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"e9d2e00bd842a70ba688881b12699f577e36eadb9314df5f3dcfa76c8d46b339"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Avatar.md::0000","path":"plauna/reference/widgets/Primitive/Avatar.md","title":"widgets/Primitive/Avatar.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Avatar.js","updated":"","headings":["widgets/Primitive/Avatar.js","Classes","class Avatar extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Avatar User representation widget for Plauna Provides image, icon, and text fallback with status indicators Classes Method Signature Summary Setup modern avatar surface styling. Modern design pattern: soft card like surface with subtle border and shadow. Border provides definition without harshness Box shadow adds depth and lift from background Backdrop filter creates glassy blur effect behind avatar Transitions are set on transform, shadow, border, and background for smooth state changes This treatment aligns with modern avatar/profile patterns that use subtle elevation rather than flat colors, making the avatar feel more tactile and interactive. Get size specific dimensions and typography. Size scale follows modern UI conventions with consistent spacing: xs: 24px Small avatars for compact lists (e.g., user menus) sm: 32px Small avatars for inline mentions md: 40px Default size for most use cases lg: 48px Large avatars for profile headers xl: 64px Extra large for hero sections 2xl: 96px Extra extra large for detailed profile views Font size scales proportionally with container size for consistent visual weight across all sizes. Get shape specific border radius values. Shape variants provide flexibility for different UI contexts: circle: 50% border radius for classic circular profile images square: Small border radius for modern card like avatars rounded: Medium border radius for softer square profiles Uses design tokens for consistent border radius values across the entire UI system. Setup modern interaction event handlers. Implements modern accessibility and interaction patterns: Hover state: subtle scale up and shadow elevation for tactile feedback Focus state: clear focus","contentHash":"51567e687b313a9e11a78d31f16d580d2a1e7fea7be3ad9a0b8a1c4b587a3a3e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Avatar.md::0001","path":"plauna/reference/widgets/Primitive/Avatar.md","title":"widgets/Primitive/Avatar.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Avatar.js","updated":"","headings":["widgets/Primitive/Avatar.js","Classes","class Avatar extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"Implements modern accessibility and interaction patterns: Hover state: subtle scale up and shadow elevation for tactile feedback Focus state: clear focus ring with primary color for keyboard navigation visibility Base shadow is restored on blur to maintain modern surface appearance Border is preserved across states (not cleared on blur) for consistent definition The focus ring uses a dual layer shadow (outer ring + inner shadow) for high visibility against both light and dark backgrounds, following WCAG 2.1 guidelines. Build the avatar's DOM structure. Layered structure for flexible avatar rendering: 1. Container: Base element with surface styling and event handlers 2. Content layer: Image, icon, or initials (mutually exclusive) 3. Status indicator: Optional dot in corner for presence (online/offline/busy) This pattern allows avatars to gracefully degrade from images to icons to text based on availability and preferences. Load avatar image asynchronously. Async image loading pattern with error handling: Creates Image object to preload image before rendering Sets onload handler to mark image as loaded and update content Sets onerror handler to fall back to initials/icon/placeholder Updates dirty flags to trigger re render when image loads or fails This pattern ensures avatars always display something, even if the image fails to load or the network is slow. Handle image loading errors. Fallback strategy when image fails to load: Marks image as not loaded and error state Triggers content update to fall back to initials/icon/placeholder Updates dirty flags to re render with fallback content This follows the progressive enhancement pattern: try the best option (image), then fall back to alternatives (initials, icon, placeholder). Generate accessible label for screen readers.","contentHash":"0ab3ca01bc26efdcc6cd05f33ccf0c7b0ba24c5392069fec94a451b006cacf66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Avatar.md::0002","path":"plauna/reference/widgets/Primitive/Avatar.md","title":"widgets/Primitive/Avatar.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Avatar.js","updated":"","headings":["widgets/Primitive/Avatar.js","Classes","class Avatar extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"enhancement pattern: try the best option (image), then fall back to alternatives (initials, icon, placeholder). Generate accessible label for screen readers. Modern accessibility pattern: uses fallback chain for descriptive labels. Prefers explicit name (user's display name) Falls back to alt text (image description) Falls back to initials (generated from name) for avatars without alt Includes shape for context (circle/square/rounded) Includes status for presence information This ensures screen readers always have meaningful text even when images fail to load or alt text is omitted, following WCAG 2.1 guidelines. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount","contentHash":"4b0a820f8301e6099da67d27014ad6c76e6407b4e040554e1bec6b35b4554d89"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Badge.md::0000","path":"plauna/reference/widgets/Primitive/Badge.md","title":"widgets/Primitive/Badge.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Badge.js","updated":"","headings":["widgets/Primitive/Badge.js","Classes","class Badge extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Badge Status indicator widget for Plauna Provides status indicators, counts, and labels with variants Classes Method Signature Summary Setup modern badge surface styling. Badge surface pattern for status indicators: Inline flex for proper alignment with text Font weight medium for clear visibility Transitions for smooth state changes User select none to prevent text selection Default cursor (badges are typically non interactive) Badges are designed to be small status indicators that can be placed inline with text or positioned absolutely on elements. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"ad2150f860231580127cada913a9594cd2d3420f25578ac8ece2322a37d348d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Button.md::0000","path":"plauna/reference/widgets/Primitive/Button.md","title":"widgets/Primitive/Button.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Button.js","updated":"","headings":["widgets/Primitive/Button.js","Classes","class Button extends UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Button Interactive button widget for Plauna Provides clickable button with styling, states, and event handling Classes Method Signature Summary Build button content with optional icon and text. Content structure pattern for flexible button rendering: Clear existing children first Add icon on left if specified and iconPosition is 'left' Add text content (or loading spinner) Add icon on right if specified and iconPosition is 'right' This pattern supports icons on either side of the text, or text only buttons, or icon only buttons. Get variant specific styling with semantic meaning. Variant system provides semantic visual feedback for different actions: primary: Main action, high emphasis with solid primary color secondary: Secondary action, medium emphasis with background color outline: Low emphasis, border only style with primary color ghost: Minimal emphasis, text only style with primary color danger: Destructive action, error color for caution warning: Cautionary action, warning color for attention success: Positive action, success color for confirmation Disabled state is handled uniformly across all variants: Reduced opacity (0.6) for visual de emphasis Removed shadow for flat appearance Neutral background color Changed cursor to not allowed Get minimum width for each button size. Modern accessibility pattern: ensures touch targets meet WCAG 2.1 minimum 44x44px recommendation for better mobile usability. sm: 36px (smaller compact buttons) md: 44px (default, meets accessibility minimum) lg: 52px (large touch targets) Get minimum height for each button size. Modern accessibility pattern: ensures touch targets meet WCAG 2.1 minimum 44x44px recommendation for better mobile","contentHash":"30b24d52ea312e19a1eea9b9ed0029066ec0074b43b8fc8aacaff4df9903119a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Button.md::0001","path":"plauna/reference/widgets/Primitive/Button.md","title":"widgets/Primitive/Button.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Button.js","updated":"","headings":["widgets/Primitive/Button.js","Classes","class Button extends UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"Get minimum height for each button size. Modern accessibility pattern: ensures touch targets meet WCAG 2.1 minimum 44x44px recommendation for better mobile usability. sm: 32px (slightly below minimum for compact layouts) md: 40px (near minimum, comfortable for most users) lg: 44px (meets accessibility minimum for large buttons) Activate button (trigger click action). Activation pattern for button interaction: Early return if disabled or loading to prevent accidental activation Creates synthetic click event with preventDefault support Dispatches event for parent components to handle Calls onClick callback if provided This pattern allows buttons to be activated programmatically (e.g., by keyboard Enter/Space) with the same behavior as mouse clicks. Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"f195fa5e84755e9b703455d11f4227cf41aa6ccd81dcbe77eefea5c22662ecc1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Chip.md::0000","path":"plauna/reference/widgets/Primitive/Chip.md","title":"widgets/Primitive/Chip.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Chip.js","updated":"","headings":["widgets/Primitive/Chip.js","Classes","class Chip extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Chip/Tag Removable tag widget for Plauna Provides chip functionality with multiple variants and states Classes Method Signature Summary Get variant specific styles with alpha transparent colors. Modern alpha transparent variant pattern: Uses RGBA colors with low opacity for backgrounds Stronger opacity for borders for definition Works across both light and dark themes without theme specific values Semantic colors: primary, secondary, success, warning, error Alpha transparency allows chips to work as overlays on any background while maintaining semantic meaning through color hue. Get background color based on variant and disabled state. Color cascade pattern: Disabled state: neutral tertiary background Enabled state: variant specific color from design tokens Falls back to default if variant is unknown Uses design tokens for theme consistency while allowing variant specific semantic coloring. Get text color based on variant and disabled state. Color cascade pattern: Disabled state: disabled text color Enabled state: variant specific color with contrast awareness Success/warning/error variants use inverse text for readability Ensures text remains readable against variant backgrounds by using appropriate contrast ratios. Get border color based on variant and disabled state. Color cascade pattern: Disabled state: subtle border for de emphasis Enabled state: variant specific border for definition Primary/success/warning/error use colored borders Borders provide definition even on similar colored backgrounds, helping chips stand out in dense UI layouts. Build the chip's flexible DOM structure. Flexible chip structure pattern: 1. Container: Base element with pill styling and event","contentHash":"7b7246139fd2a1fec62a525d6442754e0858d91d32a0b347e8247cbdd8a5f558"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Chip.md::0001","path":"plauna/reference/widgets/Primitive/Chip.md","title":"widgets/Primitive/Chip.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Chip.js","updated":"","headings":["widgets/Primitive/Chip.js","Classes","class Chip extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"stand out in dense UI layouts. Build the chip's flexible DOM structure. Flexible chip structure pattern: 1. Container: Base element with pill styling and event handlers 2. Avatar (optional): Small user avatar on the left 3. Icon (optional): Icon on the left if no avatar 4. Label: Text content in the center 5. Remove button (optional): Dismissible action on the right This structure supports various chip types: Simple text chips (label only) Avatar chips (avatar + label) Icon chips (icon + label) Removable chips (label + remove button) Combined chips (avatar + label + remove button) Create avatar sub component for chip. Sub component pattern: Creates UINode for avatar with appropriate styling Uses size based dimensions that scale with chip size Circular border radius for consistent profile appearance Object fit cover for proper image scaling Create icon sub component for chip. Sub component pattern: Creates UINode for icon with text content Inherits font size from parent for consistent scaling Flex layout for proper alignment with label Create remove button sub component for chip. Sub component pattern: Creates UINode for dismissible action button Uses × (multiplication sign) as universal close icon Sets up click handler to trigger onRemove callback Dispatches 'remove' event for parent component handling Update visual state based on hover and disabled conditions. Modern interaction pattern: Hover: subtle lift (translateY) and elevated shadow for tactile feedback Idle: maintains base shadow (var( shadow sm)) for modern surface appearance Disabled: reduced opacity and not allowed cursor The base shadow is preserved when not hovered to maintain the modern pill surface treatment across interaction states. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and","contentHash":"a6248c8b37a533ce8a28233ed226b490fe2a4c63fe584865449a6f07c9e20f66"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Chip.md::0002","path":"plauna/reference/widgets/Primitive/Chip.md","title":"widgets/Primitive/Chip.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Chip.js","updated":"","headings":["widgets/Primitive/Chip.js","Classes","class Chip extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"not hovered to maintain the modern pill surface treatment across interaction states. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"3a7a01e7609d9a7c064b98f1bff60682ca72fd837476a7c0d1d0404dea817455"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Modal.md::0000","path":"plauna/reference/widgets/Primitive/Modal.md","title":"widgets/Primitive/Modal.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Modal.js","updated":"","headings":["widgets/Primitive/Modal.js","Classes","class Modal extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Modal Overlay dialog widget for Plauna Provides modal dialogs with focus trapping, accessibility, and backdrop Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"6fa2ace1e3bd6a0e89f429c937cb8a6d72c5f5b3ec7784392784890752fd1d50"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Panel.md::0000","path":"plauna/reference/widgets/Primitive/Panel.md","title":"widgets/Primitive/Panel.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Panel.js","updated":"","headings":["widgets/Primitive/Panel.js","Classes","class Panel extends UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Panel Basic container widget for Plauna Provides a container for other UI elements with styling and layout options Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"941a0cd6870af3c82bd49703141372d6d6172f2f4ff767f54c170d730a5426b9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Progress.md::0000","path":"plauna/reference/widgets/Primitive/Progress.md","title":"widgets/Primitive/Progress.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Progress.js","updated":"","headings":["widgets/Primitive/Progress.js","Classes","class Progress extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Progress Task completion indicator widget for Plauna Provides linear and circular progress indicators with multiple states Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"1fb789b9c872b566f49f928f45bfd44455d6ddb5156f6567295c01d230fc9dc0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Skeleton.md::0000","path":"plauna/reference/widgets/Primitive/Skeleton.md","title":"widgets/Primitive/Skeleton.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Skeleton.js","updated":"","headings":["widgets/Primitive/Skeleton.js","Classes","class Skeleton extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Skeleton Content loading placeholder widget for Plauna Provides loading placeholders with realistic shapes and shimmer animation Classes Method Signature Summary Get shimmer animation styles for loading effect. Modern shimmer animation pattern: Static: Solid background color when animation is disabled Animated: Linear gradient moving across the background Background size 200% allows gradient to slide across Animation duration 1.5s for smooth, non distracting motion willChange hint for GPU acceleration The gradient moves from quaternary → secondary → quaternary colors, creating a light sweep effect that indicates content is loading. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"7bc56aa4deb2d18076cf8b105aaa8b0359a42729687b116008c3f323880effef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Text.md::0000","path":"plauna/reference/widgets/Primitive/Text.md","title":"widgets/Primitive/Text.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Text.js","updated":"","headings":["widgets/Primitive/Text.js","Classes","class Text extends UINode","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Text Basic text widget for Plauna Provides text rendering with styling and layout options Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"6f9d61a048e63ab1635e91178c14b9659691de6724f32c9c9e2ebbf301191f0d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/Primitive/Tooltip.md::0000","path":"plauna/reference/widgets/Primitive/Tooltip.md","title":"widgets/Primitive/Tooltip.js","description":"","kind":"reference","source":"plauna/widgets/Primitive/Tooltip.js","updated":"","headings":["widgets/Primitive/Tooltip.js","Classes","class Tooltip extends UINode","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Tooltip Contextual help widget for Plauna Provides positioning engine with arrow support and accessibility Classes Method Signature Summary <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"3642fbcc93137859fddbb9e521a2f36bba3cf15f35c358ac8a8a7a06cebaecfd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/WidgetConfig.md::0000","path":"plauna/reference/widgets/WidgetConfig.md","title":"widgets/WidgetConfig.js","description":"","kind":"reference","source":"plauna/widgets/WidgetConfig.js","updated":"","headings":["widgets/WidgetConfig.js","Classes","class UnsupportedWidgetConfigVersionError extends Error","Functions","prepareWidgetConfigImport(input)","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Widget Configuration System Manages widget configurations, presets, and user preferences Following the same pattern as the editor's theme system Classes Method Signature Summary Functions Constants — Singleton export for WidgetConfigManager. Ensures a single instance is used throughout the application: Consistent configuration state across all components Single storage persistence point Centralized event notification system <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"afd65fe0738c7f3e8051084b664694b71a886a1747a47fa1768f8fc878dc9ec9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/WidgetItem.md::0000","path":"plauna/reference/widgets/WidgetItem.md","title":"widgets/WidgetItem.js","description":"","kind":"reference","source":"plauna/widgets/WidgetItem.js","updated":"","headings":["widgets/WidgetItem.js","Classes","class MyWidget extends WidgetItem","class WidgetItem","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WidgetItem Base class for all Plauna widgets. Follows the same pattern as SpawnableItem from the editor: Static properties for metadata Static methods for configuration Registry based discovery Category based organization Classes Method Signature Summary WidgetItem Base class for all Plauna widgets. Follows the same pattern as SpawnableItem from the editor: Static properties for metadata Static methods for configuration Registry based discovery Category based organization Method Signature Summary Default widget options Widget theme tokens configuration Widget event handlers configuration Create widget instance Validate widget options Get widget metadata Check if widget supports a specific event Get widget documentation <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"4b61c3247bc584c40c58070854d3a7d5e6129d56c7c85c1e5e5ad32d5b1b4d43"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/WidgetRenderer.md::0000","path":"plauna/reference/widgets/WidgetRenderer.md","title":"widgets/WidgetRenderer.js","description":"","kind":"reference","source":"plauna/widgets/WidgetRenderer.js","updated":"","headings":["widgets/WidgetRenderer.js","Classes","class WidgetRenderer","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ WidgetRenderer UINode to DOM Converter ============================================================================ WidgetRenderer is the bridge between Plauna's retained UINode tree and the actual browser DOM. It converts UINode instances into DOM elements recursively. RENDERING PIPELINE: 1. render(node) Entry point, converts UINode tree to DOM tree 2. createDOMElement(node) Creates appropriate DOM element for UINode type 3. Applies styles, classes, IDs, text content, and attributes 4. Recursively renders children and appends to parent 5. Returns root DOM element ready for insertion into document MAPPING TABLES: nodeToDOM: Map<UINode, HTMLElement UINode → DOM element domToNode: Map<HTMLElement, UINode DOM element → UINode (reverse lookup) ELEMENT TYPE MAPPING: SVG elements: svg, circle, path, etc. → created with createElementNS Text nodes: type='text' → rendered as <span Form elements: button, input, textarea, select, label, form, img → native elements HTML elements: h1 h6, p, div, header, footer, nav, etc. → native elements Unknown types: fallback to <div SPECIAL HANDLING: Raw HTMLElements: If node is already an HTMLElement, return it directly Pre existing DOM: If node.element exists (created by widget), use it Back reference: Sets element. plaunaNode for reverse lookup (used by SmartContextMenu) STYLE APPLICATION: 1. node.style: Direct inline styles (highest priority) 2. node.computedStyle: Computed styles from layout engine 3. node.className: CSS class names 4. node.id: Element ID TEXT CONTENT: node.textContent: Plain text content node.innerHTML: HTML string content If node has children, text content","contentHash":"526c0199439ccb439b6ea709f74428ee55bc3bc5316d0fa3664ac9ae9fc3fbc8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/WidgetRenderer.md::0001","path":"plauna/reference/widgets/WidgetRenderer.md","title":"widgets/WidgetRenderer.js","description":"","kind":"reference","source":"plauna/widgets/WidgetRenderer.js","updated":"","headings":["widgets/WidgetRenderer.js","Classes","class WidgetRenderer","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"class names 4. node.id: Element ID TEXT CONTENT: node.textContent: Plain text content node.innerHTML: HTML string content If node has children, text content is ignored Classes ============================================================================ WidgetRenderer UINode to DOM Converter ============================================================================ WidgetRenderer is the bridge between Plauna's retained UINode tree and the actual browser DOM. It converts UINode instances into DOM elements recursively. RENDERING PIPELINE: 1. render(node) Entry point, converts UINode tree to DOM tree 2. createDOMElement(node) Creates appropriate DOM element for UINode type 3. Applies styles, classes, IDs, text content, and attributes 4. Recursively renders children and appends to parent 5. Returns root DOM element ready for insertion into document MAPPING TABLES: nodeToDOM: Map<UINode, HTMLElement UINode → DOM element domToNode: Map<HTMLElement, UINode DOM element → UINode (reverse lookup) ELEMENT TYPE MAPPING: SVG elements: svg, circle, path, etc. → created with createElementNS Text nodes: type='text' → rendered as <span Form elements: button, input, textarea, select, label, form, img → native elements HTML elements: h1 h6, p, div, header, footer, nav, etc. → native elements Unknown types: fallback to <div SPECIAL HANDLING: Raw HTMLElements: If node is already an HTMLElement, return it directly Pre existing DOM: If node.element exists (created by widget), use it Back reference: Sets element. plaunaNode for reverse lookup (used by SmartContextMenu) STYLE APPLICATION: 1. node.style: Direct inline styles (highest priority) 2. node.computedStyle: Computed styles from layout engine 3. node.className: CSS class names 4. node.id: Element ID TEXT CONTENT: node.textContent: Plain","contentHash":"0f39e673e2dbb3547fc6c8c7b1152daa79f12a40fce5f22c04be334b701d4da1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/WidgetRenderer.md::0002","path":"plauna/reference/widgets/WidgetRenderer.md","title":"widgets/WidgetRenderer.js","description":"","kind":"reference","source":"plauna/widgets/WidgetRenderer.js","updated":"","headings":["widgets/WidgetRenderer.js","Classes","class WidgetRenderer","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"2. node.computedStyle: Computed styles from layout engine 3. node.className: CSS class names 4. node.id: Element ID TEXT CONTENT: node.textContent: Plain text content node.innerHTML: HTML string content If node has children, text content is ignored Method Signature Summary Render a UINode widget tree to DOM Create DOM element from UINode Update existing DOM element from UINode Get DOM element for a node Unmount and clean up a rendered widget Clear all mappings Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the edi","contentHash":"84572f56f0c7fb418e9e01ccc3a287c44e5a687424c01a163e54f354de24ba37"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/WidgetStyleManager.md::0000","path":"plauna/reference/widgets/WidgetStyleManager.md","title":"widgets/WidgetStyleManager.js","description":"","kind":"reference","source":"plauna/widgets/WidgetStyleManager.js","updated":"","headings":["widgets/WidgetStyleManager.js","Classes","class WidgetStyleManager","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WidgetStyleManager Widget specific styling system Provides theme based styling utilities for widgets and UI components Classes WidgetStyleManager Theme aware widget styling system. Architecture pattern: Singleton pattern for consistent styling across the application Style caching for performance (memoization by widgetType:variant:theme) Theme integration with ThemeManager for dynamic theme switching Observer pattern for reactive style updates on theme changes Base token fallback for graceful degradation Features: Generates CSS styles based on theme tokens Supports multiple widget types (modal, tooltip, dropdown, etc.) Automatic cache invalidation on theme changes Token based styling for consistency Method Signature Summary Get widget styles based on type, variant, and current theme. Caching pattern for performance: Cache key format: widgetType:variant:theme Returns cached styles if available (O(1) lookup) Generates and caches new styles on cache miss Cache is cleared on theme changes to ensure consistency Generate widget styles based on theme tokens Generate modal component styles Generate tooltip component styles Generate dropdown component styles Generate card component styles Generate avatar component styles Generate breadcrumb component styles Generate pagination component styles Generate widget container styles Generate default fallback styles Get base tokens as fallback. Fallback pattern for graceful degradation: Provides default values when theme tokens are unavailable Ensures widgets render even without a theme Covers all token categories (colors, spacing, typography, etc.) Used as starting point, then merged with theme specific tokens Apply styles to element Create","contentHash":"153cc86d2c15931d3e885910840467a8330548bb81ce7b6304f0feb73a5937b1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/WidgetStyleManager.md::0001","path":"plauna/reference/widgets/WidgetStyleManager.md","title":"widgets/WidgetStyleManager.js","description":"","kind":"reference","source":"plauna/widgets/WidgetStyleManager.js","updated":"","headings":["widgets/WidgetStyleManager.js","Classes","class WidgetStyleManager","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"Covers all token categories (colors, spacing, typography, etc.) Used as starting point, then merged with theme specific tokens Apply styles to element Create styled element Handle theme changes. Reactive update pattern: Clears style cache to force regeneration with new theme Notifies all observers of theme change Observers can re render with new styles Error handling for observer failures Subscribe to style changes Clear style cache Constants — Singleton export for WidgetStyleManager. Ensures a single instance is used throughout the application: Consistent style caching across all components Single theme subscription point Centralized style generation <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"cd4552738134d3c2b29d7fc3dec11c6c1d63713a1e5e1b4e1c2f0dd807051d83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/index.md::0000","path":"plauna/reference/widgets/index.md","title":"widgets/index.js","description":"","kind":"reference","source":"plauna/widgets/index.js","updated":"","headings":["widgets/index.js","Functions","getWidget(id)","getWidgetsByCategory(category)","getAllCategories()","getAllWidgets()","searchWidgets(query)","getWidgetsByTag(tag)","getWidgetDependencies(widgetId)","validateWidgetDependencies(widgetId)","createWidget(widgetId, container, options = {})","createWidgetWithTheme(widgetId, container, theme, options = {})","getWidgetMetadata(widgetId)","getAllWidgetMetadata()","getWidgetDocumentation(widgetId)","getWidgetStats()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ PLAUNA WIDGET REGISTRY ============================================================================ This file serves as the central registry for all Plauna widgets. It imports widgets from their category folders and provides: 1. widgets array Flat array of all widget classes 2. widgetRegistry Map of widget.id → widget class for O(1) lookup 3. categories Map of category name → array of widgets in that category 4. Helper functions for querying and filtering widgets WIDGET CATEGORIES: Primitive: Basic building blocks (Button, Badge, Avatar, Chip, etc.) Input: Form input controls (Search, Color, Date, File, etc.) Form: Form elements (Checkbox, Radio, Switch, Select, etc.) Layout: Layout containers (Card, Grid, Panel, Divider, etc.) Navigation: Navigation components (Menu, Tabs, Sidebar, etc.) DataViews: Data presentation (List, Table, Tree, etc.) Feedback: User feedback (Alert, Toast, Spinner, etc.) WIDGET PATTERN: Each widget class MUST have: static id: Unique string identifier (e.g., 'button') static name: Display name (e.g., 'Button') static category: Category name (e.g., 'primitive') static icon: Emoji or icon for UI display static description: Short description of widget purpose static tags: Array of searchable tags static dependencies: Array of required widget IDs static getDefaultOptions(): Returns default configuration object static stories(): Returns named story configurations for showcase constructor(id, options): Initializes widget instance IMPORTANT: Do NOT use widget.create() it has require() that breaks in ESM Instead, instantiate directly: new WidgetClass(id, options) Use","contentHash":"9c7534a7a9369ee4b434ae5b85689226546daa7663d05f5e5798a0eb23c18e35"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/widgets/index.md::0001","path":"plauna/reference/widgets/index.md","title":"widgets/index.js","description":"","kind":"reference","source":"plauna/widgets/index.js","updated":"","headings":["widgets/index.js","Functions","getWidget(id)","getWidgetsByCategory(category)","getAllCategories()","getAllWidgets()","searchWidgets(query)","getWidgetsByTag(tag)","getWidgetDependencies(widgetId)","validateWidgetDependencies(widgetId)","createWidget(widgetId, container, options = {})","createWidgetWithTheme(widgetId, container, theme, options = {})","getWidgetMetadata(widgetId)","getAllWidgetMetadata()","getWidgetDocumentation(widgetId)","getWidgetStats()","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"widget instance IMPORTANT: Do NOT use widget.create() it has require() that breaks in ESM Instead, instantiate directly: new WidgetClass(id, options) Use widgetRegistry.get(id) to find widget class by ID Functions Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"20fb14c0538c03104427423e455338c426dd458a3da384226265f12b7059f9c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/Panel.md::0000","path":"plauna/reference/workspace/Panel.md","title":"workspace/Panel.js","description":"","kind":"reference","source":"plauna/workspace/Panel.js","updated":"","headings":["workspace/Panel.js","Classes","class Panel","class DOMPanel extends Panel","class GPUPanel extends Panel","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Panel.js — Base panel and two concrete flavours: DOMPanel — a positioned <div container for Plauna widgets / HTML content GPUPanel — owns a GPUTexture render target; blitted to canvas by WorkspaceCompositor Lifecycle: create → mount(container) → [resize / focus / show / hide] → destroy() Classes Panel Base class for workspace panels. Architecture pattern: Abstract base class for DOMPanel and GPUPanel Lifecycle: create → mount → [resize/focus/show/hide] → destroy Observer pattern for event emission (move, resize, visibility, focus, blur) Position/size constraints with min size enforcement Z index management for panel stacking Panel types: DOMPanel: Renders Plauna widgets in DOM elements GPUPanel: Renders to WebGPU textures, composited by WorkspaceCompositor Method Signature Summary Mount panel into container. Lifecycle hook called by Workspace.addPanel: Sets mounted flag to true Subclasses override to create DOM elements or GPU resources Called once per panel lifetime Destroy panel and release resources. Lifecycle cleanup: Sets mounted flag to false Clears all observers to prevent memory leaks Subclasses override to remove DOM elements or release GPU resources Update position (float layout). Update size — both DOM and GPU subclasses override to respond. Subscribe to panel events. Returns an unsubscribe function. Method Signature Summary Build the title bar icon element from , or null if none. Accepts an emoji/glyph (rendered as text) or an image/video URL (data:/blob:/http(s) with a known extension → <img /<video ). Kept self contained so Plauna has no dependency on the host shell. Update the title bar icon and rebuild the bar in place. Clamp (x,y) so a reachable strip of the","contentHash":"fd85ebaf6139dfe9f7f6a6cc7a7d6945e89a8ce9a9f2ccab40b2c4c51a1f5c72"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/Panel.md::0001","path":"plauna/reference/workspace/Panel.md","title":"workspace/Panel.js","description":"","kind":"reference","source":"plauna/workspace/Panel.js","updated":"","headings":["workspace/Panel.js","Classes","class Panel","class DOMPanel extends Panel","class GPUPanel extends Panel","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":3,"text":"self contained so Plauna has no dependency on the host shell. Update the title bar icon and rebuild the bar in place. Clamp (x,y) so a reachable strip of the titlebar always stays inside the work area — prevents dragging/restoring a window fully off screen. Re clamp into the visible work area (e.g. after a viewport/resolution change). Full viewport transparent overlay installed for the duration of a drag or resize. It sits above every window's content — crucially above guest <iframe s, which otherwise swallow mousemove/mouseup the moment the cursor crosses them, freezing the gesture and making the window \"jump\" to catch up. The shield keeps all pointer events flowing to the document listeners until the gesture ends. Build the 8 resize handles (corners + edges) into the panel root. Each carries a direction string (n/s/e/w combos) consumed by onResizeStart. Resize from one edge/corner. is any combination of n/s/e/w. Holding Shift resizes symmetrically about the window's center so all sides change equally (the center stays fixed); otherwise the opposite edge stays anchored. Method Signature Summary Called by WorkspaceCompositor to hand over the GPU device. Called by WorkspaceCompositor each frame. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full","contentHash":"101023d3af36393da58de79dd477338a0d833d78889933e25a95a3293a3dffbf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/Panel.md::0002","path":"plauna/reference/workspace/Panel.md","title":"workspace/Panel.js","description":"","kind":"reference","source":"plauna/workspace/Panel.js","updated":"","headings":["workspace/Panel.js","Classes","class Panel","class DOMPanel extends Panel","class GPUPanel extends Panel","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":2,"chunkCount":3,"text":"command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"76b79f24932381f3d9e7301af35975c8b2f3cb944f38ad03ebd10418d78baf22"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/PanelLayout.md::0000","path":"plauna/reference/workspace/PanelLayout.md","title":"workspace/PanelLayout.js","description":"","kind":"reference","source":"plauna/workspace/PanelLayout.js","updated":"","headings":["workspace/PanelLayout.js","Classes","class LayoutEngine","Constants","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PanelLayout.js — Layout engine for arranging panels in a workspace. Modes: fullscreen — one panel fills the entire workspace float — panels are free position windows (drag/resize) split — tmux/VS Code style binary split tree (horizontal vertical) tile — auto arranged fixed grid Classes LayoutEngine Panel layout orchestration. Layout modes: fullscreen: First visible panel fills entire workspace float: Panels are free position windows with drag/resize split: Binary tree layout (like tmux/VS Code) with recursive splits tile: Auto arranged grid layout Architecture: Mode based layout dispatch (apply() switches between modes) Split tree cached for efficiency (reused if panels unchanged) Z index management for float mode (focused panel on top) Observer pattern for mode change notifications Method Signature Summary Apply layout to a list of panels. Constants <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"69d0ab749b91c87dd7a928b37377ea5b4aaf2c0a96dc5112f6f1d0232dd1bf44"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/Workspace.md::0000","path":"plauna/reference/workspace/Workspace.md","title":"workspace/Workspace.js","description":"","kind":"reference","source":"plauna/workspace/Workspace.js","updated":"","headings":["workspace/Workspace.js","Classes","class Workspace","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Workspace.js — Virtual desktop for panels. Architecture: Virtual desktop that holds an ordered list of panels DOM layer that sits over WebGPU canvas LayoutEngine for panel arrangement (fullscreen/float/split/tile) WorkspaceManager handles switching between workspaces via CSS transitions Lifecycle: mount(container): Creates DOM layer and mounts panels activate(): Shows workspace (opacity 1, pointer events auto) deactivate(): Hides workspace (opacity 0, pointer events none) CSS transitions for smooth workspace switching Panel management: addPanel(): Adds panel to workspace and mounts it removePanel(): Removes panel from workspace Layout applied automatically on mount and resize Classes Workspace Virtual desktop container. Virtual desktop pattern: Each workspace is a separate DOM layer Workspaces are stacked with CSS z index Only one workspace active/visible at a time CSS opacity transitions for smooth switching Panels are mounted into workspace DOM layer Method Signature Summary Mount workspace into container element. Mounting pattern: Creates absolute positioned DOM layer Sets up CSS transitions for smooth switching Mounts all panels into the workspace layer Applies initial layout Sets up resize handler for layout re application CSS properties: opacity: 0 initially (activated via activate()) pointer events: none initially (enabled via activate()) willChange: opacity, transform for GPU acceleration Activate workspace (make visible and interactive). Activation pattern: Sets opacity to 1 for visibility Enables pointer events for interaction Applies translateZ(0) for GPU layer promotion Emits 'activated' event for observers Deactivate workspace (hide and disable interaction).","contentHash":"edbdfea3e7296ece121be5f4037fcf0e170edae6e9ff93eb07ff84ba1dc78815"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/Workspace.md::0001","path":"plauna/reference/workspace/Workspace.md","title":"workspace/Workspace.js","description":"","kind":"reference","source":"plauna/workspace/Workspace.js","updated":"","headings":["workspace/Workspace.js","Classes","class Workspace","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"events for interaction Applies translateZ(0) for GPU layer promotion Emits 'activated' event for observers Deactivate workspace (hide and disable interaction). Deactivation pattern: Sets opacity to 0 for invisibility Disables pointer events to prevent interaction Applies translateZ( 20px) for depth effect Emits 'deactivated' event for observers Add a panel to this workspace. Remove a panel from this workspace. Remove all panels. Get the currently focused panel (if any). Destroy this workspace and all its panels. <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"fdb7afe893278f038f390e78c88ece2db2a4bf65b4204cbd98c8bef06978e76a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/WorkspaceCompositor.md::0000","path":"plauna/reference/workspace/WorkspaceCompositor.md","title":"workspace/WorkspaceCompositor.js","description":"","kind":"reference","source":"plauna/workspace/WorkspaceCompositor.js","updated":"","headings":["workspace/WorkspaceCompositor.js","Classes","class WorkspaceCompositor","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WorkspaceCompositor.js — WebGPU blit pipeline for GPU panels. Architecture: Each GPUPanel owns a GPUTexture render target Compositor blits all visible GPU panels onto canvas swap chain each frame DOM panels are rendered directly by browser (compositor only handles WebGPU) Simple blit shader: just copies texture to canvas Pipeline components: Sampler: Linear filtering for panel textures Bind group layout: Single texture binding (binding 0) Shader: Simple vertex + fragment shader for texture copy Blend state: Alpha blending for layered panels Render loop: Called by WorkspaceManager each frame Iterates visible GPU panels in z order Creates bind group per panel Issues draw call (6 vertices for quad) Classes WorkspaceCompositor WebGPU texture compositor. Compositor pattern: Blits GPU panel textures to canvas swap chain Handles only WebGPU panels (DOM panels rendered by browser) Simple texture copy pipeline (no post processing) Alpha blending for layered panel support Method Signature Summary Initialize the blit pipeline. Pipeline initialization: Creates sampler with linear filtering Creates bind group layout for texture binding Creates shader module with vertex + fragment stages Creates render pipeline with blend state Shader details: Vertex: Full screen quad (6 vertices) Fragment: Texture load at (0,0) for full texture copy Blend: Standard alpha blending for layered panels Compose all GPU panels onto the canvas. Hand off GPU device to panels (they need it to allocate textures). <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the","contentHash":"f2156147d555d86ccf985ddcb8105fc35140d38f17b93f7f52d8911128bbf62d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/WorkspaceCompositor.md::0001","path":"plauna/reference/workspace/WorkspaceCompositor.md","title":"workspace/WorkspaceCompositor.js","description":"","kind":"reference","source":"plauna/workspace/WorkspaceCompositor.js","updated":"","headings":["workspace/WorkspaceCompositor.js","Classes","class WorkspaceCompositor","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"af9b46f03c448209edaf0dd6a2f48a97f54ad60527ae0297456d8bf08c5d4c1c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/WorkspaceManager.md::0000","path":"plauna/reference/workspace/WorkspaceManager.md","title":"workspace/WorkspaceManager.js","description":"","kind":"reference","source":"plauna/workspace/WorkspaceManager.js","updated":"","headings":["workspace/WorkspaceManager.js","Classes","class WorkspaceManager","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ============================================================================ WorkspaceManager Virtual Desktop Management ============================================================================ WorkspaceManager provides a virtual desktop system for Plauna, allowing multiple workspaces with different layouts and panel configurations. WORKSPACE CONCEPT: A Workspace is a virtual desktop that holds panels Each workspace can have its own layout mode (fullscreen, float, split, tile) Workspaces are DOM layers stacked over the canvas Only one workspace is active/visible at a time PANEL TYPES: DOMPanel: Wrapper for Plauna widgets (div based) GPUPanel: WebGPU texture panel (for GPU accelerated content) LAYOUT MODES: fullscreen: One panel fills the entire workspace float: Draggable, resizable windows with z order split: Recursive binary tree layout (like tmux/VS Code) tile: Auto arranged grid layout COMPOSITOR: WorkspaceCompositor blits GPU panel textures to canvas swap chain Iterates visible GPU panels in z order Required for GPU panel support SWITCHER: WorkspaceSwitcher provides HUD overlay (Ctrl+ : Open workspace switcher Arrow keys: Navigate switcher Enter: Switch to selected workspace Escape: Close switcher USAGE: const manager = new WorkspaceManager({ container: document.body, device: gpuDevice, canvas: canvasElement, format: 'bgra8unorm' }); await manager.initialize(); const ws = manager.createWorkspace({ name: 'Main', layout: 'float' }); manager.switchTo(ws.id); manager.createPanel('dom', { title: 'Panel 1' }); Classes Method Signature Summary Initialize the manager. Initialization pattern: Creates WorkspaceCompositor for GPU panel blitting Sets up keyboard shortcuts (Ctrl+","contentHash":"bf34d83787745dd956e9ad4b2d15376fb4b9eba1aed133323c0e96603b386b9f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/WorkspaceManager.md::0001","path":"plauna/reference/workspace/WorkspaceManager.md","title":"workspace/WorkspaceManager.js","description":"","kind":"reference","source":"plauna/workspace/WorkspaceManager.js","updated":"","headings":["workspace/WorkspaceManager.js","Classes","class WorkspaceManager","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":1,"chunkCount":2,"text":"Method Signature Summary Initialize the manager. Initialization pattern: Creates WorkspaceCompositor for GPU panel blitting Sets up keyboard shortcuts (Ctrl+ createWorkspace createWorkspace(options = {}) switchTo async switchTo(id) removeWorkspace removeWorkspace(id) createPanel createPanel(type, options = {}) list list() getCompositor getCompositor() destroy destroy() onWorkspaceActivated onWorkspaceActivated(ws) onWorkspaceDeactivated onWorkspaceDeactivated(ws) setupKeyboardShortcuts setupKeyboardShortcuts() openSwitcher openSwitcher() on on(event, fn) emit emit(event, data)` <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"d23f8ec827e393538f00b4eab2a558bb757682b8f48bd10b008f9e92664a879c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/WorkspaceSwitcher.md::0000","path":"plauna/reference/workspace/WorkspaceSwitcher.md","title":"workspace/WorkspaceSwitcher.js","description":"","kind":"reference","source":"plauna/workspace/WorkspaceSwitcher.js","updated":"","headings":["workspace/WorkspaceSwitcher.js","Classes","class WorkspaceSwitcher","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WorkspaceSwitcher.js — HUD overlay for workspace switching. Architecture: Triggered by Ctrl+ class WorkspaceSwitcher constructor constructor(options) show show() hide hide() buildContent buildContent() buildWorkspaceCard buildWorkspaceCard(ws, idx) setupKeyboardNav setupKeyboardNav() teardownKeyboardNav teardownKeyboardNav() refreshSelection refreshSelection()` <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"c9e5327f39da4477a9cdffb35148968682953d997a623c0c7dbcb2c8f948fbca"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"plauna/reference/workspace/index.md::0000","path":"plauna/reference/workspace/index.md","title":"workspace/index.js","description":"","kind":"reference","source":"plauna/workspace/index.js","updated":"","headings":["workspace/index.js","Re-exports","Notes & Examples","App & widget lifecycle","App & widget lifecycle"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: plauna/workspace — Virtual desktop / multi panel system for Plauna. Exported classes: Panel, DOMPanel, GPUPanel Workspace WorkspaceManager WorkspaceCompositor WorkspaceSwitcher LayoutEngine, LayoutMode Re exports , , , , , , , , <! HUMAN NOTES Notes & Examples App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. See also: Plauna Architecture · Plauna Overview App & widget lifecycle Plauna apps and widgets follow a mount → update → unmount lifecycle; services (storage, command bus, theming) are injected rather than imported, so the same widget runs in the editor, the OS shell, and standalone. Example: Widget with full lifecycle See also: Plauna Architecture · Plauna Overview","contentHash":"df72f42d916cbf0e8b875a91451182abd3d120afdedf280794db639be23af7e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-artifact-studio.md::0000","path":"webgpu-os/ai-echo-artifact-studio.md","title":"AI Echo Artifact Studio","description":"File-backed, versioned work products and safe generative previews for AI Echo.","kind":"guide","source":"MD/webgpu-os/ai-echo-artifact-studio.md","updated":"2026-08-01","headings":["AI Echo Artifact Studio","Interaction model","On-disk contract","Rendering trust tiers","Tool surface","Security invariants","Choosing artifacts, files, and Live Patch","Verification"],"chunkIndex":0,"chunkCount":3,"text":"File-backed, versioned work products and safe generative previews for AI Echo. AI Echo Artifact Studio AI Echo can turn substantial responses into durable work products that open beside the conversation. Documents, code, data, tables, charts, declarative interfaces, and static web presentations remain ordinary WebGPU OS files under . The Files app can browse them, and ordinary deletion sends the complete artifact project to the Recycle Bin. Artifact Studio is separate from AI Echo Live Patch. Artifacts are user owned content. Live Patch is the reviewed, reversible way to promote selected content into an existing OS or browser surface. Interaction model 1. AI Echo calls a declared tool when a substantial work product should remain editable or previewable. 2. The Artifact Workspace validates the exact project, blocks likely secrets, writes an immutable revision, and verifies every file by SHA 256 readback. 3. Only a small revision qualified artifact reference travels through the executor, conversation record, and Navi task. It binds the artifact ID, exact revision, and SHA 256 content hash, so an older message never silently resolves to a newer edit. Provider prose never becomes canonical state. 4. The response shows an artifact card. Opening it reveals Artifact Studio without leaving the task. 5. Direct edits create another immutable revision with compare and swap protection. Stale editors receive a revision conflict instead of silently overwriting newer work. 6. Copy, download, revision restore, Recycle Bin, and Open in Files remain direct user actions. The Studio refreshes through the storage event stream already shared by Files, other apps, tabs, and workers. It does not create a second synchronization or locking layer. On disk contract Each artifact uses a locally","contentHash":"e63fca6aef0f8e47e1390f07f18c1055ea3de0d03b734d32a52a8ac74d7828b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-artifact-studio.md::0001","path":"webgpu-os/ai-echo-artifact-studio.md","title":"AI Echo Artifact Studio","description":"File-backed, versioned work products and safe generative previews for AI Echo.","kind":"guide","source":"MD/webgpu-os/ai-echo-artifact-studio.md","updated":"2026-08-01","headings":["AI Echo Artifact Studio","Interaction model","On-disk contract","Rendering trust tiers","Tool surface","Security invariants","Choosing artifacts, files, and Live Patch","Verification"],"chunkIndex":1,"chunkCount":3,"text":"shared by Files, other apps, tabs, and workers. It does not create a second synchronization or locking layer. On disk contract Each artifact uses a locally generated identifier. Models choose content and metadata, but they never choose an OS path. The files directly inside are the current, manageable working projection shown by Files and Artifact Studio. Logical project paths such as , , and stay modular; they are not flattened or hidden under an opaque revision key. and are reserved OS owned metadata directories and cannot be supplied by a model as content. is the atomically advanced pointer. A revision records its parent revision, parent content hash, entrypoint, file descriptors, source provenance, and aggregate content hash. The manifest retains a bounded history of committed revisions. Artifact Workspace first writes and verifies the immutable revision, then publishes and verifies the direct working projection, and advances last. A crash may leave unreferenced derived files or a revision directory, but cannot replace the last committed pointer with partially written canonical content. Canonical reads continue to verify the immutable revision and its root level projection independently. This boundary follows the browser platform rather than pretending it offers a multi file transaction. The File System specification defines safe replacement for one file; the project therefore uses immutable revision files, per file compare and swap, readback hashes, and manifest last publication to detect an interrupted multi file projection. Artifact data is still origin storage, so the OS storage health and backup controls remain authoritative under the Storage Standard persistence model. Rendering trust tiers Tier Artifact kinds Execution boundary Native Document, code, data DOM","contentHash":"02a54cff7d2da65aa504abb4548a5b9c172b29d029f244d8b39fb131ad7361c9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-artifact-studio.md::0002","path":"webgpu-os/ai-echo-artifact-studio.md","title":"AI Echo Artifact Studio","description":"File-backed, versioned work products and safe generative previews for AI Echo.","kind":"guide","source":"MD/webgpu-os/ai-echo-artifact-studio.md","updated":"2026-08-01","headings":["AI Echo Artifact Studio","Interaction model","On-disk contract","Rendering trust tiers","Tool surface","Security invariants","Choosing artifacts, files, and Live Patch","Verification"],"chunkIndex":2,"chunkCount":3,"text":"remain authoritative under the Storage Standard persistence model. Rendering trust tiers Tier Artifact kinds Execution boundary Native Document, code, data DOM nodes built with ; no generated code runs. Declarative Table, chart, UI A strict JSON grammar selects known components; unknown fields, nodes, URLs, depth, or size are rejected. Opaque sandbox Static web presentation A unique origin iframe with no script, same origin, form, popup, download, navigation, or network authority and a restrictive content security policy. Declarative buttons emit typed artifact intents. They cannot call tools, storage, the network, Live Patch, or credentials directly. An intent must re enter AI Echo's planner, Faculty runtime","contentHash":"101c161619d06f3eb8b091c11abf9b975b6430d44d3680626650cec62aa140ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-clicks-and-clankers.md::0000","path":"webgpu-os/ai-echo-clicks-and-clankers.md","title":"AI Echo Clicks and Clankers","description":"Clean-room WebMCP discovery, verified semantic browser control, approval, receipts, and state synchronization for AI Echo.","kind":"guide","source":"MD/webgpu-os/ai-echo-clicks-and-clankers.md","updated":"2026-07-27","headings":["AI Echo Clicks and Clankers","Capability ladder","Discovery and invocation","Semantic control","React and stateful application synchronization","Security boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Clean-room WebMCP discovery, verified semantic browser control, approval, receipts, and state synchronization for AI Echo. AI Echo Clicks and Clankers AI Echo supports a hybrid browser workflow. A person can keep using the visible page, while the Navi can discover typed page actions or perform bounded semantic controls through the WebGPU OS browser extension. WebMCP is the preferred path. Semantic inspection and exact target actions are the fallback. The implementation does not use Playwright, copy browser agent source, evade bot controls, export browser credentials, or expose an unrestricted JavaScript, mouse, keyboard, or Chrome DevTools channel to a model. (Sources: and .) Capability ladder AI Echo chooses the narrowest available capability: 1. Discover a same origin page tool with . 2. Review its untrusted name, description, input schema, annotations, origin, and exact descriptor hash. 3. Invoke that exact descriptor with after one use approval. 4. Use semantic snapshot, extract, focus, hover, scroll, click, type, bounded key, wait, and verify controls when the page exposes no suitable tool. 5. Use Live Patch only for a declared, reversible interface edit. 6. Keep raw browser JavaScript behind explicit developer mode and exact hash approval. The extension feature detects the current API. It keeps the older navigator location as a temporary compatibility branch. WebMCP remains an experimental Community Group draft, so the browser specific execution method stays behind the extension adapter instead of becoming a durable Navi contract. (WebMCP draft, Chrome imperative API.) Discovery and invocation Page provided tools are untrusted resources. They do not enter the kernel tool registry and their annotations never grant authority. Discovery applies strict limits to tool","contentHash":"5651451ec88eb68cf2011c6974e0cb61a9b6b089078e1e72cb71df162aadbf38"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-clicks-and-clankers.md::0001","path":"webgpu-os/ai-echo-clicks-and-clankers.md","title":"AI Echo Clicks and Clankers","description":"Clean-room WebMCP discovery, verified semantic browser control, approval, receipts, and state synchronization for AI Echo.","kind":"guide","source":"MD/webgpu-os/ai-echo-clicks-and-clankers.md","updated":"2026-07-27","headings":["AI Echo Clicks and Clankers","Capability ladder","Discovery and invocation","Semantic control","React and stateful application synchronization","Security boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"tools are untrusted resources. They do not enter the kernel tool registry and their annotations never grant authority. Discovery applies strict limits to tool count, text, schemas, JSON depth, and bridge bytes. It excludes cross origin tools and removes credentials from projected URLs. Each descriptor hash covers the tool name, title, description, input schema, origin, and annotations. Invocation performs a fresh discovery and requires one exact matching name and descriptor hash. The extension binds the approval to the tab, frame, Chrome document ID, origin, descriptor, and canonical argument hash. A navigation, ambiguous tool, changed schema, changed metadata, expired grant, or different arguments fails before dispatch. (Sources: and .) The runtime redacts likely credentials and bounds returned JSON. AI Echo records the result as untrusted. A timeout after invocation begins becomes ; the task must inspect page or domain state before any retry. (Sources: and .) Semantic control The semantic fallback exposes no raw screen coordinates. It identifies visible targets by a selector or a bounded page derived fingerprint. Click and hover require a successful viewport hit test. Password fields, forms containing a password, and credential, private, restricted, or system secret surfaces remain blocked. Keyboard control accepts only navigation and control keys. Text entry uses the separate typed field operation. Every mutation returns target evidence, and AI Echo performs an independent readback before recording success. Synthetic hover and key events are marked ; the UI never represents them as hardware input. (Source: .) React and stateful application synchronization The application store remains canonical. The DOM and React tree are projections. A WebMCP tool should read the","contentHash":"cf991f6cb38d5b9d3d8d64ac9bcea0e6dad57fa43d14e291d0945e637947cce1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-clicks-and-clankers.md::0002","path":"webgpu-os/ai-echo-clicks-and-clankers.md","title":"AI Echo Clicks and Clankers","description":"Clean-room WebMCP discovery, verified semantic browser control, approval, receipts, and state synchronization for AI Echo.","kind":"guide","source":"MD/webgpu-os/ai-echo-clicks-and-clankers.md","updated":"2026-07-27","headings":["AI Echo Clicks and Clankers","Capability ladder","Discovery and invocation","Semantic control","React and stateful application synchronization","Security boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"React and stateful application synchronization The application store remains canonical. The DOM and React tree are projections. A WebMCP tool should read the latest store snapshot when execution begins, apply one domain command, wait for the commit, and return the committed revision. It should not close over render time state. Use a stable store facade so React Strict Mode can register, clean up, and register again without duplicating commands. Treat as an invalidation notice and run a complete discovery again. An operation ID makes a retry idempotent, while detects simultaneous human edits. (React , React .) Security boundary WebMCP discovery is same origin only. Tool descriptions, schemas, page text, and res","contentHash":"74556fa49103d09677dd6df43414b4d12201b81540e8dd2241c435b6c3237ecd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-live-patch.md::0000","path":"webgpu-os/ai-echo-live-patch.md","title":"AI Echo Live Patch","description":"Clean-room, declarative, reversible live editing for WebGPU OS apps, shell surfaces, AI Echo, and extension-backed browser tabs.","kind":"guide","source":"MD/webgpu-os/ai-echo-live-patch.md","updated":"2026-07-27","headings":["AI Echo Live Patch","Clean-room research boundary","Architecture","RealmForge-informed prepared activation","Surface identities","Allowed operations","Example patch","Markup, CSS, and event safety","AI Echo tools and approval behavior","Storage, history, and recovery","Causal replay and last-good remount","Browser extension boundary","Limits and non-goals","Verification","See also"],"chunkIndex":0,"chunkCount":3,"text":"Clean-room, declarative, reversible live editing for WebGPU OS apps, shell surfaces, AI Echo, and extension-backed browser tabs. AI Echo Live Patch AI Echo Live Patch lets the resident Navi inspect and update a mounted interface without rebuilding the OS. It edits registered WebGPU OS app surfaces, selected shell surfaces, AI Echo itself, and browser tabs exposed by the WebGPU OS browser extension. Live Patch is not a raw JavaScript or unrestricted DOM tool. AI Echo proposes a small versioned document. The kernel validates the document, creates a reversible preview, verifies the visible result, and writes a receipt before an OS surface change becomes durable. (Source: .) Clean room research boundary The public behavior of informed the product goal: a model can stream partial interface updates into named regions instead of regenerating the entire application. Its public README shows named insertion points and describes HTML, CSS, JavaScript, and SVG generation in a multi user chat environment. Its public protocol document describes a streaming server to browser update channel. (Public behavior, public protocol.) The upstream project also states that it is not hardened for production and is intended for local development. It warns that malicious prompts can create unbounded model loops and costs. (Upstream warning.) WebGPU OS uses an independent design: It does not use upstream source code, prompts, delimiters, WebSocket messages, storage records, or client runtime. It does not execute model generated JavaScript, event handlers, scripts, SVG, remote styles, or remote media. The kernel owns target selection, validation, preview, verification, persistence, rollback, and receipts. Existing Tool Firewall, capability, Faculty, and approval rules remain in force. A generated","contentHash":"08fc454d3fe69a22ea5e6b8e438a42a61fa248d949592c66a6d5232f2bb6c24a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-live-patch.md::0001","path":"webgpu-os/ai-echo-live-patch.md","title":"AI Echo Live Patch","description":"Clean-room, declarative, reversible live editing for WebGPU OS apps, shell surfaces, AI Echo, and extension-backed browser tabs.","kind":"guide","source":"MD/webgpu-os/ai-echo-live-patch.md","updated":"2026-07-27","headings":["AI Echo Live Patch","Clean-room research boundary","Architecture","RealmForge-informed prepared activation","Surface identities","Allowed operations","Example patch","Markup, CSS, and event safety","AI Echo tools and approval behavior","Storage, history, and recovery","Causal replay and last-good remount","Browser extension boundary","Limits and non-goals","Verification","See also"],"chunkIndex":1,"chunkCount":3,"text":"preview, verification, persistence, rollback, and receipts. Existing Tool Firewall, capability, Faculty, and approval rules remain in force. A generated interface cannot grant itself authority. Browser editing uses packaged extension functions. It never sends a provider credential or reusable extension authority into the edited page. The upstream repository is MIT licensed, but Live Patch remains a clean room WebGPU OS implementation under the repository's own source available license. (Upstream license.) Chrome's independent declarative partial update design likewise separates scoped declarative updates and sanitization from explicitly unsafe script capable paths. Live Patch adopts that security distinction without adopting Chrome's API or the upstream project runtime. (Chrome design.) Architecture The kernel service owns one contract. A complete edit uses this sequence: 1. lists registered targets. 2. returns a bounded, redacted structural snapshot. 3. validates a strict patch, records its pre edit inspection, and binds the exact normalized operations and target fingerprint into the patch hash and approval payload. 4. rechecks the approved fingerprint immediately before applying the patch with an in memory undo journal. 5. The service reads the surface back and verifies every operation. 6. The operator can inspect the visible preview. 7. compare and swaps the surface's causal head, then publishes the canonical patch and SHA 256 receipt as one compensated transaction. 8. reverts the active edit, advances the same causal head, and records a rollback receipt. RealmForge informed prepared activation Live Patch adopts RealmForge's offside prepare and last good activation pattern without importing RealmForge documents, scripts, or runtime authority. During , the kernel","contentHash":"2e6abdf9f69506fa6679f872bdae807c0d34582791b9f9c28689426efa009215"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/ai-echo-live-patch.md::0002","path":"webgpu-os/ai-echo-live-patch.md","title":"AI Echo Live Patch","description":"Clean-room, declarative, reversible live editing for WebGPU OS apps, shell surfaces, AI Echo, and extension-backed browser tabs.","kind":"guide","source":"MD/webgpu-os/ai-echo-live-patch.md","updated":"2026-07-27","headings":["AI Echo Live Patch","Clean-room research boundary","Architecture","RealmForge-informed prepared activation","Surface identities","Allowed operations","Example patch","Markup, CSS, and event safety","AI Echo tools and approval behavior","Storage, history, and recovery","Causal replay and last-good remount","Browser extension boundary","Limits and non-goals","Verification","See also"],"chunkIndex":2,"chunkCount":3,"text":"adopts RealmForge's offside prepare and last good activation pattern without importing RealmForge documents, scripts, or runtime authority. During , the kernel treats the normalized operation list as pure input and compiles a evidence record twice. The two canonical results must be byte identical. The candidate binds the operation hash and semantic diff to the exact surface generation, precondition, expected after state, parent causal head, next , and browser document epochs when the target is a browser tab. A remount, changed target, new head, or non deterministic compilation invalidates the candidate before activation. A successful preview produces a hashed proof. It binds the staged patch hash, candidate an","contentHash":"f873c4d6a40c2952d2869f6c381b6e04ce06257412eee25cdecac49c7724822a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/app-catalog.md::0000","path":"webgpu-os/app-catalog.md","title":"App Catalog","description":"Every built-in OS app grouped by purpose, with the authoritative registry and manifest fields (entry, surface, permissions, capabilities).","kind":"guide","source":"MD/webgpu-os/app-catalog.md","updated":"2026-07-15","headings":["App Catalog","System & shell","Developer & diagnostics","Files, storage & packages","Security & accounts","Network & browser","Productivity","Science & engineering","Media & creative","Games","Adding an app"],"chunkIndex":0,"chunkCount":3,"text":"Every built-in OS app grouped by purpose, with the authoritative registry and manifest fields (entry, surface, permissions, capabilities). App Catalog Every app shipped in the OS, grouped by purpose. The authoritative registry is ; each app's manifest ( ) declares its , , , and . There are 44 built in apps . Note: Permissions listed here are typical for the category. The manifest is authoritative — see Security & Trust Model for how they are gated. System & shell App id Purpose Quick Settings Fast toggles for common system settings. Command Palette Fuzzy command launcher for OS actions. Notification History Past notifications from the notification center. Control Panel Aggregated system configuration hub. Settings Primary OS settings app. Theme Manager Manage and switch shell themes ( ). System Monitor Live system/resource monitoring. Task Manager View and manage running app processes ( ). Service Manager Manage background OS services. Developer & diagnostics App id Purpose Dev Console In OS developer console / REPL. Terminal Command line terminal. Log Viewer Browse OS logs (e.g. ). Command Registry Inspect registered commands ( ). GPU Manager GPU device/VRAM inspection ( , ). Files, storage & packages App id Purpose Files File browser over the virtual filesystem. Storage Manager Manage OPFS/IndexedDB/mounts ( ). Package Manager Install/remove/update packages ( ). Package Studio Build, sign, and inspect packages ( ). Security & accounts App id Purpose Permissions Review/grant per app capabilities ( / ). User Management Manage user profiles/sessions ( , ). Network & browser App id Purpose Browser Web browser surface ( , browser bridge). Browser Bridge Manager Manage the native browser bridge ( ). Tab Manager Manage browser tabs. Request Rule Manager Manage network","contentHash":"600e17e6c29fa3db71bcb8cc6eb2b96d5bacf32ba96cc64791c054fb2395c2ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/app-catalog.md::0001","path":"webgpu-os/app-catalog.md","title":"App Catalog","description":"Every built-in OS app grouped by purpose, with the authoritative registry and manifest fields (entry, surface, permissions, capabilities).","kind":"guide","source":"MD/webgpu-os/app-catalog.md","updated":"2026-07-15","headings":["App Catalog","System & shell","Developer & diagnostics","Files, storage & packages","Security & accounts","Network & browser","Productivity","Science & engineering","Media & creative","Games","Adding an app"],"chunkIndex":1,"chunkCount":3,"text":"surface ( , browser bridge). Browser Bridge Manager Manage the native browser bridge ( ). Tab Manager Manage browser tabs. Request Rule Manager Manage network request rules / adblock ( , extension). Chatroom Networked chat (collab/net). Productivity App id Purpose Calendar Local first scheduling with reminders, recurring events, recovery, subscriptions, and ICS, CSV, Google Takeout, Apple, and Outlook interchange. Calculator Calculator. Notepad Plain text editor (writes via ). Clock Clock / timers. Calendar stores a versioned primary file and recovery copy, and uses browser storage as a fallback. Its background service runs reminders, daily agenda notifications, and public calendar refreshes even when the Calendar window is closed. Month, week, day, and agenda views support quick creation, detail inspection, drag to move, time grid resizing, recurring event exceptions, tasks, attendees, meeting links, attachments, travel time, duplication, copy and paste, undo, and a 30 day trash. The taskbar date flyout shows the next seven days and exposes quick event creation. Calendar previews imports before applying one undoable batch. It reads and writes RFC 5545 ICS data, including VEVENT, VTODO, RRULE, alarms, attendees, organizers, conferences, and attachments. This supports file exports from Google Calendar, Apple Calendar and iCloud, Microsoft Outlook, and other iCalendar applications. It also imports CSV and Google Takeout ZIP archives and can subscribe to public HTTP, HTTPS, or webcal feeds with conditional refresh and last known good recovery. Private Google, Microsoft, and Apple account synchronization is intentionally not presented as connected until the OS has provider issued OAuth or CalDAV credentials and a secure token vault flow; Calendar never asks users to paste","contentHash":"8adcdec95efe82cc358ec86f1d2694cc0a7d0a41dfd536c82d2e5e07f42ff9ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/app-catalog.md::0002","path":"webgpu-os/app-catalog.md","title":"App Catalog","description":"Every built-in OS app grouped by purpose, with the authoritative registry and manifest fields (entry, surface, permissions, capabilities).","kind":"guide","source":"MD/webgpu-os/app-catalog.md","updated":"2026-07-15","headings":["App Catalog","System & shell","Developer & diagnostics","Files, storage & packages","Security & accounts","Network & browser","Productivity","Science & engineering","Media & creative","Games","Adding an app"],"chunkIndex":2,"chunkCount":3,"text":"not presented as connected until the OS has provider issued OAuth or CalDAV credentials and a secure token vault flow; Calendar never asks users to paste provider passwords into ordinary settings. Calendar preferences are available from the app and the OS Control Panel. (Sources: , , , , , .) Science & engineering App id Purpose Smith Lab Guided 2D/3D Smith Chart learning, Touchstone measurement analysis, and deterministic impedance matching synthesis. Media & creative App id Purpose Paint Raster drawing app. Sound Audio playback/synthesis ( ). Particles GPU particle playground (engine ). Fractal GPU fractal explorer. Games App id Purpose Minesweeper Classic minesweeper. Snake Classic snake. Dimensional Pinball","contentHash":"400650895543d76b1c32b82d3b26b1056b8998f7c42732188aef9e7002f1e7c3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/appforge-contracts.md::0000","path":"webgpu-os/appforge-contracts.md","title":"AppForge Contracts","description":"Public contracts for the AppForge registry, tags, services, context graph, command objects, layouts, blueprints, package exports, timeline, lenses, builder, and starter packs.","kind":"guide","source":"MD/webgpu-os/appforge-contracts.md","updated":"2026-06-12","headings":["AppForge Contracts","Part Definition","Tags And Scoring","Registry","Service Container","Context Graph","Command Objects","Layout","Blueprints And AppFactory","Terminal Service","Package Exports","Timeline","Lenses","Starter Packs","Workspace Builder","AppForge Syscalls","Security Invariants"],"chunkIndex":0,"chunkCount":3,"text":"Public contracts for the AppForge registry, tags, services, context graph, command objects, layouts, blueprints, package exports, timeline, lenses, builder, and starter packs. AppForge Contracts AppForge is the deterministic assembly layer inside WebGPU OS. It does not replace the kernel, shell, package manager, permission model, or current apps. It registers reusable parts, scores them with tags, assembles blueprints into workspace layouts, records workspace history, and exposes builder tooling. Primary source files: Part Definition Every registered part is a plain object. The shared definition validator accepts these part types: Required fields: Field Meaning Dot or dash namespaced ID that starts with a lowercase letter. One of the supported AppForge part types. Human readable title. Semver like string. Defaults to when omitted. Common optional fields: Field Meaning Human readable summary. Namespaced semantic tags. Capabilities or outputs this part offers. Context, service, or capability dependencies. OS permissions this part needs. / Structured command or tool IO metadata. Numeric scoring tiebreaker. Plain object describing lifecycle hooks or module entry data. Provenance metadata such as app manifest, package export, or starter pack. Part specific metadata. Definitions are cloned on public reads. Callers should treat returned values as snapshots, not live registry objects. Tags And Scoring Tags use form. Supported namespaces are: Examples: uses deterministic scoring from tags, type, zone affinity, permissions, available context, co occurrence data, and risk filters. It returns scored candidates with explanation strings. Registry is the source of truth for reusable AppForge parts. Public API: Rules: Duplicate IDs are rejected unless the caller unregisters the prior","contentHash":"ad9071285504fa12f6d31612b89cb26910ddef9a88d239f4c8101aba2186a1d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/appforge-contracts.md::0001","path":"webgpu-os/appforge-contracts.md","title":"AppForge Contracts","description":"Public contracts for the AppForge registry, tags, services, context graph, command objects, layouts, blueprints, package exports, timeline, lenses, builder, and starter packs.","kind":"guide","source":"MD/webgpu-os/appforge-contracts.md","updated":"2026-06-12","headings":["AppForge Contracts","Part Definition","Tags And Scoring","Registry","Service Container","Context Graph","Command Objects","Layout","Blueprints And AppFactory","Terminal Service","Package Exports","Timeline","Lenses","Starter Packs","Workspace Builder","AppForge Syscalls","Security Invariants"],"chunkIndex":1,"chunkCount":3,"text":"strings. Registry is the source of truth for reusable AppForge parts. Public API: Rules: Duplicate IDs are rejected unless the caller unregisters the prior part first. and return clones. returns scored results and never mutates the registry. Existing app manifests remain in ; AppForge imports them as panel candidates with . Service Container exposes existing kernel owned services through stable IDs. Public API: Kernel provided AppForge services include: ID Backing owner Context Graph stores current OS context as directed nodes and edges. It is used for active file, selection, project, shell cwd, process, theme, panel, registry, layout, terminal, builder, and pack state. Public API: Invalidations are microtask batched. Tests that assert subscriber behavior should wait for a tick before reading callback results. Command Objects AppForge command objects promote local app actions into typed command contracts. Required shape: validates the command object, wraps it in the existing , and exposes public metadata without the handler function. Object pipelines intentionally require exact AppForge command object IDs. Layout owns serializable AppForge workspace state. It does not replace the Desktop window manager. Existing floating windows still launch through the current shell path. Required zones: Public API: is the DOM adapter that exposes AppForge zones while keeping the normal Desktop launch behavior intact. Blueprints And AppFactory A blueprint is a part that declares workspace slots. Slots can require exact parts, prefer optional parts, or select parts by wanted tags. Slot shape: resolves a blueprint and returns selections, permission summary, proposed workspace state, and layout diff without mutating live state. applies a valid preview to the live layout engine. Terminal","contentHash":"a2fc7e2698b6a96c32f2c2eb0b218a658f0735c847a07e0f17887308dcf7d01f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/appforge-contracts.md::0002","path":"webgpu-os/appforge-contracts.md","title":"AppForge Contracts","description":"Public contracts for the AppForge registry, tags, services, context graph, command objects, layouts, blueprints, package exports, timeline, lenses, builder, and starter packs.","kind":"guide","source":"MD/webgpu-os/appforge-contracts.md","updated":"2026-06-12","headings":["AppForge Contracts","Part Definition","Tags And Scoring","Registry","Service Container","Context Graph","Command Objects","Layout","Blueprints And AppFactory","Terminal Service","Package Exports","Timeline","Lenses","Starter Packs","Workspace Builder","AppForge Syscalls","Security Invariants"],"chunkIndex":2,"chunkCount":3,"text":"permission summary, proposed workspace state, and layout diff without mutating live state. applies a valid preview to the live layout engine. Terminal Service backs the Terminal panel with persistent sessions. Sessions store session ID, cwd, pid, command, stdout/stderr records, exit state, history, and timestamps. The Terminal app attaches to the service and runs commands through the guarded syscall object attached to the session, not through raw kernel syscalls. Exposed syscall namespace: . Package Exports manifests may include AppForge exports: Rules: Export groups imply the part type when is omitted. Exported part permissions must be declared in package or . Export IDs cannot replace parts owned b","contentHash":"976d2d2ead3542aacd68c9c2cfea6e576faf3f06f97c447c7a275ee7f2f99fef"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/architecture.md::0000","path":"webgpu-os/architecture.md","title":"WebGPU OS Architecture","description":"The kernel, shell, package system, storage, and drivers — and how an app moves from a folder or .prpkg to a running, capability-gated panel.","kind":"guide","source":"MD/webgpu-os/architecture.md","updated":"2026-06-12","headings":["WebGPU OS Architecture","Layout","Kernel (webgpu-os/kernel/)","AppForge (webgpu-os/appforge/)","Shell (webgpu-os/shell/)","Packages (webgpu-os/packages/)","Storage (webgpu-os/storage/)","Drivers (webgpu-os/drivers/)","The app entry contract","See also"],"chunkIndex":0,"chunkCount":2,"text":"The kernel, shell, package system, storage, and drivers — and how an app moves from a folder or .prpkg to a running, capability-gated panel. WebGPU OS Architecture The kernel, shell, package system, storage, and drivers — and how an app moves from a folder or to a running, capability gated panel. Layout Kernel ( ) The privileged core. Notable components: — brings up kernel services in order: → → → . — the syscall surface exposed to apps; wraps them with capability checks; reports coverage. This is a stable Tier 2 contract . / — discover apps/mods at runtime. / / — capability resolution, consent UI, persisted grants. / / — trust roots, pinning, provenance. — Tier 1 capability gate stand in. — full posture report. GPU mediation: , , (see GPU Device Sharing). Buses: , , . Surfaces/theme/sound: , , , , . Misc: , , , , , , . AppForge ( ) AppForge is a modular composition layer over the existing OS. It keeps , , , , , Desktop, and Plauna panels as the backing runtime, then adds folders for definitions, registry, tags, scoring, services, context graph, command objects, layout zones, blueprints, package exports, timeline, lenses, starter packs, and the visual workspace builder. See AppForge Contracts for the public API and security invariants. Shell ( ) The desktop UI, built on Plauna workspaces (every window is a Plauna panel): — the compositor/window manager; wraps an app's syscalls with , routes entries to the package loader. , , — shell chrome. , — dialogs + notifications. — host realm for packaged apps. , , — window sizing/state/icons. Packages ( ) The v2 system (encrypted ZIP container + cross verified public envelope): — install/remove/verify/rollback; the choke point chains integrity → trust → provenance → scan → policy → verdict. — loads installed apps from OPFS as a","contentHash":"4aefdfdde777bc9032c725eac52d4d9ca990cd9d9c9cb484cccefa3aab17faa7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/architecture.md::0001","path":"webgpu-os/architecture.md","title":"WebGPU OS Architecture","description":"The kernel, shell, package system, storage, and drivers — and how an app moves from a folder or .prpkg to a running, capability-gated panel.","kind":"guide","source":"MD/webgpu-os/architecture.md","updated":"2026-06-12","headings":["WebGPU OS Architecture","Layout","Kernel (webgpu-os/kernel/)","AppForge (webgpu-os/appforge/)","Shell (webgpu-os/shell/)","Packages (webgpu-os/packages/)","Storage (webgpu-os/storage/)","Drivers (webgpu-os/drivers/)","The app entry contract","See also"],"chunkIndex":1,"chunkCount":2,"text":"— install/remove/verify/rollback; the choke point chains integrity → trust → provenance → scan → policy → verdict. — loads installed apps from OPFS as a blob URL module graph (patch overlay aware). — build, sign, verify, scan, register. — differential updates with anti rollback + version cooldown. , , , , , — supporting tools. See Security & Trust Model for the trust pipeline. Storage ( ) Virtual filesystem over browser primitives: / (syscall facing), , , , , (per app isolation), (orchestration). See Data Flow. Drivers ( ) , , , , . The browser bridge ( ) and extension ( ) provide native browser integration and an adblock relay. The app entry contract Manifests declare , , , , , , and . The entry module default exports a class with (and optional ). Dev tree apps live at ; packaged apps embed a manifest and load via . (Source: .) See also Boot Sequence Security & Trust Model App Catalog WebGPU OS API Reference","contentHash":"55923775cc81abed6680c55019ab4411c27accbb1064e963f887efbc109a06b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/getting-started.md::0000","path":"webgpu-os/getting-started.md","title":"WebGPU OS Getting Started","description":"Boot the OS in a browser and build a minimal capability-gated app.","kind":"guide","source":"MD/webgpu-os/getting-started.md","updated":"2026-06-05","headings":["WebGPU OS Getting Started","Boot the OS","then browse to:","http://127.0.0.1:9001/webgpu-os/","Build a minimal app","Key rules","See also"],"chunkIndex":0,"chunkCount":1,"text":"Boot the OS in a browser and build a minimal capability-gated app. WebGPU OS Getting Started Boot the OS and build a minimal app. Assumes Install & Run is done. Boot the OS Or embed it (see Quickstart): Build a minimal app 1. Create the folder . 2. Add a manifest : 3. Add the entry module — default export a class with : 4. Register it — add to . 5. Reload the OS. The app appears in the Start Menu and is discovered by . Key rules Declare only the permissions you use; they are checked by . See Security & Trust Model. Treat GPU resources as reconstructable — handle the fan out. See GPU Device Sharing. For distribution, package the app as a v2 ( / ). See also Architecture — the app entry contract and package pipeline. App Catalog — existing apps to learn from. — / starters.","contentHash":"beda01cd6af5fb7cfca5d36417aca8888c4bb04ca9d0cc9e973f2fa6ead3192a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/index.md::0000","path":"webgpu-os/index.md","title":"WebGPU OS","description":"Section index for the WebGPU OS — GPU-first compositor, shell, kernel, and package system (overview, architecture, getting started, app catalog, API reference).","kind":"guide","source":"MD/webgpu-os/index.md","updated":"2026-06-12","headings":["WebGPU OS","In this section","Module map","Related concepts"],"chunkIndex":0,"chunkCount":1,"text":"Section index for the WebGPU OS — GPU-first compositor, shell, kernel, and package system (overview, architecture, getting started, app catalog, API reference). WebGPU OS GPU first compositor, shell, kernel, and package system that boots in a browser tab. Source: . In this section Overview — what it is, tier framing, subsystems. Architecture — kernel, shell, packages, storage, drivers, app contract. Realm Network — portable identity, content, resumable links, semantic replication, governance, discovery, V3 compatibility, and one shot deployment policy. Navi Architecture and Delivery — persistent identity, cognition, Faculties, causal memory, bounded autonomy, Manifestations, and recovery gates. AI Echo Live Patch — clean room declarative, reversible live editing for OS apps, shell surfaces, AI Echo, and extension backed browser tabs. AI Echo Artifact Studio — file backed, versioned work products with native, declarative, and opaque sandbox previews beside the conversation. AI Echo Clicks and Clankers — clean room WebMCP discovery, verified semantic browser control, exact approvals, receipts, and React state synchronization. AppForge Contracts — modular part registry, deterministic assembly, context graph, layout zones, package exports, timeline, lenses, starter packs, and builder contracts. Getting Started — boot the OS and build an app. App Catalog — all 35 built in apps. API Reference — per file symbols from , , , , , , (browse ). Module map Related concepts Boot Sequence GPU Device Sharing Security & Trust Model Data Flow","contentHash":"e0b99a909ba3d926600aaf4a117c222b694196f9ef44fad765e2d7cc9aa4a5df"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/navi-architecture-and-delivery.md::0000","path":"webgpu-os/navi-architecture-and-delivery.md","title":"Navi Architecture and Delivery Plan","description":"Canonical N1-N12 terminology, built-in runtime policy, security boundaries, migration rules, phased gates, and rollback procedures for the WebGPU OS Navi platform.","kind":"guide","source":"MD/webgpu-os/navi-architecture-and-delivery.md","updated":"2026-08-11","headings":["Navi Architecture and Delivery Plan","Status and progress rules","Planning status","Locked architecture","Canonical N1-N12 vocabulary","Versioned contract inventory","Information classification","Authority domains","Security tiers and browser limitations","Progressive recovery onboarding","Migration and rollback policy","Historical Phase 0 pre-migration procedure","Fresh-state boundary","Rollback procedure","Phased delivery checklist","Phase 0: contracts, boundaries, and rollback","Phase 1: Continuity Kernel, Covenant, and genesis lineage","Phase 2: remote-first Cognition Fabric and self-model","Phase 3: Faculty Runtime and Authority Membrane","Phase 8.5 modular Artifact project projection","Phase 4: Causal Memory Weave and Relationship Graph","Phase 5: autonomy, resources, and delegation","Phase 6: Manifestations and Construct handoff","Phase 7: recovery, reconciliation, network hooks, and alpha","Live deployment validation","AI Echo Intelligence Upgrade — Post-Alpha Phase 8","Phase 8.0: Contracts and Regression Baseline","Phase 8.1: Unified Task State, Steering, and Progress","Phase 8.2: Deterministic Sherlock Investigation Episode","Phase 8.3: Context, Resource Discovery, and Dynamic Skills","Phase 8.4: Outputs, Dossiers, and Explainability","Phase 8.5: Consolidation and Release","Phase 8.5 operator-controlled repair duration","Phase 8.5 provider-token accounting boundary","Phase 8.5 receipt-bound Artifact delivery","Phase 8.5 OS-owned saved-Artifact authoring lane","Phase 8.5 approved Smart-pool exhaustion","Phase 8.5 verified Artifact file activity","Phase 8.5 adaptive built-in signing and revision activation","Phase 8.5 trusted-default Faculty reconciliation and visible recovery","Phase 8.5 signed descriptor emission continuity","Phase 8.5 Artifact mutation settlement continuity","Phase 8.5 Codex-style incoming Artifact change visibility","Phase 8.5 durable approval popup recovery","Phase 8.5 semantic active steering and follow-up turns","Phase 8.5 operation-bound Artifact continuation","Phase 8.6 semantic Artifact formats and generated-code routing","Phase 8.7 isolated free-model steering lane","Phase 8.8 hard Artifact direct authoring and post-dispatch reconciliation","Phase 8.9 release-coherence crash containment","Phase 8.10 canonical Artifact revision references","Phase 8.11 receipt-warmed Artifact Studio loading","Phase 8.12 provider-native tool planning and endpoint restore containment","Phase 8.13 provider-native tool envelopes and mounted-workspace authority","Phase 8.14 workload-aware routing and per-Navi execution modes","Phase 8.15 Dodad compatibility naming and shared work-product workspace","Phase 8.16 human-first Navi and Presence studios","Phase 8.17 project-aware coding, verified Dodads, and reusable app surfaces","Phase 8.18 AI Echo remote cognition boundary","Phase 8.19 non-blocking AI Echo request preflight","Phase 8.20 exact Bypass prompt suppression","Phase 8.21 provider-native tool-only completion admission","Phase 8.22 unified Bypass at the signed Faculty boundary","Phase 8.23 live mounted-workspace resolution","Phase 8.24 final-answer tool-envelope containment","Phase 8.25 non-blocking auxiliary cognition","Phase 8.26 terminal next-turn ownership handoff","Phase 8.27 bounded mounted-workspace follow-up routing","Phase 8.28 fail-closed final-answer tool transport","Phase 8.29 bounded background cognition and current-turn journals","Phase 8.30 Dodad Forge recipes and mounted coding execution","Phase 8.31 Dodad Forge and mounted-project hardening","Phase 8.32 Surface Intelligence and visual coding context","Phase 8.33 Progressive Skills and specialist Dodad quality","Phase 8.34 AI Echo startup and background crash containment","Phase 8.35 bounded recovery indexes and permanent settlement isolation","Phase 8.36 clean-room semantic execution and mounted verification","Phase 8.37 AI Echo fast-open and correlated diagnostics","Phase 8.38 revision-bound mounted mutation and Cognition isolation","Runtime Smart Context and file commands","Phase 8 acceptance checklist","Verification procedures","Documentation validation","Phase 0 implementation validation","Mandatory rollback drill","See also"],"chunkIndex":0,"chunkCount":3,"text":"Canonical N1-N12 terminology, built-in runtime policy, security boundaries, migration rules, phased gates, and rollback procedures for the WebGPU OS Navi platform. Navi Architecture and Delivery Plan This page defines the target Navi architecture and the gated delivery plan for engineers working on WebGPU OS and AI Echo. It is a design contract. A checked design item means its decision is frozen. A checked implementation or exit gate item means its named verification evidence passes. Status and progress rules means the named design decision or verified implementation is complete. means the work has not passed its stated gate. A phase cannot start until the previous phase's exit gate passes. A failed gate returns to its originating phase. Do not defer it as later work. Every phase must leave the OS bootable and retain a tested rollback path. Navi is a built in WebGPU OS runtime and starts automatically. No user or app can enable or disable it, and no authority exists. Automatic startup never grants identity or action authority by itself. Operator bound services require a live, current, non revoked Passport and fail closed with exact health and error codes when that authority or another prerequisite is unavailable. Services that await the first primary Navi remain non authoritative in a typed dependency state, then rebind at the exact Continuity generation after genesis or primary selection. Planning status [x] Audit current AI Echo, AI Hub, VFS, tool firewall, autonomy, skills, memory, profiles, and recovery systems. [x] Audit PROJECT L.U.N.A. for reusable architectural concepts. [x] Choose a browser native implementation with no LUNA runtime dependency. [x] Choose remote first model routing. [x] Choose AI Echo as the Navi chat, setup, approval, and management console.","contentHash":"154c1aa3cae0e70445b10aa874f20302c334aef6cb8d013b038c2e8a57083ded"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/navi-architecture-and-delivery.md::0001","path":"webgpu-os/navi-architecture-and-delivery.md","title":"Navi Architecture and Delivery Plan","description":"Canonical N1-N12 terminology, built-in runtime policy, security boundaries, migration rules, phased gates, and rollback procedures for the WebGPU OS Navi platform.","kind":"guide","source":"MD/webgpu-os/navi-architecture-and-delivery.md","updated":"2026-08-11","headings":["Navi Architecture and Delivery Plan","Status and progress rules","Planning status","Locked architecture","Canonical N1-N12 vocabulary","Versioned contract inventory","Information classification","Authority domains","Security tiers and browser limitations","Progressive recovery onboarding","Migration and rollback policy","Historical Phase 0 pre-migration procedure","Fresh-state boundary","Rollback procedure","Phased delivery checklist","Phase 0: contracts, boundaries, and rollback","Phase 1: Continuity Kernel, Covenant, and genesis lineage","Phase 2: remote-first Cognition Fabric and self-model","Phase 3: Faculty Runtime and Authority Membrane","Phase 8.5 modular Artifact project projection","Phase 4: Causal Memory Weave and Relationship Graph","Phase 5: autonomy, resources, and delegation","Phase 6: Manifestations and Construct handoff","Phase 7: recovery, reconciliation, network hooks, and alpha","Live deployment validation","AI Echo Intelligence Upgrade — Post-Alpha Phase 8","Phase 8.0: Contracts and Regression Baseline","Phase 8.1: Unified Task State, Steering, and Progress","Phase 8.2: Deterministic Sherlock Investigation Episode","Phase 8.3: Context, Resource Discovery, and Dynamic Skills","Phase 8.4: Outputs, Dossiers, and Explainability","Phase 8.5: Consolidation and Release","Phase 8.5 operator-controlled repair duration","Phase 8.5 provider-token accounting boundary","Phase 8.5 receipt-bound Artifact delivery","Phase 8.5 OS-owned saved-Artifact authoring lane","Phase 8.5 approved Smart-pool exhaustion","Phase 8.5 verified Artifact file activity","Phase 8.5 adaptive built-in signing and revision activation","Phase 8.5 trusted-default Faculty reconciliation and visible recovery","Phase 8.5 signed descriptor emission continuity","Phase 8.5 Artifact mutation settlement continuity","Phase 8.5 Codex-style incoming Artifact change visibility","Phase 8.5 durable approval popup recovery","Phase 8.5 semantic active steering and follow-up turns","Phase 8.5 operation-bound Artifact continuation","Phase 8.6 semantic Artifact formats and generated-code routing","Phase 8.7 isolated free-model steering lane","Phase 8.8 hard Artifact direct authoring and post-dispatch reconciliation","Phase 8.9 release-coherence crash containment","Phase 8.10 canonical Artifact revision references","Phase 8.11 receipt-warmed Artifact Studio loading","Phase 8.12 provider-native tool planning and endpoint restore containment","Phase 8.13 provider-native tool envelopes and mounted-workspace authority","Phase 8.14 workload-aware routing and per-Navi execution modes","Phase 8.15 Dodad compatibility naming and shared work-product workspace","Phase 8.16 human-first Navi and Presence studios","Phase 8.17 project-aware coding, verified Dodads, and reusable app surfaces","Phase 8.18 AI Echo remote cognition boundary","Phase 8.19 non-blocking AI Echo request preflight","Phase 8.20 exact Bypass prompt suppression","Phase 8.21 provider-native tool-only completion admission","Phase 8.22 unified Bypass at the signed Faculty boundary","Phase 8.23 live mounted-workspace resolution","Phase 8.24 final-answer tool-envelope containment","Phase 8.25 non-blocking auxiliary cognition","Phase 8.26 terminal next-turn ownership handoff","Phase 8.27 bounded mounted-workspace follow-up routing","Phase 8.28 fail-closed final-answer tool transport","Phase 8.29 bounded background cognition and current-turn journals","Phase 8.30 Dodad Forge recipes and mounted coding execution","Phase 8.31 Dodad Forge and mounted-project hardening","Phase 8.32 Surface Intelligence and visual coding context","Phase 8.33 Progressive Skills and specialist Dodad quality","Phase 8.34 AI Echo startup and background crash containment","Phase 8.35 bounded recovery indexes and permanent settlement isolation","Phase 8.36 clean-room semantic execution and mounted verification","Phase 8.37 AI Echo fast-open and correlated diagnostics","Phase 8.38 revision-bound mounted mutation and Cognition isolation","Runtime Smart Context and file commands","Phase 8 acceptance checklist","Verification procedures","Documentation validation","Phase 0 implementation validation","Mandatory rollback drill","See also"],"chunkIndex":1,"chunkCount":3,"text":"with no LUNA runtime dependency. [x] Choose remote first model routing. [x] Choose AI Echo as the Navi chat, setup, approval, and management console. [x] Lock product, authority, privacy, recovery, branching, Faculty, and autonomy defaults. [x] Confirm the resource hardening baseline: 6 tests passing. [x] Begin implementation. [x] Complete the Phase 0 automated exit gate. [x] Complete the Phase 1 continuity exit gate. [x] Complete the Phase 2 cognition exit gate. [x] Complete the Phase 3 Faculty exit gate. [x] Complete the Phase 4 memory and relationship exit gate. [x] Complete the Phase 5 autonomy and resource exit gate. [x] Complete the Phase 6 Manifestation exit gate. [x] Complete the Phase 7 implementation and automated Navi Alpha exit gate. [x] Make Navi built in and automatic, retire the Settings release control, and remove user/app feature toggle authority. [x] Make AI Echo the automatic first primary Navi and add progressive, device protected recovery onboarding without blocking first use. [x] Complete the post alpha RealmForge workflow, evidence, transaction, and resumable task extension for AI Echo. [ ] Complete live deployment validation on the intended operator devices. The current AI Echo app provides conversations, editable Mind state, an inspectable operational journal, autonomous reflection scheduling, dynamic skills, managed files, and model routing. Editable identity, self model, Soul, personality, and history now bind to the selected in kernel owned, encrypted cognition records. The remaining app owned facilities are integration sources, not Navi identity authority. (Sources: , , , , and .) Locked architecture AI Echo is the primary chat, setup, approval, and management Manifestation for a Navi. AI Echo does not own the Navi's identity or","contentHash":"b467f993ac5bf4874be21e8645f7592439bd78321ba142153af1dfccc196da4b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/navi-architecture-and-delivery.md::0002","path":"webgpu-os/navi-architecture-and-delivery.md","title":"Navi Architecture and Delivery Plan","description":"Canonical N1-N12 terminology, built-in runtime policy, security boundaries, migration rules, phased gates, and rollback procedures for the WebGPU OS Navi platform.","kind":"guide","source":"MD/webgpu-os/navi-architecture-and-delivery.md","updated":"2026-08-11","headings":["Navi Architecture and Delivery Plan","Status and progress rules","Planning status","Locked architecture","Canonical N1-N12 vocabulary","Versioned contract inventory","Information classification","Authority domains","Security tiers and browser limitations","Progressive recovery onboarding","Migration and rollback policy","Historical Phase 0 pre-migration procedure","Fresh-state boundary","Rollback procedure","Phased delivery checklist","Phase 0: contracts, boundaries, and rollback","Phase 1: Continuity Kernel, Covenant, and genesis lineage","Phase 2: remote-first Cognition Fabric and self-model","Phase 3: Faculty Runtime and Authority Membrane","Phase 8.5 modular Artifact project projection","Phase 4: Causal Memory Weave and Relationship Graph","Phase 5: autonomy, resources, and delegation","Phase 6: Manifestations and Construct handoff","Phase 7: recovery, reconciliation, network hooks, and alpha","Live deployment validation","AI Echo Intelligence Upgrade — Post-Alpha Phase 8","Phase 8.0: Contracts and Regression Baseline","Phase 8.1: Unified Task State, Steering, and Progress","Phase 8.2: Deterministic Sherlock Investigation Episode","Phase 8.3: Context, Resource Discovery, and Dynamic Skills","Phase 8.4: Outputs, Dossiers, and Explainability","Phase 8.5: Consolidation and Release","Phase 8.5 operator-controlled repair duration","Phase 8.5 provider-token accounting boundary","Phase 8.5 receipt-bound Artifact delivery","Phase 8.5 OS-owned saved-Artifact authoring lane","Phase 8.5 approved Smart-pool exhaustion","Phase 8.5 verified Artifact file activity","Phase 8.5 adaptive built-in signing and revision activation","Phase 8.5 trusted-default Faculty reconciliation and visible recovery","Phase 8.5 signed descriptor emission continuity","Phase 8.5 Artifact mutation settlement continuity","Phase 8.5 Codex-style incoming Artifact change visibility","Phase 8.5 durable approval popup recovery","Phase 8.5 semantic active steering and follow-up turns","Phase 8.5 operation-bound Artifact continuation","Phase 8.6 semantic Artifact formats and generated-code routing","Phase 8.7 isolated free-model steering lane","Phase 8.8 hard Artifact direct authoring and post-dispatch reconciliation","Phase 8.9 release-coherence crash containment","Phase 8.10 canonical Artifact revision references","Phase 8.11 receipt-warmed Artifact Studio loading","Phase 8.12 provider-native tool planning and endpoint restore containment","Phase 8.13 provider-native tool envelopes and mounted-workspace authority","Phase 8.14 workload-aware routing and per-Navi execution modes","Phase 8.15 Dodad compatibility naming and shared work-product workspace","Phase 8.16 human-first Navi and Presence studios","Phase 8.17 project-aware coding, verified Dodads, and reusable app surfaces","Phase 8.18 AI Echo remote cognition boundary","Phase 8.19 non-blocking AI Echo request preflight","Phase 8.20 exact Bypass prompt suppression","Phase 8.21 provider-native tool-only completion admission","Phase 8.22 unified Bypass at the signed Faculty boundary","Phase 8.23 live mounted-workspace resolution","Phase 8.24 final-answer tool-envelope containment","Phase 8.25 non-blocking auxiliary cognition","Phase 8.26 terminal next-turn ownership handoff","Phase 8.27 bounded mounted-workspace follow-up routing","Phase 8.28 fail-closed final-answer tool transport","Phase 8.29 bounded background cognition and current-turn journals","Phase 8.30 Dodad Forge recipes and mounted coding execution","Phase 8.31 Dodad Forge and mounted-project hardening","Phase 8.32 Surface Intelligence and visual coding context","Phase 8.33 Progressive Skills and specialist Dodad quality","Phase 8.34 AI Echo startup and background crash containment","Phase 8.35 bounded recovery indexes and permanent settlement isolation","Phase 8.36 clean-room semantic execution and mounted verification","Phase 8.37 AI Echo fast-open and correlated diagnostics","Phase 8.38 revision-bound mounted mutation and Cognition isolation","Runtime Smart Context and file commands","Phase 8 acceptance checklist","Verification procedures","Documentation validation","Phase 0 implementation validation","Mandatory rollback drill","See also"],"chunkIndex":2,"chunkCount":3,"text":", and .) Locked architecture AI Echo is the primary chat, setup, approval, and management Manifestation for a Navi. AI Echo does not own the Navi's identity or cryptographic authority. The following boundaries are fixed: Kernel Navi services own identity, Covenant, memory, authority, lineage, Faculties, relationships, resource leases, and recovery. Remote models are the default cognition engines. A provider account, model, prompt, response, or conversation never becomes canonical Navi state. Local inference remains an optional privacy and availability route. Keys, credentials, tool enforcement, verification, storage, and deterministic operations remain local to the OS or its trusted extension. The OS sends only Co","contentHash":"1f6877e16f44b3ebe29863e72da6d62e5b1f1404e204ea8c1722bb6833d25863"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/overview.md::0000","path":"webgpu-os/overview.md","title":"WebGPU OS Overview","description":"The composition layer that turns the engine, Plauna, AGI, and editor into a GPU-first, desktop-like OS that boots in a single browser tab.","kind":"guide","source":"MD/webgpu-os/overview.md","updated":"2026-06-12","headings":["WebGPU OS Overview","What it is (and isn't)","Tier 1 today","Subsystems","Key documents (read-only sources)","Next steps"],"chunkIndex":0,"chunkCount":2,"text":"The composition layer that turns the engine, Plauna, AGI, and editor into a GPU-first, desktop-like OS that boots in a single browser tab. WebGPU OS Overview WebGPU OS ( ) is the composition layer that turns the engine, Plauna, AGI, and editor into a GPU first, desktop like OS that boots in a single browser tab . It provides a kernel, a shell, a signed package system, storage, drivers, and a runtime app catalog. Composition, not forking: the OS consumes , , , and as libraries. Fixes go upstream, not into the glue layer. (Source: §4.) What it is (and isn't) Is: a secure, GPU accelerated app platform with a web native developer experience — closer to OS.js + WebContainers + WASI than to a native game launcher. Isn't: a Steam class native game platform. Browser sandboxing rules out native overlays/input. (Source: §1.) Tier 1 today The current implementation is Tier 1 — browser resident . Tier 2 (Rust + Wasmtime/WASI host wrapping Dawn/wgpu) is a documented migration path; Tier 3 (native microkernel) is research only. See Architecture Overview for the tier framing and the stable Tier 2 migration contract. Subsystems Subsystem Path Purpose Kernel syscalls, scheduling, GPU mediation, trust, permissions, theming, surfaces, logging, FS Shell desktop, taskbar, start menu, windows, dialogs, notifications Packages build/sign/verify/install/update, capability map Storage virtual FS over OPFS/IndexedDB/cache/mounts, per app sandbox Drivers audio, crypto, net, profile, web surface Browser bridge / extension , native browser integration + adblock relay Apps 35 runtime discovered apps (see App Catalog) AppForge deterministic part registry, tags, services, context graph, commands, layouts, blueprints, packages, timeline, lenses, starter packs, and builder Key documents (read only","contentHash":"7a259569bf8a3b4d7c563e7933be660b0990e638bb3fb8b001f1276b0e480e95"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/overview.md::0001","path":"webgpu-os/overview.md","title":"WebGPU OS Overview","description":"The composition layer that turns the engine, Plauna, AGI, and editor into a GPU-first, desktop-like OS that boots in a single browser tab.","kind":"guide","source":"MD/webgpu-os/overview.md","updated":"2026-06-12","headings":["WebGPU OS Overview","What it is (and isn't)","Tier 1 today","Subsystems","Key documents (read-only sources)","Next steps"],"chunkIndex":1,"chunkCount":2,"text":"part registry, tags, services, context graph, commands, layouts, blueprints, packages, timeline, lenses, starter packs, and builder Key documents (read only sources) — asset inventory, tiers, folder layout, security model. — phased delivery plan. — source research. — , , , . AppForge Contracts — modular public contracts layered over the current kernel, package, permission, app, and Plauna systems. Next steps Architecture — kernel, shell, packages, storage. AppForge Contracts — deterministic registry, assembly, context, layout, package export, timeline, lens, pack, and builder contracts. Getting Started — boot and build an app. App Catalog — every shipped app. WebGPU OS API Reference — generated from , , , , .","contentHash":"8744a6c567da3f5abd4b9778ec9c8a642a817eb515e2e2d24f8b2a57260689f6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-realms-studio.md::0000","path":"webgpu-os/particle-realms-studio.md","title":"Particle Realms Studio","description":"Current workspaces, project schema, native GPU path, evidence boundaries, persistence, and recovery behavior in Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-realms-studio.md","updated":"2026-07-15","headings":["Particle Realms Studio","Studio workspaces","Recipe-backed demo catalog","Versioned Studio projects","Project API example","Typed recipe graph","GPU runtime paths","Bounded views and measured evidence","Legacy Twin compatibility boundary","Causal and durable persistence","Current limitations","See also"],"chunkIndex":0,"chunkCount":3,"text":"Current workspaces, project schema, native GPU path, evidence boundaries, persistence, and recovery behavior in Particle Realms Studio. Particle Realms Studio Particle Realms Studio is the WebGPU OS runtime for running, tuning, validating, and inspecting recipe built particle simulations. The portable project and typed recipe formats are shared authoring contracts: Paint Studio owns brush driven construction, while the developing RealmForge owns the reusable node/part builder. Particle Realms consumes those recipes and forms its demos through the same project path. The interface does not treat a visual preview as calibrated or scientifically validated output. Studio workspaces The shell exposes six keyboard accessible workspaces. Arrow keys move among workspace tabs, status updates use an ARIA live region, and the tuning drawer opens only from the explicit Tuning action or keyboard shortcut. (Source: ) Workspace Current behavior Truth boundary Discover Searches and filters 40 recipe backed demos with distinct animated previews, tracks favorites and recent demos, and provides Run Demo, Build from Recipe, and Inspect Recipe Graph actions. Every demo creates a normal project and typed recipe graph through the same public authoring path. Create Provides the current compatibility scene workbench and bounded top, density, velocity, and history projections from one native sample. New brush based construction belongs in Paint Studio. Secondary views are Canvas 2D projections of one bounded readback, not independent solver runs or validated engineering fields. Recipe Builds the portable typed graph visually: add/remove parts, connect compatible sockets, drag nodes, tune parameters, inspect diagnostics, and view a compact measured preview. RealmForge remains the intended reusable","contentHash":"72b366a2ecbcd079f11bd8f4369445785b064c6508a973ecbea95c37289ca502"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-realms-studio.md::0001","path":"webgpu-os/particle-realms-studio.md","title":"Particle Realms Studio","description":"Current workspaces, project schema, native GPU path, evidence boundaries, persistence, and recovery behavior in Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-realms-studio.md","updated":"2026-07-15","headings":["Particle Realms Studio","Studio workspaces","Recipe-backed demo catalog","Versioned Studio projects","Project API example","Typed recipe graph","GPU runtime paths","Bounded views and measured evidence","Legacy Twin compatibility boundary","Causal and durable persistence","Current limitations","See also"],"chunkIndex":1,"chunkCount":3,"text":"connect compatible sockets, drag nodes, tune parameters, inspect diagnostics, and view a compact measured preview. RealmForge remains the intended reusable cross product node/part authoring owner as it matures. The embedded preview is a bounded projection of native readback, not a second solver. Only documented ParticleApp bindings execute; unsupported node families remain authored plan intent. Simulate Hosts the live canvas, playback, camera, interaction, an explicit tuning drawer, and an automatic particle population targeting 60 FPS. The reported backend identifies the active native, custom WGSL, or recovery path. Population is bounded only by the active runtime/device safety contract, not a user configurable cap. Analyze Displays accepted measured sensor and runtime series and exports them as CSV or JSON with provenance. Missing measurements and stage attribution remain absent. The Studio does not synthesize them. Compare Captures explicit settings snapshots and compares compatible measured and imported external series. A settings snapshot is not a second simulation. External data does not automatically validate the preview. Create, Recipe, Analyze, and Compare are coordinated by . It edits versioned sidecars and displays supplied runtime measurements, but it does not step a solver or invent sensor values. Legacy Artist and Twin sidecar fields remain readable in project v2 so older documents round trip without data loss, but they are not current workspaces. (Source: ) Recipe backed demo catalog The catalog contains 40 stable demos across Cosmic, Fields, Matter, Life, and Events. Running a demo creates a fresh project with a canonical typed recipe; building from it creates an editable remix through the same project factory. Every source preset uses one of two","contentHash":"0f762e7576707e055d5951deff704fc0218e3431fa250e0ab238e585f3982c49"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-realms-studio.md::0002","path":"webgpu-os/particle-realms-studio.md","title":"Particle Realms Studio","description":"Current workspaces, project schema, native GPU path, evidence boundaries, persistence, and recovery behavior in Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-realms-studio.md","updated":"2026-07-15","headings":["Particle Realms Studio","Studio workspaces","Recipe-backed demo catalog","Versioned Studio projects","Project API example","Typed recipe graph","GPU runtime paths","Bounded views and measured evidence","Legacy Twin compatibility boundary","Causal and durable persistence","Current limitations","See also"],"chunkIndex":2,"chunkCount":3,"text":"a fresh project with a canonical typed recipe; building from it creates an editable remix through the same project factory. Every source preset uses one of two classifications: or . Each record also declares tags, difficulty, fidelity, macro controls, known limitations, and native migration metadata. (Source: ) Category Presets Cosmic Spiral Galaxy, Orbital Clusters, Supernova Shell, Black Hole Accretion, Comet Storm, Planetary Rings, Pulsar Jets, Globular Star Cluster Fields Quantum Vortex, Curl Noise Nebula, Magnetosphere, Aurora Curtains, Tornado Field, Lightning Cage, Solar Wind Stream, Gravity Lens, Magnetic Reconnection, Vector Weave Matter Thermal Fountain, Reaction Chamber, Cohesive Fluid, Molecular Latti","contentHash":"6abb8365201b7ef79747b8bfe62115393c0468c56c16e850203fe251434e8731"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-recipe-schema.md::0000","path":"webgpu-os/particle-recipe-schema.md","title":"Particle Recipe Schema","description":"Canonical recipe graph, execution plan, runtime bindings, validation, and migration contracts.","kind":"guide","source":"MD/webgpu-os/particle-recipe-schema.md","updated":"2026-07-13","headings":["Particle Recipe Schema","Related schema family","Module boundary","Graph document","Validation and compilation","Change impact","Current runtime bindings","Direct-control synchronization","Editing and migration","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Canonical recipe graph, execution plan, runtime bindings, validation, and migration contracts. Particle Recipe Schema Particle recipes use the strict JSON schema version 1. The graph is an authored, typed description. Compilation produces a deterministic version 1; the plan is not itself a general purpose runtime. (Source: ) This page is for app developers and preset authors who create, inspect, or integrate current recipe documents. Related schema family The current repository uses a family of bounded documents rather than the design pack's proposed monolithic file: Document Current schema/version Persisted project aggregate , version 2 Immutable built in preset , version 1 Recipe graph , version 1 Compiled plan description , version 1 Scene sidecar , version 1 View sidecar , version 1 Artist sidecar , version 1 Compare sidecar , version 1 Sensor definition/sample / Twin project configuration , version 1 External study , version 1 (Sources: , , , , , ) Project v2 is the save/load envelope. Its exact top level fields are , , , , , , , , , , , , , , , , , and . Unknown v2 fields fail validation. Runtime settings are limited to the canonical mode, palette preset, interaction, count, force, size, exposure, pause, camera, trails, bloom, orbit, brush, gravity, drag, turbulence, cohesion, temperature, reaction, charge, and seed keys declared by . (Source: ) Module boundary owns cycle free preset construction, setting normalization, seed normalization, and deterministic project hashing. may consume those primitives but never imports the project aggregate. then composes both layers into the strict project v2 envelope. This dependency direction is required by the classic release bundler, whose eager named import snapshots cannot emulate ES module live bindings across a cycle.","contentHash":"5e699673684a8cbaa02f4d9700c1841776f92aa3226a3dcc36e14e770e658028"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-recipe-schema.md::0001","path":"webgpu-os/particle-recipe-schema.md","title":"Particle Recipe Schema","description":"Canonical recipe graph, execution plan, runtime bindings, validation, and migration contracts.","kind":"guide","source":"MD/webgpu-os/particle-recipe-schema.md","updated":"2026-07-13","headings":["Particle Recipe Schema","Related schema family","Module boundary","Graph document","Validation and compilation","Change impact","Current runtime bindings","Direct-control synchronization","Editing and migration","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"This dependency direction is required by the classic release bundler, whose eager named import snapshots cannot emulate ES module live bindings across a cycle. Project/graph sidecar helpers are exported by : , , , and . Callers that previously imported these four helpers from must update only the module path; their document contracts are unchanged. (Sources: , ) Graph document The normalized document contains schema and version identifiers, graph identity and revision, metadata and provenance, a seed, nodes, edges, and extensions. Node and edge IDs are stable and serialization is canonical even when input arrays arrive in a different order. A graph is limited to 2 MiB, 512 nodes, and 2,048 edges. Unknown graph, node, port, and edge fields are rejected by strict validation. (Source: ) The supported node families are: Project/Metadata, World/Units, Domain/Coordinates, Geometry, and Discretization. Boundary, Material, Substance, Emitter, Initial Condition, Field, Force, Solver, Coupling, Constraint, and Physics Body. Sensor, Reduction, Visualizer, Camera, View Layout, Timeline, Audio Input, Audio Graph/Patch, Telemetry Input, Data Transform, and Alert/Rule. External Study and Export/Output. The type system includes , , , , , , , , , , , , , , , , , , , , , , , , , , and . (Source: ) Validation and compilation Validation checks the schema and version, identifiers, limits, registered node types, port names, edge direction and type compatibility, input cardinality, required inputs, cycles, and declared subsystem availability. Compilation only runs for a valid graph and produces a deterministic topological step list, required subsystem list, output bindings, source graph snapshot, graph hash, signature, and aggregate change impact. The plan validator can independently confirm","contentHash":"32a3161d645457a369f7272e54b6d6d0f8f087a10e6f1f18fcd1f38d056e1bac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-recipe-schema.md::0002","path":"webgpu-os/particle-recipe-schema.md","title":"Particle Recipe Schema","description":"Canonical recipe graph, execution plan, runtime bindings, validation, and migration contracts.","kind":"guide","source":"MD/webgpu-os/particle-recipe-schema.md","updated":"2026-07-13","headings":["Particle Recipe Schema","Related schema family","Module boundary","Graph document","Validation and compilation","Change impact","Current runtime bindings","Direct-control synchronization","Editing and migration","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"subsystem list, output bindings, source graph snapshot, graph hash, signature, and aggregate change impact. The plan validator can independently confirm that output against its source graph. (Source: ) If a current graph is invalid, the compiler may return a separately validated previous plan marked stale. An invalid previous plan is ignored. does not apply invalid authored settings to the running simulation. (Sources: , ) Change impact Every node declares one of these impacts, ordered from least to most invasive: Impact Runtime meaning No runtime mutation is required. The change is retained as authored metadata. Mapped live settings may be updated without rebuilding resources. Size dependent resources may","contentHash":"ab822df1eccd66546a8c46c7d48f15b6028db531b368de733cb1bd173d68f7ed"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-architecture.md::0000","path":"webgpu-os/particle-studio-architecture.md","title":"Particle Studio Architecture","description":"Runtime, authoring, evidence, persistence, and recovery architecture for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-architecture.md","updated":"2026-07-14","headings":["Particle Studio Architecture","Dynamic population controller","Runtime layers","Canonical project state","Recipe-to-runtime seam","Visual Recipe Builder state boundary","GPU and recovery paths","Evidence architecture","Persistence and concurrency","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Runtime, authoring, evidence, persistence, and recovery architecture for Particle Realms Studio. Particle Studio Architecture Particle Realms Studio is a WebGPU OS application, not a separate native desktop editor. owns its lifecycle and composes the Studio shell, versioned project, GPU runtime, evidence stores, and OS persistence services. The current product exposes Discover, Create, Recipe, Simulate, Analyze, and Compare. Simulate is the default/fallback workspace and keeps its tuning drawer closed until explicitly requested. (Sources: , ) Authoring ownership is deliberately outside the runtime app. Paint Studio owns brush driven simulation construction, and RealmForge is the developing home of the reusable node/part recipe builder. Particle Realms retains portable recipe inspection and safe parameter tuning so one document can be run, measured, compared, and promoted into a built in demo without a private second format. This page is for app and engine developers who need the current ownership, data flow, and integration boundaries. Dynamic population controller targets 60 FPS using a settled mean of measured RAF cadence. Sustained pressure reduces particle count multiplicatively; sustained headroom grows it conservatively. A deadband prevents oscillation, a cooldown accounts for GPU reallocation cost, and workgroup aligned quantization keeps dispatch sizes stable. Decisions stop at the active device/runtime safety maximum. That maximum is not exposed as a preference or user cap. applies decisions only while Simulate is visible, running, and GPU backed. Each accepted change updates the canonical count binding, reports the automatic population, and performs one resource reallocation. Paused, hidden, authoring, fallback, and warm up samples cannot change population.","contentHash":"365833342f37a331270642548b1aff0a560f4e30161cbc1fe383eecee789a157"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-architecture.md::0001","path":"webgpu-os/particle-studio-architecture.md","title":"Particle Studio Architecture","description":"Runtime, authoring, evidence, persistence, and recovery architecture for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-architecture.md","updated":"2026-07-14","headings":["Particle Studio Architecture","Dynamic population controller","Runtime layers","Canonical project state","Recipe-to-runtime seam","Visual Recipe Builder state boundary","GPU and recovery paths","Evidence architecture","Persistence and concurrency","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"reports the automatic population, and performs one resource reallocation. Paused, hidden, authoring, fallback, and warm up samples cannot change population. (Sources: , ) Runtime layers Text equivalent: the factory registers the app. creates the shell, selects a runtime, applies validated projects, advances the native or custom simulation, records measured runtime metrics, and coordinates save and recovery. The advanced controller edits project sidecars and renders evidence; it does not step a solver or open a live transport. (Sources: , , ) Canonical project state The persisted aggregate is version 2. It contains project identity and settings plus these versioned sidecars: Sidecar Responsibility Scene objects, view layout, comparison state, and compatibility only legacy artist data. Typed authored graph with stable IDs, ports, edges, and parameters. Provenance aware definitions for accepted measurements. Compatibility only disconnected safe data retained for lossless legacy project round trips. Bounded normalized CSV or JSON reference studies. Authored automatic/profile/target frame time intent. Project validation is strict, serialization is deterministic, and the complete document is capped at 32 MiB. Runtime samples, credentials, live connector state, and transient memory pressure are not canonical project truth. (Source: ) The project dependency graph is deliberately acyclic: . The core layer owns settings, seeds, hashing, and immutable built in presets; the aggregate layer owns project/graph sidecar composition. This ordering preserves the same public project behavior in raw ES modules and the eager classic release bundle. (Sources: , ) Recipe to runtime seam validates and compiles a deterministic execution plan description. is the current execution seam. It","contentHash":"db719a76f1082abe10de06e103a700a2c86c6615e2d20a5024359b187e8c3739"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-architecture.md::0002","path":"webgpu-os/particle-studio-architecture.md","title":"Particle Studio Architecture","description":"Runtime, authoring, evidence, persistence, and recovery architecture for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-architecture.md","updated":"2026-07-14","headings":["Particle Studio Architecture","Dynamic population controller","Runtime layers","Canonical project state","Recipe-to-runtime seam","Visual Recipe Builder state boundary","GPU and recovery paths","Evidence architecture","Persistence and concurrency","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"release bundle. (Sources: , ) Recipe to runtime seam validates and compiles a deterministic execution plan description. is the current execution seam. It applies the graph seed and the mapped count, force, temperature, point size, exposure, camera distance, solver mode, fixed step, and substep values to . Direct Quick and Standard control changes synchronize those named default graph nodes while preserving custom topology, IDs, provenance, and unsupported authored nodes. (Sources: , , ) An invalid graph does not replace the live project or settings. The graph compiler and Recipe workspace can report authored diagnostics, while retains the last validated runtime configuration. Unsupported solver types and node","contentHash":"f0153f1c942020ae635664840bfc43199581c7ec9f2747565da815b0d812de7c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-external-studies.md::0000","path":"webgpu-os/particle-studio-external-studies.md","title":"Particle Studio External Studies","description":"Import, provenance, comparison, and interpretation contracts for external Particle Studio data.","kind":"guide","source":"MD/webgpu-os/particle-studio-external-studies.md","updated":"2026-07-13","headings":["Particle Studio External Studies","Schema and limits","CSV format","JSON format","Provenance and validation levels","Import workflow","Comparison semantics","Security and interpretation","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Import, provenance, comparison, and interpretation contracts for external Particle Studio data. Particle Studio External Studies Particle Studio can retain and compare bounded local scalar series studies in CSV or JSON. An external study is reference evidence with its own provenance; it never automatically validates the active native or custom preview. (Source: ) This page is for users and reviewers who prepare and interpret local external study imports. Schema and limits The canonical schema is version 1. A project may retain up to eight studies in canonical ID order. Each imported document is limited to 4 MiB, each study to 64 series, and each series to 100,000 finite samples. (Sources: , ) Field Purpose , Stable study identity and display name. , Producer provenance. Declared spatial frame or . Optional quantity to unit metadata. , , Origin and review provenance. , , , or . , Explicit interpretation constraints. Canonical import timestamp. Quantity, unit, and finite scalar samples. Always . Every series has a stable ID, label, quantity, unit, and samples. A sample has an index, numeric time, finite value, optional canonical timestamp, and quality label. (Source: ) CSV format CSV requires one header row and at least one data row. A or column is recognized case insensitively. Other headers may declare a unit as ; without brackets, the unit defaults to . Quoted fields and doubled quotes are supported. Non finite value cells are skipped. (Source: ) Numeric time values are stored as time. Non numeric time text is parsed as a timestamp when possible. If there is no time column, row order supplies time indices. CSV import options may add the study name, solver/version, coordinate system, source, author, review metadata, assumptions, and limitations. JSON format JSON may","contentHash":"cf5908414fde4916565cde524d61d4e745128fb35017385125055b1fbdfc8a0d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-external-studies.md::0001","path":"webgpu-os/particle-studio-external-studies.md","title":"Particle Studio External Studies","description":"Import, provenance, comparison, and interpretation contracts for external Particle Studio data.","kind":"guide","source":"MD/webgpu-os/particle-studio-external-studies.md","updated":"2026-07-13","headings":["Particle Studio External Studies","Schema and limits","CSV format","JSON format","Provenance and validation levels","Import workflow","Comparison semantics","Security and interpretation","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"import options may add the study name, solver/version, coordinate system, source, author, review metadata, assumptions, and limitations. JSON format JSON may already use the canonical schema. For compatible object input without the schema marker, the parser supplies the current schema/version and forces before validation. The document must contain at least one series with at least one finite sample. Serialization validates the study before writing canonical JSON. (Source: ) Provenance and validation levels Validation requires an explicit supported level and rejects any claim that the study validates the native preview. A study marked must include a reviewer, a named solver, and a solver version. This validates the imported record's minimum provenance requirements only; it does not review equations, mesh, convergence, calibration, or compatibility with the Studio model. (Source: ) An unspecified coordinate system produces a warning and disables any spatial overlay interpretation. The current UI performs time series comparison only, so even a specified coordinate system does not activate a 3D overlay. Import workflow 1. In Compare , select a local CSV or JSON document. 2. Studio parses and normalizes the document within the import bounds. 3. Validation errors stop the import; warnings remain visible context. 4. A study with the same ID replaces the retained copy; otherwise it is added subject to the eight study project limit. 5. Saving the project persists the normalized study as project v2 content. The UI labels every retained study as not validating the native preview and logs the local import. (Sources: , ) Comparison semantics The Compare workspace selects a measured sensor series only when its quantity and unit exactly match an external series. compares up to the","contentHash":"ed25c0fb121e07a5a56b0d3099327862fe4abd26b055514068b44536b7e2ea57"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-external-studies.md::0002","path":"webgpu-os/particle-studio-external-studies.md","title":"Particle Studio External Studies","description":"Import, provenance, comparison, and interpretation contracts for external Particle Studio data.","kind":"guide","source":"MD/webgpu-os/particle-studio-external-studies.md","updated":"2026-07-13","headings":["Particle Studio External Studies","Schema and limits","CSV format","JSON format","Provenance and validation levels","Import workflow","Comparison semantics","Security and interpretation","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"semantics The Compare workspace selects a measured sensor series only when its quantity and unit exactly match an external series. compares up to the shorter series length by array index and reports baseline, external, delta, and ratio. A zero baseline produces a null ratio. The helper reports whether units are equal, but callers must enforce compatibility; the Studio UI does so before comparison. (Sources: , ) This comparison does not interpolate time, align timestamps, convert units, transform coordinate systems, propagate uncertainty, or compute spatial error norms. Array index alignment is suitable only when the reviewer has established that the records correspond. Security and interpretation Imports","contentHash":"2ac03f19235cd42d06cc370e0aa004c5d709bf6c2a6e1ce7579c2ad89dcdcaf3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-fidelity-and-validation.md::0000","path":"webgpu-os/particle-studio-fidelity-and-validation.md","title":"Particle Studio Fidelity and Validation","description":"Interpretation, evidence, comparison, and validation boundaries for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-fidelity-and-validation.md","updated":"2026-07-14","headings":["Particle Studio Fidelity and Validation","Interpretation labels","Runtime-path fidelity","Evidence classes","External-study boundary","Reproducible comparison record","Determinism boundary","Engineering-use gate","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Interpretation, evidence, comparison, and validation boundaries for Particle Realms Studio. Particle Studio Fidelity and Validation Particle Realms Studio separates an attractive interactive result from a validated result. A functioning GPU path, deterministic seed, high particle count, smooth frame rate, or imported reference file does not establish physical accuracy. Claims must be supported by the implemented model and explicit evidence. (Sources: , ) This page is for users and reviewers who decide what a Studio result can and cannot support. Interpretation labels Label or state Meaning in the current product The preset prioritizes composition and motion. Physical names may be thematic. The preset demonstrates a concept with explicit approximations and omissions. A compatible device may use mapped engine systems; another path remains available. A relevant engine system exists, but the preset is not wired to it in the app. External Imported data has no review claim. External Data is retained as a comparison reference. External Review is asserted in the imported provenance. External The study supplies reviewer, solver, and solver version provenance. It still does not validate Studio automatically. (Sources: , ) Runtime path fidelity The native path and custom WGSL path are different implementations. Seven preset modes can map to native engine systems on compatible devices. Other modes use the custom visual model. The Canvas 2D path is a generic recovery preview. Backend status therefore belongs in every reproducibility record. (Sources: , ) Native rendering binds the engine world's position buffer directly, while CPU side views use a bounded readback prefix. The direct renderer proves that the displayed positions came from the native world; it does not prove that the","contentHash":"e07665ae593b5fec2857c47bd47bd910beb2fb9eaa08f37d8c8ab238dca6ba4b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-fidelity-and-validation.md::0001","path":"webgpu-os/particle-studio-fidelity-and-validation.md","title":"Particle Studio Fidelity and Validation","description":"Interpretation, evidence, comparison, and validation boundaries for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-fidelity-and-validation.md","updated":"2026-07-14","headings":["Particle Studio Fidelity and Validation","Interpretation labels","Runtime-path fidelity","Evidence classes","External-study boundary","Reproducible comparison record","Determinism boundary","Engineering-use gate","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"CPU side views use a bounded readback prefix. The direct renderer proves that the displayed positions came from the native world; it does not prove that the world is calibrated. The Create secondary views are projections of one compact sample, not full resolution solution fields. (Sources: , , ) Evidence classes Keep these records distinct: Evidence Required provenance Permitted conclusion Runtime telemetry Supplied timestamp and measured metric Runtime behavior for the recorded session. Sensor sample Sensor ID, quantity, unit, source ID, sequence, timestamp, quality, and origin The accepted measurement represented by that definition. Compact reduction Explicit finite values and, for integrals, explicit weights The stated reduction over the supplied compact input. External study Source, author, solver/version, coordinate system, units, review metadata, assumptions, and limitations as applicable Comparison to that imported reference. Missing measurements remain missing. Profiler stages remain empty until the host supplies them. Compatibility only prediction modules are not part of the current six workspace Studio. (Sources: , , ) External study boundary Every normalized study sets to ; validation rejects any other value. A study marked must name a reviewer, solver, and solver version, but this describes the study's provenance only. An unspecified coordinate system disables spatial overlay claims. The current Compare workspace matches measured and external series by exact quantity and unit and displays an index aligned comparison. (Sources: , ) The current implementation does not perform time interpolation, coordinate registration, mesh conversion, uncertainty propagation, norm computation, full field comparison, or automatic pass/fail acceptance. Do those operations in a","contentHash":"4358768896e03d5b27bd1c2b52da8cb872e7dab2322d2ced7b2e14502014225f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-fidelity-and-validation.md::0002","path":"webgpu-os/particle-studio-fidelity-and-validation.md","title":"Particle Studio Fidelity and Validation","description":"Interpretation, evidence, comparison, and validation boundaries for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-fidelity-and-validation.md","updated":"2026-07-14","headings":["Particle Studio Fidelity and Validation","Interpretation labels","Runtime-path fidelity","Evidence classes","External-study boundary","Reproducible comparison record","Determinism boundary","Engineering-use gate","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"registration, mesh conversion, uncertainty propagation, norm computation, full field comparison, or automatic pass/fail acceptance. Do those operations in a reviewed external workflow before claiming validation. Reproducible comparison record For a meaningful review, retain at least: project JSON, project schema version, preset ID, classification, and provenance; recipe graph and compiled graph signature; seed, supported mapped recipe settings, fixed step, and substeps; selected backend, browser/device information, granted limits, and quality profile; sensor definitions and exported samples with units and quality; external study source, solver/version, coordinate system, assumptions, limitations, and revi","contentHash":"26bc8d076b58dc1780789c7aea81aaccbe6310deff483ff07b2119986a24f394"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-integration-map.md::0000","path":"webgpu-os/particle-studio-integration-map.md","title":"Particle Studio Integration Map","description":"Verified source map for Particle Realms Studio, including project v2, native ParticleSimWorld integration, advanced workspaces, evidence boundaries, and OS services.","kind":"guide","source":"MD/webgpu-os/particle-studio-integration-map.md","updated":"2026-07-15","headings":["Particle Studio Integration Map","Active Studio path","Active modules","Project and authoring contracts","Recipe graph boundary","GPU device and limit contract","Native lifecycle","Active native mappings","Readback and evidence flow","Causal state and sandbox storage","Remaining integration boundaries","See also"],"chunkIndex":0,"chunkCount":3,"text":"Verified source map for Particle Realms Studio, including project v2, native ParticleSimWorld integration, advanced workspaces, evidence boundaries, and OS services. Particle Studio Integration Map This map shows the active Particle Realms Studio paths and the boundaries that remain host or engine integration work. It distinguishes direct GPU state, bounded readback, measured evidence, authored configuration, external data, and predictions. Active Studio path Text equivalent: the app factory mounts . The app owns the shell, project, persistence, telemetry, advanced controller, and runtime selection. Eligible modes create and step an engine ; the native renderer binds its borrowed position buffer directly. Other WebGPU cases use the custom WGSL model, while Canvas 2D is a generic recovery preview. Active modules Module Main symbols Current responsibility Factory registration Registers the Particle Sandbox app for WebGPU OS. , custom WGSL exports Owns lifecycle, runtime selection, native stepping, custom simulation, interaction, reporting, persistence snapshots, and recovery. , Builds accessible Discover, Create, Recipe, Simulate, Analyze, and Compare workspaces and owns automatic tuning visibility. Coordinates the four visible authoring/evidence workspaces without stepping a solver. , Defines the 40 classified presets, catalog identities, custom solver family IDs, animated preview compositions, limitations, macros, and migration metadata. Settings, seed, hash, and immutable preset functions Provides the cycle free project primitives shared by graph and aggregate layers. Project create, migrate, validate, remix, serialize, deserialize, and graph sidecar functions Defines the strict project v2 aggregate, composes recipe graphs, and re exports the core preset API. Scene,","contentHash":"82f6f992388a1f7ae445359d7424f93551787a84ef4dcb615d1a75b7d021a29a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-integration-map.md::0001","path":"webgpu-os/particle-studio-integration-map.md","title":"Particle Studio Integration Map","description":"Verified source map for Particle Realms Studio, including project v2, native ParticleSimWorld integration, advanced workspaces, evidence boundaries, and OS services.","kind":"guide","source":"MD/webgpu-os/particle-studio-integration-map.md","updated":"2026-07-15","headings":["Particle Studio Integration Map","Active Studio path","Active modules","Project and authoring contracts","Recipe graph boundary","GPU device and limit contract","Native lifecycle","Active native mappings","Readback and evidence flow","Causal state and sandbox storage","Remaining integration boundaries","See also"],"chunkIndex":1,"chunkCount":3,"text":"serialize, deserialize, and graph sidecar functions Defines the strict project v2 aggregate, composes recipe graphs, and re exports the core preset API. Scene, view, artist, and comparison normalizers and edit helpers Defines versioned Studio authoring sidecars embedded in project v2. Typed graph edit, validation, migration, serialization, impact, and compilation functions Defines recipe graph v1 and deterministic plan descriptions. It does not execute a plan. , Applies the validated ParticleApp subset of a plan and keeps direct controls synchronized with mapped graph nodes. , Maps seven project modes to audited systems and creates deterministic typed CPU seed state. Discovers native engine exports, validates granted limits, owns a , uploads state, steps systems, exposes borrowed buffers, and performs bounded readback. Renders the borrowed native position buffer as additive LDR points without copying it into an app owned simulation buffer. , Produces bounded Canvas 2D projections and measured history from one runtime sample while preserving world space aspect ratio. Retains bounded measured runtime metrics without synthetic values. Sensor definition, sample, reduction, and runtime APIs Validates definitions and provenance bearing measured samples. Import, validation, comparison, and serialization APIs Parses bounded CSV/JSON studies and compares only compatible quantity/unit series. , Applies authored quality policy from observed frame windows and keeps unsupported attribution absent. , Retained internal compatibility module; it is not exposed as a current Studio workspace. Debounces complete workspace snapshots and writes through CSE and the sandbox, with legacy local storage as fallback. , , Wraps shared or dedicated devices, validates exact required limits, observes","contentHash":"ec062a39115d5b5facf6b3716251a2374d0505b032214634992140565e8bae8c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-integration-map.md::0002","path":"webgpu-os/particle-studio-integration-map.md","title":"Particle Studio Integration Map","description":"Verified source map for Particle Realms Studio, including project v2, native ParticleSimWorld integration, advanced workspaces, evidence boundaries, and OS services.","kind":"guide","source":"MD/webgpu-os/particle-studio-integration-map.md","updated":"2026-07-15","headings":["Particle Studio Integration Map","Active Studio path","Active modules","Project and authoring contracts","Recipe graph boundary","GPU device and limit contract","Native lifecycle","Active native mappings","Readback and evidence flow","Causal state and sandbox storage","Remaining integration boundaries","See also"],"chunkIndex":2,"chunkCount":3,"text":"and writes through CSE and the sandbox, with legacy local storage as fallback. , , Wraps shared or dedicated devices, validates exact required limits, observes loss, and respects device ownership. Project and authoring contracts The canonical project schema is version 2. It embeds , , , , , and authored beside the project's identity, provenance, seed, classification, tags, and normalized settings. Version 1 projects migrate deterministically, and legacy workspace v4 settings remain importable. (Source: ) Strict v2 validation rejects unknown project and settings fields. Sensor definitions and external studies receive stable ordering. Persisted Twin configuration rejects credential like keys and excludes runtime tr","contentHash":"e3cee3c5c6b38e9656a0bab78fc633e49691386eb6d487db11d6adfb3a5cbf34"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-performance.md::0000","path":"webgpu-os/particle-studio-performance.md","title":"Particle Studio Performance","description":"Runtime selection, resource ownership, bounded readback, adaptive quality, and measurement guidance.","kind":"guide","source":"MD/webgpu-os/particle-studio-performance.md","updated":"2026-07-14","headings":["Particle Studio Performance","Runtime tiers","Native eligibility and ceilings","GPU limits and ownership","Direct rendering and readback","Quality profiles","Measurements and attribution","Device loss and recovery","Performance report checklist","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Runtime selection, resource ownership, bounded readback, adaptive quality, and measurement guidance. Particle Studio Performance Particle Realms Studio chooses a runtime from granted browser and device capabilities. Particle count alone is not a performance guarantee, and no single frame rate claim applies across modes, GPUs, browsers, display sizes, or quality profiles. Report measured results together with their runtime path and configuration. (Sources: , ) This page is for developers and reviewers who tune Studio or publish measured performance results. Runtime tiers Tier Selection Performance boundary Native engine Mapped mode, eligible count, required exports, known device limits, and at least ten storage buffers per shader stage. Steps systems and renders the borrowed native position buffer. Custom WGSL WebGPU is available but the native mapping, eligibility, or native limit is unavailable. Runs the preset's lightweight app model with an app owned HDR pipeline. Canvas 2D recovery WebGPU initialization or recovery is unavailable. Draws 5,000 generic points for continuity; the selected model is inactive. The app first considers an OS shared GPU device. If native eligibility needs a limit the shared device lacks, it may request a dedicated device for the app's WebGPU fallback. A shared device is never destroyed by the app. (Sources: , ) Native eligibility and ceilings The seven native mapped modes are Galaxy and Orbital Clusters ( ), Flocking Ribbons ( ), Cohesive Fluid ( ), Reaction Chamber ( ), Magnetosphere ( ), and Molecular Lattice ( ). Native CPU seed state creation has a one million particle hard bound. N body profiles declare a 100,000 state bound, while the interactive app further caps Galaxy and Orbital Clusters native selection at 10,000 because their","contentHash":"e426ba5e17b2868fb1bf8de62d29e0a73e24c64eb0ed1162fdca67288fb57b45"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-performance.md::0001","path":"webgpu-os/particle-studio-performance.md","title":"Particle Studio Performance","description":"Runtime selection, resource ownership, bounded readback, adaptive quality, and measurement guidance.","kind":"guide","source":"MD/webgpu-os/particle-studio-performance.md","updated":"2026-07-14","headings":["Particle Studio Performance","Runtime tiers","Native eligibility and ceilings","GPU limits and ownership","Direct rendering and readback","Quality profiles","Measurements and attribution","Device loss and recovery","Performance report checklist","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"N body profiles declare a 100,000 state bound, while the interactive app further caps Galaxy and Orbital Clusters native selection at 10,000 because their current pairwise solve is expensive. All bounds remain subject to the granted device limits. (Sources: , ) Other catalog modes are not native connected and use the custom WGSL path. The catalog macro permits counts up to ten million, but project normalization and the tier selector clamp to the active runtime's recommended maximum. (Sources: , ) GPU limits and ownership derives its hard maximum from granted storage buffer, buffer size, dispatch, and workgroup limits and requires . Initialization fails closed when required native exports, limits, buffers, or configuration are invalid. (Source: ) The native runtime owns its and readback staging buffers. The native renderer owns its pipelines, bind groups, and uniforms but borrows the world's position buffer. Teardown drains pending readback, destroys owned world and renderer resources, and leaves a borrowed shared alive. (Sources: , ) Direct rendering and readback Native presentation binds one 16 byte position record per particle and renders additive LDR billboards without copying positions into a second app simulation buffer. The renderer reports no HDR or trail capability. The custom path instead stores 48 bytes of particle state and uses the app's HDR compute/render/tone pipeline. (Sources: , ) Advanced workspaces request a native sample no more often than every 500 ms in Create, Analyze, or Compare. Each automatic sample is capped at 4,096 particles; each requested vector stream allocates exactly count × 16 bytes. The result is labeled and reports truncation. This is bounded inspection, not full particle state readback. (Sources: , ) Quality profiles Profile View","contentHash":"ab6bb1c096c4d0dbe2183386947935c497dd5aba77fb6dacac46c40675863b04"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-performance.md::0002","path":"webgpu-os/particle-studio-performance.md","title":"Particle Studio Performance","description":"Runtime selection, resource ownership, bounded readback, adaptive quality, and measurement guidance.","kind":"guide","source":"MD/webgpu-os/particle-studio-performance.md","updated":"2026-07-14","headings":["Particle Studio Performance","Runtime tiers","Native eligibility and ceilings","GPU limits and ownership","Direct rendering and readback","Quality profiles","Measurements and attribution","Device loss and recovery","Performance report checklist","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"bytes. The result is labeled and reports truncation. This is bounded inspection, not full particle state readback. (Sources: , ) Quality profiles Profile View scale View rate Max secondary views Sensor rate scale Trails Post quality : : : : : Economy 0.5 5 Hz 1 0.5 off 0.35 Interactive 0.7 15 Hz 3 1 on 0.7 High 1 30 Hz 5 1 on 1 Cinematic 1 60 Hz 7 1 on 1.25 The current advanced UI applies the maximum secondary view policy and optional view quality behavior. Not every profile field controls every native/custom solver or renderer feature yet. In particular, the native renderer reports no trails even when the authored profile permits them. (Sources: , , ) Automatic quality uses a 45 sample frame window by default,","contentHash":"ba2cd92b48ec800e8f8b277d39787ff9b637c61d9ae2bceba0c90db9224b47e2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-preset-authoring.md::0000","path":"webgpu-os/particle-studio-preset-authoring.md","title":"Particle Studio Preset Authoring","description":"Contracts and review guidance for built-in Particle Realms Studio presets.","kind":"guide","source":"MD/webgpu-os/particle-studio-preset-authoring.md","updated":"2026-07-15","headings":["Particle Studio Preset Authoring","Required preset record","Current catalog","Macro controls","Defaults and reproducibility","Model and limitation text","Native-engine status","Recipe and project generation","Author review checklist","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Contracts and review guidance for built-in Particle Realms Studio presets. Particle Studio Preset Authoring Particle Realms presets are curated source records in . The catalog currently contains 40 immutable built in presets. It is not a user installable preset marketplace, and importing a project does not register a new global preset. (Sources: , ) This guide is for developers who maintain the built in catalog and its project and recipe defaults. Required preset record Each entry supplies: Field Contract Stable, versioned catalog identity. and Short and display names. Stable numeric catalog identity used by projects and discovery. Numeric custom solver family ID. Variants may share an audited solver family, while a dedicated solver uses its own ID. Named animated Discover composition. It must visually distinguish the preset rather than reuse a generic particle cloud. One of , , , , or . Exactly or . Search and discovery labels. and User facing complexity and model fidelity description. , , and Concise account of the behavior that is actually present. Explicit omissions and interpretation limits. Keys from the shared macro registry. Honest native engine connection status, systems, and note. Complete normalized ParticleApp starting settings. freezes tags, limitations, defaults, and resolved macro descriptors. Unknown macro keys throw during module evaluation. Keep IDs and values stable after release; project provenance depends on them. (Source: ) Current catalog Category Built in presets Cosmic Spiral Galaxy, Orbital Clusters, Supernova Shell, Black Hole Accretion, Comet Storm, Planetary Rings, Pulsar Jets, Globular Star Cluster Fields Quantum Vortex, Curl Noise Nebula, Magnetosphere, Aurora Curtains, Tornado Field, Lightning Cage, Solar Wind Stream, Gravity Lens,","contentHash":"323f9285aca907a330a6798f77afb348d7d336a3e83d2ef0a902e2757e8a455a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-preset-authoring.md::0001","path":"webgpu-os/particle-studio-preset-authoring.md","title":"Particle Studio Preset Authoring","description":"Contracts and review guidance for built-in Particle Realms Studio presets.","kind":"guide","source":"MD/webgpu-os/particle-studio-preset-authoring.md","updated":"2026-07-15","headings":["Particle Studio Preset Authoring","Required preset record","Current catalog","Macro controls","Defaults and reproducibility","Model and limitation text","Native-engine status","Recipe and project generation","Author review checklist","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"Globular Star Cluster Fields Quantum Vortex, Curl Noise Nebula, Magnetosphere, Aurora Curtains, Tornado Field, Lightning Cage, Solar Wind Stream, Gravity Lens, Magnetic Reconnection, Vector Weave Matter Thermal Fountain, Reaction Chamber, Cohesive Fluid, Molecular Lattice, Ocean Waves, Waterfall Canyon, Lava Flow, Crystal Growth, Smoke Chamber Life Strange Attractor, Flocking Ribbons, Jellyfish Bloom, Firefly Swarm, Mycelium Growth, Plankton Current, Neural Pulse Web Events Event Fireworks, Meteor Shower, Rainstorm, Snow Globe, Sandstorm Wall, Geyser Burst The classification is intentionally conservative and declared independently on every record. A title alone must never imply a solver that the model does not implement. For example, Quantum Vortex explicitly states that its name is thematic rather than a quantum fluid solve, while Ocean Waves identifies its layered procedural wave sheet and its non CFD limitation. (Source: ) Macro controls Authors select controls from a shared registry rather than defining ad hoc UI ranges inside a preset: Key Range Unit 1,000..10,000,000, integer step 1,000 particles 0.1..4 relative 0.35..8 px 0.35..3 EV 3..3 relative 0.94..1 ratio 0..4 relative 0..4 relative 50..15,000 K 0..3 relative 3..3 relative 0.7..0.98 ratio 0..2 relative 0..1 speed Use the shared label, type, minimum, maximum, step, and unit exactly. The runtime normalizer remains authoritative and may clamp against device or app limits. A physical looking unit on one control does not make the entire model calibrated. (Sources: , ) Defaults and reproducibility Defaults should form a complete, finite settings patch accepted by the project normalizer. Preserve a fixed seed in derived project fixtures when a visual or behavioral comparison must be repeatable. Count affects","contentHash":"3ebe0c8525b4d88f6c14b368ca52b12aa78d58b28decb074e087c774a7a54183"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-preset-authoring.md::0002","path":"webgpu-os/particle-studio-preset-authoring.md","title":"Particle Studio Preset Authoring","description":"Contracts and review guidance for built-in Particle Realms Studio presets.","kind":"guide","source":"MD/webgpu-os/particle-studio-preset-authoring.md","updated":"2026-07-15","headings":["Particle Studio Preset Authoring","Required preset record","Current catalog","Macro controls","Defaults and reproducibility","Model and limitation text","Native-engine status","Recipe and project generation","Author review checklist","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"accepted by the project normalizer. Preserve a fixed seed in derived project fixtures when a visual or behavioral comparison must be repeatable. Count affects allocation and native eligibility; do not use a large default merely to make the preset look dense. Camera distance, palette, exposure, size, and optional trails should produce a legible first frame without hiding the model's limitations. (Sources: , ) Model and limitation text A useful preset description answers four separate questions: 1. What algorithm or approximation moves the particles? 2. Which controls have meaningful effects in that implementation? 3. Which familiar physical process is only suggested visually? 4. Which conclusions must not be drawn from the","contentHash":"4b0f2ff72a86f35d677a897805212e2e8f91a38cf241c189e6f015962ada4395"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-telemetry.md::0000","path":"webgpu-os/particle-studio-telemetry.md","title":"Particle Studio Telemetry","description":"Runtime metrics, sensor evidence, profiling, and legacy compatibility contracts in Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-telemetry.md","updated":"2026-07-14","headings":["Particle Studio Telemetry","Runtime telemetry","Sensor definitions","Sensor samples and provenance","Compact reductions","Analyze and export","Stage attribution and adaptive quality","Legacy Twin runtime compatibility","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Runtime metrics, sensor evidence, profiling, and legacy compatibility contracts in Particle Realms Studio. Particle Studio Telemetry Particle Realms Studio accepts measured values; it does not generate missing measurements. Runtime metrics, sensor evidence, and external references use separate contracts so derived values cannot silently become canonical truth. (Sources: , ) This page is for integrators and users who ingest, export, or interpret current Studio measurements. Runtime telemetry accepts a sample only when it has a finite, non negative timestamp and at least one finite, non negative supported metric. Its default history is 120 samples; configured limits are clamped to 1..10,000. Integer metrics are rounded and absent metrics remain absent. (Source: ) Metric Meaning Value handling Observed frames per second Finite, non negative number. Observed frame duration Finite, non negative milliseconds. Measured queue submit duration Recorded only when supplied. Measured GPU duration Recorded only when supplied. Active particle count Rounded non negative integer. Allocated particle bytes Rounded non negative integer. Each metric can be exported as timestamp/value points. Summaries report count, latest, minimum, maximum, average, and p95; an unsampled metric has a summary. Studio records an app runtime sample at an approximately 500 ms cadence when those observations are available. (Sources: , ) Sensor definitions Sensor definitions use schema . A definition has a stable ID, sensor type, quantity, unit, source ID, sampling rate, reduction, value type, and stale policy. The runtime supports up to 4,096 definitions (default 256) and 1..10,000 samples per sensor (default 600). (Source: ) Contract Supported values Sensor type , , , , , , , , , , Reduction , , , , , , , , ,","contentHash":"853b6ee5153276ac633cb17ba7a35fa65f2e92a4a99e20a45a5612e6801205ea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-telemetry.md::0001","path":"webgpu-os/particle-studio-telemetry.md","title":"Particle Studio Telemetry","description":"Runtime metrics, sensor evidence, profiling, and legacy compatibility contracts in Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-telemetry.md","updated":"2026-07-14","headings":["Particle Studio Telemetry","Runtime telemetry","Sensor definitions","Sensor samples and provenance","Compact reductions","Analyze and export","Stage attribution and adaptive quality","Legacy Twin runtime compatibility","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"(default 256) and 1..10,000 samples per sensor (default 600). (Source: ) Contract Supported values Sensor type , , , , , , , , , , Reduction , , , , , , , , , Value type , , , , , Data quality , , , , , , Sampling rates are bounded to 0.001..1,000 Hz. Validation checks that the selected reduction and value type are compatible and that IDs remain unique. (Source: ) Sensor samples and provenance Samples use schema . Validation requires the sample's sensor ID, quantity, unit, and source provenance to match its definition. Sequence and timestamp must remain monotonic. Normal samples carry a value; only and quality permit a null value. The origin identifies an ingested or compact reduction source. (Source: ) Staleness is calculated from the latest timestamp and the definition's stale policy. It does not rewrite the recorded sample's original quality or value. Rejected samples increment a diagnostic count rather than being repaired into apparently valid measurements. Compact reductions The reducer accepts at most 65,536 explicit finite values. It implements the supported scalar reductions over that supplied input. An integral requires explicit weights; the module does not guess cell size, area, volume, or time spacing. Histogram output is bounded and explicit. (Source: ) This is a data contract and compact reduction seam. It does not locate probes in a solver, read arbitrary GPU fields, schedule a GPU reduction pass, or calibrate a sensor. A host must supply the measured compact values and their provenance. Analyze and export The Analyze workspace displays registered definitions, accepted series, latest values, quality, origin, rejection count, and bounded diagnostics. JSON and CSV exports are sorted and retain provenance. Runtime metrics are projected into predefined","contentHash":"e591642bdb910c1f5db526acdcb62b0bd592642660697139912af9362158adad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-telemetry.md::0002","path":"webgpu-os/particle-studio-telemetry.md","title":"Particle Studio Telemetry","description":"Runtime metrics, sensor evidence, profiling, and legacy compatibility contracts in Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-telemetry.md","updated":"2026-07-14","headings":["Particle Studio Telemetry","Runtime telemetry","Sensor definitions","Sensor samples and provenance","Compact reductions","Analyze and export","Stage attribution and adaptive quality","Legacy Twin runtime compatibility","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"quality, origin, rejection count, and bounded diagnostics. JSON and CSV exports are sorted and retain provenance. Runtime metrics are projected into predefined performance sensor samples only when the corresponding metric was supplied. Missing sources remain empty. (Sources: , ) Stage attribution and adaptive quality accepts only explicitly supplied timing for , , , , , and stages. Analyze shows an empty row until a host supplies that stage; it does not divide frame time heuristically. The quality governor separately uses observed windows and authored policy to select Economy, Interactive, High, or Cinematic behavior. (Sources: , ) Legacy Twin runtime compatibility can maintain an append only measured truth history fr","contentHash":"e9f2bec4e00645e3bb32dce256f9739246c11f3f8d357a26221b4d8a5250cdea"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-test-plan.md::0000","path":"webgpu-os/particle-studio-test-plan.md","title":"Particle Studio Test Plan","description":"Automated, real-device, manual, performance, and release verification for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-test-plan.md","updated":"2026-07-15","headings":["Particle Studio Test Plan","Evidence levels","Automated inventory","Core contract gate","Recipe-runtime gate","GPU and lifecycle matrix","Manual UX and accessibility gate","Performance and resource gate","Master Prompt acceptance traceability","Release gates","Known gaps","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Automated, real-device, manual, performance, and release verification for Particle Realms Studio. Particle Studio Test Plan This plan verifies current repository behavior and records gaps against the broader Simulation Studio design pack. Passing structural and runtime tests does not establish scientific validity or performance on hardware that was not measured. This page is for developers and release reviewers who need repeatable coverage and explicit acceptance test gaps. Evidence levels Level Evidence Contract Pure validation, normalization, migration, serialization, and deterministic helper checks. Browser integration DOM, controller, persistence seam, and fallback behavior in a served ES module page. Real WebGPU Pipeline creation or real engine world execution on an actual granted . Manual UX Keyboard, focus, responsive layout, warning semantics, reduced motion, and recovery observation. Scientific validation Independent equation, convergence, calibration, uncertainty, and reference review. Not supplied by current tests. All browser pages must be served over HTTP. Start the repository server with the repository command, then open the relevant test route under . (Source: ) Automated inventory Suite Current scope 29 project v2 creation, deterministic serialization, migration, strict field, Studio sidecar, sensor, Twin, external study, quality, and round trip cases. 28 graph registry, type, topology, validation, deterministic compile, impact, migration, last valid, runtime adapter, direct sync, and observability cases. 36 checks covering the four current advanced workspaces, visual Recipe add/connect/remove/recovery behavior, measured preview, compatibility only Artist/Twin controller contracts, canonical edits, bounded samples, external import, overflow, and","contentHash":"c60cfb9db2926e01c78b7549710074adc1daba1b869636b7bdb06af011186929"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-test-plan.md::0001","path":"webgpu-os/particle-studio-test-plan.md","title":"Particle Studio Test Plan","description":"Automated, real-device, manual, performance, and release verification for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-test-plan.md","updated":"2026-07-15","headings":["Particle Studio Test Plan","Evidence levels","Automated inventory","Core contract gate","Recipe-runtime gate","GPU and lifecycle matrix","Manual UX and accessibility gate","Performance and resource gate","Master Prompt acceptance traceability","Release gates","Known gaps","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"behavior, measured preview, compatibility only Artist/Twin controller contracts, canonical edits, bounded samples, external import, overflow, and ownership. Browser harness for sensor and Twin runtime unit modules. 20 advanced domain checks including automatic count pressure, headroom, quantization, and hardware ceiling decisions. Focused home camera, stratified readback, projection aspect ratio, render, and sample provenance checks. Definition, sample, quality, reduction, export, and provenance contracts. Connector state, append only truth, replay, branches, predictions, and alerts. Deterministic native state generation and mapped mode contracts. Native discovery, limits, world lifecycle, stepping, bounded readback, and teardown. Borrowed buffer validation, rendering, ownership, and teardown. Engine world regressions used by the app's native path. 22 real device checks covering native selection, closed by default tuning, automatic population UI and reallocation, recipe mapping, invalid plan retention, fixed clock, readback, layout, and unmount ownership. Fourteen real WebGPU render/compute pipeline compile checks for exported particle shaders. (Sources: the listed test files.) Core contract gate Run the project, recipe, sensor, and compatibility Twin suites and require zero failures. Confirm these negative paths explicitly: unknown project v2, settings, Studio sidecar, graph, node, port, and edge fields fail closed; future project and graph versions fail closed; project v1, graph v0, and legacy workspace v4 compatible inputs migrate deterministically; duplicate IDs, cycles, incompatible ports, cardinality violations, missing required inputs, and unavailable required subsystems report exact errors; a tampered previous plan is rejected and an invalid current graph cannot","contentHash":"64c89581f644ed6c97bd2cf3b7949015d56b7ccaf2c08bf62544b22f0023103d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-test-plan.md::0002","path":"webgpu-os/particle-studio-test-plan.md","title":"Particle Studio Test Plan","description":"Automated, real-device, manual, performance, and release verification for Particle Realms Studio.","kind":"guide","source":"MD/webgpu-os/particle-studio-test-plan.md","updated":"2026-07-15","headings":["Particle Studio Test Plan","Evidence levels","Automated inventory","Core contract gate","Recipe-runtime gate","GPU and lifecycle matrix","Manual UX and accessibility gate","Performance and resource gate","Master Prompt acceptance traceability","Release gates","Known gaps","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"missing required inputs, and unavailable required subsystems report exact errors; a tampered previous plan is rejected and an invalid current graph cannot replace the live settings; credentials and Twin runtime truth cannot enter the project document; external studies cannot claim to validate the native preview; missing measurements remain missing and integral reduction requires weights. (Sources: , , , ) Recipe runtime gate Verify both pure and app integrated behavior: 1. The compiled plan validates against its source graph and has a stable signature and topological order. 2. Seed, count, force, temperature, point size, exposure, camera distance, supported solver type, fixed step, and substeps appl","contentHash":"588c7275b3bc14e118766b915260d9026fdd052ebc9a531f9b9a23658070eb4e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-user-guide.md::0000","path":"webgpu-os/particle-studio-user-guide.md","title":"Particle Studio User Guide","description":"Task-oriented guide to the current Particle Realms Studio workspaces and evidence boundaries.","kind":"guide","source":"MD/webgpu-os/particle-studio-user-guide.md","updated":"2026-07-15","headings":["Particle Studio User Guide","Before opening Studio","Choose and run a recipe demo","Tune the live simulation","Choose a simulation view","Author the scene in Create","Edit a recipe","Analyze measured data","Compare projects and external data","Compatibility-only legacy sidecars","Choose a quality profile","Save, export, import, and recover","Keyboard and accessibility behavior","Troubleshooting checklist","Capability boundary","See also"],"chunkIndex":0,"chunkCount":3,"text":"Task-oriented guide to the current Particle Realms Studio workspaces and evidence boundaries. Particle Studio User Guide Particle Realms Studio is the Particle Sandbox application inside WebGPU OS. It provides six workspaces for selecting, running, safely tuning, inspecting, and comparing particle projects. Full brush construction belongs in Paint Studio; the reusable node/part builder belongs in the developing RealmForge. Particle Realms reads the same portable project and recipe documents they produce. Results are artistic or educational previews unless your own evidence and validation process establishes otherwise. (Sources: , ) This guide is for users who want to run and inspect current Studio projects without confusing authored previews with measured or validated evidence. Before opening Studio Run WebGPU OS over HTTP in a browser with WebGPU enabled for the native or custom GPU paths. The application can remain accessible in generic Canvas 2D recovery mode when WebGPU is unavailable, but that mode does not execute the selected model. Open Particle Sandbox from the WebGPU OS app catalog and check the backend label before interpreting the scene. (Sources: , ) Choose and run a recipe demo 1. Open Discover and filter the 40 built in recipe demos by category, tag, difficulty, or search text. 2. Read the demo's classification, model description, and limitations. 3. Use Run Demo to create a fresh normal project from its canonical recipe, or Build from Recipe to create an editable remix. Inspect Recipe Graph shows the actual typed graph used by the demo. 4. Simulate opens with the full canvas visible. Choose Tuning or press only when you want the advanced drawer. Favorites and recent choices are local convenience state. A preset labeled prioritizes composition;","contentHash":"381d8977457267e509e2e9a42844a1283e8d821a7d5ecf0ed6c13d5c5049a4b7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-user-guide.md::0001","path":"webgpu-os/particle-studio-user-guide.md","title":"Particle Studio User Guide","description":"Task-oriented guide to the current Particle Realms Studio workspaces and evidence boundaries.","kind":"guide","source":"MD/webgpu-os/particle-studio-user-guide.md","updated":"2026-07-15","headings":["Particle Studio User Guide","Before opening Studio","Choose and run a recipe demo","Tune the live simulation","Choose a simulation view","Author the scene in Create","Edit a recipe","Analyze measured data","Compare projects and external data","Compatibility-only legacy sidecars","Choose a quality profile","Save, export, import, and recover","Keyboard and accessibility behavior","Troubleshooting checklist","Capability boundary","See also"],"chunkIndex":1,"chunkCount":3,"text":"Tuning or press only when you want the advanced drawer. Favorites and recent choices are local convenience state. A preset labeled prioritizes composition; demonstrates a concept with stated limitations. Neither label means calibrated or certified. Each card has an animated composition specific preview, so an ocean, fountain, galaxy, flock, or storm is recognizable before the full runtime opens. (Sources: , ) Tune the live simulation The tuning drawer stays closed when Simulate becomes active. Open it with the toolbar action or , and close it with the drawer button, toolbar action, , or . Particle population is automatic. Studio samples delivered frame cadence, smooths several observations, and uses hysteresis plus a reallocation cooldown to move population toward a stable 60 FPS. The Simulate row shows the current automatic population but provides no count or cap input. The only ceiling is the current GPU/runtime safety contract; users do not configure it. Population changes rebuild size dependent resources. Other controls update the active configuration according to their declared impact. The active backend report identifies whether Studio is using the native engine path, the custom WGSL path, or the generic recovery preview. (Sources: , ) Direct controls synchronize the mapped nodes in the current recipe on save. That synchronization preserves custom graph topology and unsupported authored intent. It does not convert every recipe node into running engine state. (Source: ) Studio has three control detail levels. Quick shows Effect, automatic Particles, Force, and Size. Standard also shows Palette and Brush. Advanced keeps the Standard row. Changing detail level never opens the tuning drawer. The drawer groups the remaining current settings under Interaction, Dynamics,","contentHash":"4c9f526893f24c51ebb27835cb1f564da6778b0bfd5d4de9ef49c842a6fc7bcf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/particle-studio-user-guide.md::0002","path":"webgpu-os/particle-studio-user-guide.md","title":"Particle Studio User Guide","description":"Task-oriented guide to the current Particle Realms Studio workspaces and evidence boundaries.","kind":"guide","source":"MD/webgpu-os/particle-studio-user-guide.md","updated":"2026-07-15","headings":["Particle Studio User Guide","Before opening Studio","Choose and run a recipe demo","Tune the live simulation","Choose a simulation view","Author the scene in Create","Edit a recipe","Analyze measured data","Compare projects and external data","Compatibility-only legacy sidecars","Choose a quality profile","Save, export, import, and recover","Keyboard and accessibility behavior","Troubleshooting checklist","Capability boundary","See also"],"chunkIndex":2,"chunkCount":3,"text":"keeps the Standard row. Changing detail level never opens the tuning drawer. The drawer groups the remaining current settings under Interaction, Dynamics, Matter, and Presentation. Advanced is a broader settings surface, not a promise that every typed recipe node has a dedicated widget. (Source: ) Choose a simulation view The three buttons at the top center of Simulate select one authoritative perspective and two bounded inspection views: Perspective ( ) shows the live 3D renderer. Drag to orbit, use the mouse wheel to dolly, and choose Home camera to restore the complete camera authored for the selected preset. Changing presets also resolves a fresh complete home camera, so yaw or pitch from the previous prese","contentHash":"ba6e118ce064badf27b4b4dd7dcff11b0b44cc85ea4a0250e26e73d33253ac09"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/pinball-parts.md::0000","path":"webgpu-os/pinball-parts.md","title":"Modular Pinball Parts","description":"How engine contributors and table authors define reusable pinball parts, register aliases, and assemble a table without coupling mechanisms to one layout.","kind":"guide","source":"MD/webgpu-os/pinball-parts.md","updated":"2026-07-17","headings":["Modular Pinball Parts","Use canonical pinball names","Architecture and dependencies","Target folder contract","Add a reusable part","Assemble a table","Understand the compatibility compiler","Build counted spinner and drop-target objectives","Author playable lower geometry","Return drained balls through a physical machine","Build active rollover sockets, not decorative rings","Adapt phone and tablet play","Keep camera motion readable","Author the cabinet backbox and player display","Use Cinema Focus as a staged-ball presentation","Research and see also"],"chunkIndex":0,"chunkCount":3,"text":"How engine contributors and table authors define reusable pinball parts, register aliases, and assemble a table without coupling mechanisms to one layout. Modular Pinball Parts The pinball parts system turns each physical mechanism into a reusable, immutable part definition. This guide is for engine contributors who build parts and table authors who assemble those parts into a machine. Use one implementation for each reusable part type. Create left, right, upper, or themed variants as independent instances in a table definition. Do not duplicate the implementation into folders such as and . Use canonical pinball names Canonical names keep table definitions, editor tools, events, saves, and mods interoperable. Compatibility aliases accept familiar informal terms, but new code should use the canonical type. Informal term Canonical part Meaning flapper The current machine uses a spring return one way gate. A future route selecting mechanism should use a separate type. twanger The compatibility alias resolves to the current switch, coil, and rubber slingshot package. sensor A switch like input that reports contact, occupancy, position, or passage. bouncer A pop bumper applies an active kick. Passive restitution remains a collider surface property. launcher A manual, automatic, or combined ball launch mechanism. door A powered lock or routing barrier. Use for a passive one way flap. drain and A sensor detects the crossing. The trough owns ball inventory and serving. The alias resolves to the trough assembly. flipper The player controlled bat and its mechanical state. target A scoring target with a dedicated switch contract. drop target A rectangular switch backed target that moves below the playfield and resets through a coil. target bank A logical reference group for","contentHash":"9974612d2c79bdc49021344ab085c42f197043a97beca0bb9e4e9777ca253a18"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/pinball-parts.md::0001","path":"webgpu-os/pinball-parts.md","title":"Modular Pinball Parts","description":"How engine contributors and table authors define reusable pinball parts, register aliases, and assemble a table without coupling mechanisms to one layout.","kind":"guide","source":"MD/webgpu-os/pinball-parts.md","updated":"2026-07-17","headings":["Modular Pinball Parts","Use canonical pinball names","Architecture and dependencies","Target folder contract","Add a reusable part","Assemble a table","Understand the compatibility compiler","Build counted spinner and drop-target objectives","Author playable lower geometry","Return drained balls through a physical machine","Build active rollover sockets, not decorative rings","Adapt phone and tablet play","Keep camera motion readable","Author the cabinet backbox and player display","Use Cinema Focus as a staged-ball presentation","Research and see also"],"chunkIndex":1,"chunkCount":3,"text":"contract. drop target A rectangular switch backed target that moves below the playfield and resets through a coil. target bank A logical reference group for independent drop target IDs and a shared reset coil. spinner A freely rotating metal blade that reports one switch pulse per revolution. light An addressable playfield lamp or guidance insert. The public parts index keeps a narrow compatibility layer: Compatibility name Canonical name , , , , , , , remains canonical. The alias resolves to for compatibility, even though authors may use the word for other mechanisms. New table definitions should state the intended canonical type. (Source: .) Architecture and dependencies The modular path has four stages: owns the immutable authoring contract. resolves canonical types and aliases to factories. A table creates independent instances through those factories. validates and combines the instances into one frozen table contract. creates the mutable solver records, retaining a link to the authored owner. (Sources: , , , .) The Dimensional Foundry table is an assembly root, not a mechanism implementation. It supplies table metadata, ordered part instances, and the playfield level compatibility settings required by the current simulator. (Source: .) Target folder contract Keep shared contracts, registry behavior, assembly, reusable parts, and authored tables in separate folders: Each reusable part folder exposes its public factory through . The and folders are reusable electromechanical subcomponents used by mechanisms; the other folders define complete semantic parts. Slingshots compose a leaf switch and kick coil, pop bumpers compose a skirt switch and kick coil, targets compose a hit switch and optional powered assist or reset coil, flippers compose a power coil and end of","contentHash":"d685b7da16099712734c5647e21c8de81db050de53c417d05f40450b6b7d9c1b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/pinball-parts.md::0002","path":"webgpu-os/pinball-parts.md","title":"Modular Pinball Parts","description":"How engine contributors and table authors define reusable pinball parts, register aliases, and assemble a table without coupling mechanisms to one layout.","kind":"guide","source":"MD/webgpu-os/pinball-parts.md","updated":"2026-07-17","headings":["Modular Pinball Parts","Use canonical pinball names","Architecture and dependencies","Target folder contract","Add a reusable part","Assemble a table","Understand the compatibility compiler","Build counted spinner and drop-target objectives","Author playable lower geometry","Return drained balls through a physical machine","Build active rollover sockets, not decorative rings","Adapt phone and tablet play","Keep camera motion readable","Author the cabinet backbox and player display","Use Cinema Focus as a staged-ball presentation","Research and see also"],"chunkIndex":2,"chunkCount":3,"text":"bumpers compose a skirt switch and kick coil, targets compose a hit switch and optional powered assist or reset coil, flippers compose a power coil and end of stroke switch, and the trough composes entry and serve switches with an eject coil. A complex part may split physics, visuals, mechanics, wiring, or runtime support into focused sibling modules. Other subsystems should import the folder's public entry rather than its internal files. The shared definition accepts these concerns without forcing them into the table layout: Field Purpose Stable instance identity using lowercase words separated by underscores. Canonical reusable type in the form. Positive schema version. The default is . Additional names attached","contentHash":"46da0d713a9024675f23af841880d0725cd986f0aa59c3b981045aa8a8a80653"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/realm-network.md::0000","path":"webgpu-os/realm-network.md","title":"Realm Network","description":"Architecture, contracts, security boundaries, V3 compatibility, verification, and deployment policy for the Realm Network.","kind":"guide","source":"MD/webgpu-os/realm-network.md","updated":"2026-08-02","headings":["Realm Network","Architecture","Public V1 contracts","Guarded app API","V3 selection and downgrade policy","Embedded resident and supernode roles","Discovery, health, and bounded resources","Clean-room concepts adapted from Iroh","Local verification receipt","One-shot server cutover","See also"],"chunkIndex":0,"chunkCount":3,"text":"Architecture, contracts, security boundaries, V3 compatibility, verification, and deployment policy for the Realm Network. Realm Network The Realm Network adds portable identity, immutable content, resumable links, semantic replication, offline branches, governance, bounded task exchange, and safe Realm discovery to the WebGPU OS. It builds on the existing Particle Network and keeps V1/V2 compatibility intact. The implementation is complete through the local Realm Network Alpha gates. The Raspberry Pi service is not deployed. Only the server owner performs that single physical cutover. (Source: .) Architecture Layer Responsibility Source OS ownership One owns network lifecycle; remains a compatibility adapter , Embedded endpoint One leader tab owns the backbone; resident, supernode, witness, and authority are roles on the same browser endpoint , App boundary syscalls expose feature state, contract metadata, verification, and Passport operations Protocol routing Exact versioned descriptors negotiate State Channel, chunk, carrier, and DHT traffic; unknown versions fail closed , Rollout control Versioned flags keep experimental Realm features independent while the bounded endpoint runtime is enabled by default Protocol modules Identity, Chronicle, Capsules, links, authority, branches, governance, Accord, Atlas, Gate, Shield, and publishing Public contracts Eighteen immutable V1 descriptors bind the public names to concrete implementations Rendezvous service Additive signed V3 admission, opaque rendezvous, default on authenticated State Channel SSE, optional bounded Atlas, health, and metrics , Swarm content Signed manifests drive bounded multi provider chunk fetch, per chunk verification, retry, cache, and provider announcement , Deployment Source bound receipt,","contentHash":"9833b3b7341a4d7243182c4639fdf55e2c0c94d8d26cb8e0bca809c5a4be4f41"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/realm-network.md::0001","path":"webgpu-os/realm-network.md","title":"Realm Network","description":"Architecture, contracts, security boundaries, V3 compatibility, verification, and deployment policy for the Realm Network.","kind":"guide","source":"MD/webgpu-os/realm-network.md","updated":"2026-08-02","headings":["Realm Network","Architecture","Public V1 contracts","Guarded app API","V3 selection and downgrade policy","Embedded resident and supernode roles","Discovery, health, and bounded resources","Clean-room concepts adapted from Iroh","Local verification receipt","One-shot server cutover","See also"],"chunkIndex":1,"chunkCount":3,"text":"Signed manifests drive bounded multi provider chunk fetch, per chunk verification, retry, cache, and provider announcement , Deployment Source bound receipt, checksummed archive, preflight, cutover, smoke, and rollback The Masterserver remains ephemeral. It does not store Realm identity, Chronicle, Capsules, branches, organizations, or durable Atlas data. (Source: , .) Public V1 contracts The stable registry exports these exact names: Area Contracts Identity and history , , Content and links , , , , Authority and branches , , Governance , Bounded task exchange , , Discovery and entry , Importing is inert. It creates no connection, timer, store, worker, or database. (Source: .) Guarded app API Apps use kernel syscalls instead of importing engine internals. The catalog contains metadata only; it never returns implementation functions or key handles. Contract verification requires . Feature changes and Passport mutations require . (Source: , .) Verification fails before dispatch when the contract's rollout feature is disabled. Passport operations delegate to the existing ; the Realm layer does not create a second private key store. (Source: , .) V3 selection and downgrade policy The Masterserver source and r7 deployment environment advertise V3 by default. The client first verifies the pinned signed V2 advertisement. If that valid advertisement has no V3 marker, the client selects V2. If it advertises V3, the client commits to V3 and verifies the complete V3 endpoint set, manifest, pin, and signatures. Any V3 integrity failure stops the connection and never downgrades to V2 or V1. A separate legacy V1 server entry is tried only as an availability fallback when the preferred V3/V2 entry cannot be acquired; it is not an integrity error fallback. (Source: , , , .) V3 uses for","contentHash":"41db129a0f00b7ebee4cd7d962d5eeb1e5a60180634897608f3a237a24e92e33"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/realm-network.md::0002","path":"webgpu-os/realm-network.md","title":"Realm Network","description":"Architecture, contracts, security boundaries, V3 compatibility, verification, and deployment policy for the Realm Network.","kind":"guide","source":"MD/webgpu-os/realm-network.md","updated":"2026-08-02","headings":["Realm Network","Architecture","Public V1 contracts","Guarded app API","V3 selection and downgrade policy","Embedded resident and supernode roles","Discovery, health, and bounded resources","Clean-room concepts adapted from Iroh","Local verification receipt","One-shot server cutover","See also"],"chunkIndex":2,"chunkCount":3,"text":"tried only as an availability fallback when the preferred V3/V2 entry cannot be acquired; it is not an integrity error fallback. (Source: , , , .) V3 uses for admission and session proof, plus for opaque route attachment, discovery, and directed rendezvous. A signed V3 manifest also advertises , its short lived lease endpoint, and its SSE/HTTP base URL. HPKE context uses the V3 specific domain. (Source: , , .) Embedded resident and supernode roles Every enabled WebGPU OS browser profile starts an embedded Particle node. The node owns one mesh identity and one route set. describes its availability. , , and are elected or assigned roles on the same node, not separate networks or installations. Browser locks or a renewa","contentHash":"e62d367fa4564c51203e06baf9abefe572c5e3c336cb9701f21ada6bcc844df2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-bridge/BrowserBridgeClient.md::0000","path":"webgpu-os/reference/browser-bridge/BrowserBridgeClient.md","title":"browser-bridge/BrowserBridgeClient.js","description":"","kind":"reference","source":"webgpu-os/browser-bridge/BrowserBridgeClient.js","updated":"","headings":["browser-bridge/BrowserBridgeClient.js","Classes","class BrowserBridgeClient","Functions","validateBridgeArgs(args, service = '', method = '')","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Verify END TO END bridge health. Unlike a relay only ping (which returns a false positive when the background service worker is dead/asleep), this does a real round trip to the background via a cheap, side effect free call (rules.list). Resolves within ms. Observe a newly injected extension relay after an extension reload/update. Force a fresh availability check (e.g. extension enabled after boot). Low level liveness check for relay.js ONLY (answered locally by the content script via postMessage — does NOT touch the background service worker). Used to distinguish \"relay not injected\" from \"background not responding\". Functions Constants — Singleton — shared by all syscall consumers. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"363805062d7a30e7a4a83aaa373897db4663fe1757a9092c9738460f9a294cf6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-bridge/BrowserBridgeDriver.md::0000","path":"webgpu-os/reference/browser-bridge/BrowserBridgeDriver.md","title":"browser-bridge/BrowserBridgeDriver.js","description":"","kind":"reference","source":"webgpu-os/browser-bridge/BrowserBridgeDriver.js","updated":"","headings":["browser-bridge/BrowserBridgeDriver.js","Classes","class BrowserBridgeDriver","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BrowserBridgeDriver.js — kernel level wrapper around BrowserBridgeClient. Held at kernel.browserBridge. Manages availability probing on boot, event relay to the kernel event bus, and exposes the full typed client for syscalls. Classes Method Signature Summary Re check availability on demand (the extension may have been enabled/reloaded after boot). Binds event relays the first time it becomes available. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"a695da04c5af93658fdf4cf3894e1a3fe9e8b81933e6becec31aaee23b1380eb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/adblock-content.md::0000","path":"webgpu-os/reference/browser-extension/adblock-content.md","title":"browser-extension/adblock-content.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/adblock-content.js","updated":"","headings":["browser-extension/adblock-content.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: adblock content.js — in frame cosmetic ad filtering (Layer 2). Runs in the DEFAULT (ISOLATED) world, in ALL frames, at document start. ISOLATED world is required so chrome.runtime / chrome.storage are available (the MAIN world content.js cannot reach them). Cosmetic hiding and DOM node removal only need access to the SHARED DOM, which the isolated world has. Responsibilities: Inject cosmetic CSS hiding known ad containers. Watch the DOM and remove ad/tracker <iframe /<script /<img nodes whose src targets a blocked domain (defence in depth alongside the DNR rule). Report removals to the background counter. Strictly scoped: only activates inside frames that belong to the WebGPU OS browser (top page is an OS host, or the outermost ancestor is an OS host), and only while ad blocking is enabled. Stays completely inert during the user's normal browsing. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"44f678d988201afb2669f6c5b5eafd327dd62665c2bf78e879295f072f4aec4e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/adblock-list.md::0000","path":"webgpu-os/reference/browser-extension/adblock-list.md","title":"browser-extension/adblock-list.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/adblock-list.js","updated":"","headings":["browser-extension/adblock-list.js","Functions","hostnameOf(url)","isAdDomain(url)","looksLikeAd(url)","cosmeticCss()","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: adblock list.js — shared ad/tracker blocklist for the WebGPU OS browser. SINGLE SOURCE OF TRUTH, consumed by three enforcement layers: 1. background.js → declarativeNetRequest BLOCK rules (network layer, scoped to OS tabs only — never the user's normal browsing) 2. adblock content.js → cosmetic hiding + DOM ad node removal inside OS embedded frames 3. extProxyFetch → ad tag stripping for proxied (srcdoc) pages Ported and expanded from the Playwright stealth blocker (C:\\Coding\\fail\\server\\tools\\stealth.py — ADBLOCK DOMAINS / ADBLOCK URL KEYWORDS). This is an ES module: background.js imports it directly; the content script loads it via dynamic import(chrome.runtime.getURL('adblock list.js')), which is why it is also listed under web accessible resources in the manifest. The hand curated CORE list below is augmented at runtime by an optional, build generated list (adblock domains.generated.js) produced from EasyList / EasyPrivacy via build adblock rules.py. The generated file ships empty until you run that script, so the extension always loads. Functions Lowercased hostname from a URL, or '' if unparseable. True if the URL targets a known ad/tracker domain (or a subdomain of one). Broader match incl. keyword patterns — for the cosmetic/proxy layers only. A single <style string that hides all cosmetic selectors. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d67fa9569cdb42d3db8950fbb735ad528384c54ed41ba15005a7331427903c72"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/ai-settings.md::0000","path":"webgpu-os/reference/browser-extension/ai-settings.md","title":"browser-extension/ai-settings.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/ai-settings.js","updated":"","headings":["browser-extension/ai-settings.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/background.md::0000","path":"webgpu-os/reference/browser-extension/background.md","title":"browser-extension/background.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/background.js","updated":"","headings":["browser-extension/background.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: background.js — WebGPU OS Frame Unblocker + Browser Bridge service worker. Static rules (rules.json) are the primary mechanism. Dynamic rules (updateDynamicRules) are registered as a fallback on every startup in case Chrome silently rejected the static ruleset. Browser Bridge: handles os bridge request messages routed from relay.js, delegating to the four service modules (Tabs, Injection, Navigation, Rules). Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"94434bda726749c2faa0489d265b6af17fe492aa8fe9d292698fa8d47ced853c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/content.md::0000","path":"webgpu-os/reference/browser-extension/content.md","title":"browser-extension/content.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/content.js","updated":"","headings":["browser-extension/content.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: content.js — runs in the page's MAIN world at document start. 1. Sets window. frameUnblockerActive so the OS browser app can detect the extension. 2. In sub frames (iframes): overrides window.top / window.parent / window.frameElement so frame busting scripts (e.g. DuckDuckGo: \"if (top !== self) top.location = ...\") think they are the top level page and do not navigate away. Must run in world: \"MAIN\" and all frames: true to take effect before site JS. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ce98dd4e0ad0be681b1ba12e2407a404758a8561faf4405b858b34c210b3e6df"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/offscreen.md::0000","path":"webgpu-os/reference/browser-extension/offscreen.md","title":"browser-extension/offscreen.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/offscreen.js","updated":"","headings":["browser-extension/offscreen.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/options.md::0000","path":"webgpu-os/reference/browser-extension/options.md","title":"browser-extension/options.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/options.js","updated":"","headings":["browser-extension/options.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/popup-ai.md::0000","path":"webgpu-os/reference/browser-extension/popup-ai.md","title":"browser-extension/popup-ai.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/popup-ai.js","updated":"","headings":["browser-extension/popup-ai.js","Functions","runtimeMessageSender(message)","mountSecureProviderList({ root, summary, manageButton, refreshButton, send = runtimeMessageSender, onChange = ()","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e3434feb1959334ac8ce81b4fa4d4011012e74904b8075ceab4cae1e505ce9a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/popup-size.md::0000","path":"webgpu-os/reference/browser-extension/popup-size.md","title":"browser-extension/popup-size.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/popup-size.js","updated":"","headings":["browser-extension/popup-size.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SPDX FileCopyrightText: 2026 Jake Wehmeier (BTSpaniel) <https://github.com/BTSpaniel SPDX License Identifier: LicenseRef ParticleRealms Alpha Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8db8754b45091e435ae87e7a251e3a6e59c41584e4b42c1a156da1133142bf03"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/popup.md::0000","path":"webgpu-os/reference/browser-extension/popup.md","title":"browser-extension/popup.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/popup.js","updated":"","headings":["browser-extension/popup.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/relay.md::0000","path":"webgpu-os/reference/browser-extension/relay.md","title":"browser-extension/relay.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/relay.js","updated":"","headings":["browser-extension/relay.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: relay.js — runs in the ISOLATED content script world (default). chrome.runtime IS available here (unlike world: \"MAIN\"). Acts as a bridge between the OS page (MAIN world) and the extension background. Two way channels: 1. Proxy fetch (legacy): page → os proxy request → relay → background → os proxy response → page 2. Browser Bridge requests: page → os bridge request → relay → background → os bridge response → page 3. Push events from background (nav/tab changes): background →sendMessage→ relay → os bridge event → page Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cf12b4ac47e4edd5180ad64dd66aa58522d4c71816d18418360e3da1bfa555a2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/AIProviderCatalog.md::0000","path":"webgpu-os/reference/browser-extension/services/AIProviderCatalog.md","title":"browser-extension/services/AIProviderCatalog.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/AIProviderCatalog.js","updated":"","headings":["browser-extension/services/AIProviderCatalog.js","Functions","resolveProviderDataPolicy(providerId, route = {}, { authority = 'catalog' } = {})","classifyModelFamily(providerId, modelId)","resolveModelAccess(providerId, model = {}, { authority = 'catalog' } = {})","listProviderDefinitions()","isProviderId(value)","detectProvider({ key = '', endpoint = '' } = {})","planCredentialStorage(providerId, key)","normalizeEndpoint(value, { defaultBase = '' } = {})","endpointFor(providerId, customBase = '')","isChatModel(model)","inferModelTaskAffinities(providerId, model = {})","inferModelCapabilities(providerId, model = {})","normalizeReasoningControl(model = {}, modelId = '')","normalizeSupportedParameters(model = {})","normalizeModel(providerId, raw)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared provider metadata and OpenAI compatible endpoint normalization. Keep this module free of chrome. calls so the service worker and tests can use the exact same routing and capability rules. Functions Decide whether an entered credential can be stored for the explicitly selected provider. Prefix detection is advisory only; it must never move a secret to another provider slot behind the user's back. Infer preference only task affinities from bounded catalog evidence. These hints may improve ranking, but must never authorize tools, strict output, private disclosure, or any other compatibility or security decision. Preserve the endpoint's own reasoning control surface. A single boolean cannot answer the questions a caller has to ask before touching reasoning: whether the endpoint rejects a disable ( ), whether it reasons unless told otherwise ( ), and which gateway knobs are real for it. OpenRouter reports effort levels and token budgets per model, and both are honoured for only a few families, so a caller that guesses either sends a parameter that silently does nothing or one that fails the request. is inferred from the model family because it is a training time prompt convention that no catalog reports. Preserve exact provider compatibility evidence in one deterministic shape. Some provider APIs use supported parameters while saved OS routes use supportedParameters, so merge both aliases instead of allowing one to hide the other. Values are bounded before they can enter extension storage. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"08728f997fd3c76b52261c6146ba78e46638026c2580473efe0dd7d63e38a2df"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/AIProviderService.md::0000","path":"webgpu-os/reference/browser-extension/services/AIProviderService.md","title":"browser-extension/services/AIProviderService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/AIProviderService.js","updated":"","headings":["browser-extension/services/AIProviderService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AIProviderService.js — remote LLM provider bridge for the OS AI Hub. Runs in the extension background service worker context (privileged fetch, no CORS; host permissions already grant <all urls for this extension, so no additional host permissions are needed for the built in providers). The OS page NEVER sees provider URLs, headers, or API keys — it only sends {provider, model, messages, params} and gets back {message, usage}. Keys are read via KeyVaultService.getRawKeyInternal(), which is not reachable through the bridge router (see KeyVaultService.js for why). Allowlists: providerAllowlist/pathAllowlist: AIProviderCatalog is the only set of provider ids + exact endpoint URLs ever fetched for non custom requests. originAllowlist (custom provider): CUSTOM ENDPOINTS is a user approved https only allowlist, persisted in chrome.storage.local, populated only via allowCustomEndpoint(). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"0712f2cde639721d0072d76f6581b7eb675d4ec1e372186c7bc0addfbb315064"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/AudioService.md::0000","path":"webgpu-os/reference/browser-extension/services/AudioService.md","title":"browser-extension/services/AudioService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/AudioService.js","updated":"","headings":["browser-extension/services/AudioService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioService.js — privileged tab audio bridge for WebGPU OS. Browser page audio inside the OS tab (YouTube, video sites, embedded frames) does not pass through the OS AudioDriver. Chrome extensions can control that audio by capturing the tab stream, replaying it through an offscreen AudioContext, and applying a GainNode. The OS mixer sends the effective gain here; the service worker owns tabCapture permission and the offscreen document owns Web Audio playback. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"92c7f3c2b9f5388857d518704ae7b9fd73945d5229800d6e2df7d3beb0ecf1d8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/BridgeSessionPolicy.md::0000","path":"webgpu-os/reference/browser-extension/services/BridgeSessionPolicy.md","title":"browser-extension/services/BridgeSessionPolicy.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/BridgeSessionPolicy.js","updated":"","headings":["browser-extension/services/BridgeSessionPolicy.js","Classes","class BridgeSessionPolicy","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Memory only session boundary between the isolated relay and background worker. Secrets never cross window.postMessage. A service worker restart invalidates every session and forces the still isolated relay to open a fresh one. Method Signature Summary Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5f126f9d79ec17cb1711224a240b03e9895b3226067dd5ae8c0b4213461c2e5a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/CorsService.md::0000","path":"webgpu-os/reference/browser-extension/services/CorsService.md","title":"browser-extension/services/CorsService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/CorsService.js","updated":"","headings":["browser-extension/services/CorsService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CorsService.js — per site opt in CORS/API unblocking for the OS bridge. Runs in the extension background service worker context. The blanket rule 9005 only injects on NON credentialed static assets (scripts/fonts/etc.), deliberately leaving a framed site's own credentialed /XHR/API calls untouched — a wildcard ACAO is illegal for credentialed requests and would break logins. This service lets the user OPT IN, per trusted site, to also unblock those credentialed API calls. For each enabled origin O (host H) we add session rules (tab scoped to OS tabs) that, for requests INITIATED BY that site's frames (initiatorDomains: [H]), set on the response: Access Control Allow Origin: O (echoes the page origin, not ) Access Control Allow Credentials: true Access Control Allow Methods: GET,POST,PUT,PATCH,DELETE,OPTIONS Access Control Allow Headers: Scoping by initiatorDomains keeps this correct with multiple sites open and never affects the user's normal browsing (session rules are tab scoped). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"8fc080e3dde71508591033c0a35ef12e2634e53d3558daa404fd2bbe871f1e3c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/ExtensionSenderPolicy.md::0000","path":"webgpu-os/reference/browser-extension/services/ExtensionSenderPolicy.md","title":"browser-extension/services/ExtensionSenderPolicy.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/ExtensionSenderPolicy.js","updated":"","headings":["browser-extension/services/ExtensionSenderPolicy.js","Functions","isExtensionPageSender(sender, runtimeId)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Authenticate privileged runtime messages from this extension's own pages. Extension pages opened in a popup window can have sender.tab; content scripts also have sender.tab, so ownership must be decided from the sender URL/origin rather than from tab presence alone. Functions Authenticate privileged runtime messages from this extension's own pages. Extension pages opened in a popup window can have sender.tab; content scripts also have sender.tab, so ownership must be decided from the sender URL/origin rather than from tab presence alone. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"aeecd3f61f9662de6647d6e6827bce4d8b0935b7f9cc25593b0d47b602f07de0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/InjectionService.md::0000","path":"webgpu-os/reference/browser-extension/services/InjectionService.md","title":"browser-extension/services/InjectionService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/InjectionService.js","updated":"","headings":["browser-extension/services/InjectionService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b096af760ab936b147de4fda7020d24f3d8a02372332e30196f68481f1ce6c30"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/KeyVaultService.md::0000","path":"webgpu-os/reference/browser-extension/services/KeyVaultService.md","title":"browser-extension/services/KeyVaultService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/KeyVaultService.js","updated":"","headings":["browser-extension/services/KeyVaultService.js","Classes","class KeyVaultContractError extends Error","Functions","normalizeKeyVaultEnvelope(provider, raw, { persisted = false, label = 'AI key record' } = {})","normalizeKeyVaultState(provider, raw, label = 'AI key state')","async getRawKeyInternal(provider)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: KeyVaultService.js — provider API key storage for the AI Bridge. Runs in the extension background service worker context. Keys are NEVER exposed to the OS page/bridge caller — only status booleans cross the bridge. getRawKeyInternal() remains a module only worker export. V2 binds provider and generation into AES GCM additional authenticated data. V1 encrypted envelopes and bounded legacy plaintext remain read only inputs and migrate on first use. A durable generation tombstone prevents an older persistent credential from reappearing after a session only switch or an interrupted clear. Classes Method Signature Summary Functions Internal only accessor; deliberately absent from KeyVaultService dispatch. Constants — Page/bridge facing surface — status only, never the raw key. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"f4ded479ff4366cd971ccb9c2a1267467012c244910eb36960b77940df619248"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/LivePatchRuntime.md::0000","path":"webgpu-os/reference/browser-extension/services/LivePatchRuntime.md","title":"browser-extension/services/LivePatchRuntime.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/LivePatchRuntime.js","updated":"","headings":["browser-extension/services/LivePatchRuntime.js","Functions","normalizeBrowserLivePatch(patch, tabId)","normalizeLiveInspectOptions(opts = {})","normalizeLiveApplyOptions(opts = {})","normalizeLiveHistoryOptions(opts = {})","normalizeBrowserPatchId(value)","runBrowserLivePatch(command, payload = {})","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Clean room declarative browser surface editor. This module deliberately accepts data, never JavaScript source. The exported page function is self contained so chrome.scripting can serialize it into the extension's ISOLATED world without eval, Function, or page owned callbacks. Functions Validate and reduce a kernel patch before it crosses the 64 KiB bridge. Self contained function executed by chrome.scripting in the ISOLATED world. Do not introduce references to module scope bindings here. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"98b7df458b9c3f5f81f8c2b221e2852404d0c882908861fa82399e7d866119d7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/NaviFacultyStatusService.md::0000","path":"webgpu-os/reference/browser-extension/services/NaviFacultyStatusService.md","title":"browser-extension/services/NaviFacultyStatusService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/NaviFacultyStatusService.js","updated":"","headings":["browser-extension/services/NaviFacultyStatusService.js","Classes","class NaviFacultyStatusRegistry","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Memory only projection of kernel owned Browser Semantic Faculty readiness. The Companion does not sign, verify, install, enable, or approve Faculties. It accepts a content free status only through an authenticated OS bridge session so extension owned UI can show which exact kernel package revision the OS reports as verified. A service worker restart or bridge revocation clears the projection. Classes Method Signature Summary Constants — Memory only projection of kernel owned Browser Semantic Faculty readiness. The Companion does not sign, verify, install, enable, or approve Faculties. It accepts a content free status only through an authenticated OS bridge session so extension owned UI can show which exact kernel package revision the OS reports as verified. A service worker restart or bridge revocation clears the projection. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"dc4cb75bec05e171ef9ee72e57c62128949fea2f4ad3f291cd239ff785272e4b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/NavigationService.md::0000","path":"webgpu-os/reference/browser-extension/services/NavigationService.md","title":"browser-extension/services/NavigationService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/NavigationService.js","updated":"","headings":["browser-extension/services/NavigationService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NavigationService.js — webNavigation history + OS push events. Runs in the extension background service worker context. The background registers webNavigation listeners that call NavigationService.addEvent(). The OS can poll history() or receive live push events via the os bridge event channel. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"cee53b88cc953a54d4571767588594cc9c6555c3766ecd4da1593bdcae977fb3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/OpenRouterAuthService.md::0000","path":"webgpu-os/reference/browser-extension/services/OpenRouterAuthService.md","title":"browser-extension/services/OpenRouterAuthService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/OpenRouterAuthService.js","updated":"","headings":["browser-extension/services/OpenRouterAuthService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: OpenRouterAuthService.js — extension owned OAuth PKCE sign in. The authorization code and generated API key never cross the page bridge. Only the extension credential window can start this flow, and the resulting key is immediately encrypted through KeyVaultService. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e6cb7511f2f04a0aede1fcf815cab413e1caad87bb067af2daa5f12ba5087323"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/ProviderProtocol.md::0000","path":"webgpu-os/reference/browser-extension/services/ProviderProtocol.md","title":"browser-extension/services/ProviderProtocol.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/ProviderProtocol.js","updated":"","headings":["browser-extension/services/ProviderProtocol.js","Functions","providerErrorNumber(value = {})","createProviderIncidentId()","applyProviderErrorContext(error, context = {})","validateProviderMessages(messages)","normalizeReasoningConfig(value)","providerResponseModel(value, fallback = '')","providerModelAttribution({ provider = '', requestedModel = '', responseModel = '' } = {})","normalizeProviderTools(value)","openAIProviderToolDefinitions(value)","anthropicProviderToolDefinitions(value)","canonicalProviderToolCalls(payload, providerTools = [], transport = 'provider-native')","createProviderToolStreamAccumulator(providerTools = [], transport = 'provider-native-stream')","buildOpenAICompatibleBody(spec, providerDefinition = null)","normalizeProviderRequirements(value)","normalizeOutputSchema(value)","providerError(json, status)","providerHttpError(json, status, provider = '', responseMetadata = null)","providerOutputError(code, provider, message, retryable = true, responseMetadata = null)","providerChoiceError(json, status, provider = '', responseMetadata = null)","providerResponseMetadata(response)","assertUsableProviderOutput({ message = '', reasoning = '', toolCalls = [], provider = '', strictOutput = false } = {})","providerFailureProjection(error)","visibleReasoningText(value)","openAICompatibleReasoning(message = {})","visibleMessageText(value)","safeAttachmentData(value)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Pure OpenAI compatible request/response helpers shared by the privileged extension transport and the browser direct mobile fallback. This module performs no storage, network, DOM, or chrome. work. Functions Stable public diagnosis family; never contains provider controlled text. Attach only bounded, structured clone safe diagnostic correlation fields. Normalize a provider model identifier without trusting arbitrary text. Keep the requested route separate from provider reported attribution. remains backward compatible, but modelEvidence makes an omitted or dynamic alias explicitly non concrete so callers cannot mistake a request fallback for observed provider output. Normalize the provider facing projection of locally authoritative OS tools. These definitions help a model form typed calls; they never grant execution authority, which remains with the descriptor hash, graph validator, and ToolRouter after the provider response returns. Convert completed native provider calls into one provider neutral batch. Accumulate provider tool call stream fragments without executing partial arguments. ID/name conflicts and malformed mixed batches fail atomically. Construct the only provider originated Error shape allowed to cross the AI bridge. Endpoint URLs, headers, response bodies, request content, and keys are deliberately excluded. Retryability is asserted only for unambiguous transient HTTP classes; every other status remains unclassified so the Navi broker can apply its own fail closed policy. Return a bounded structured clone safe view of an AI provider failure. Constants — Pure OpenAI compatible request/response helpers shared by the privileged extension transport and the browser","contentHash":"0d0132fb95410cd01f40e0cfd07ccf185ec2cb391ab7e53b66c28ac94f223843"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/ProviderProtocol.md::0001","path":"webgpu-os/reference/browser-extension/services/ProviderProtocol.md","title":"browser-extension/services/ProviderProtocol.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/ProviderProtocol.js","updated":"","headings":["browser-extension/services/ProviderProtocol.js","Functions","providerErrorNumber(value = {})","createProviderIncidentId()","applyProviderErrorContext(error, context = {})","validateProviderMessages(messages)","normalizeReasoningConfig(value)","providerResponseModel(value, fallback = '')","providerModelAttribution({ provider = '', requestedModel = '', responseModel = '' } = {})","normalizeProviderTools(value)","openAIProviderToolDefinitions(value)","anthropicProviderToolDefinitions(value)","canonicalProviderToolCalls(payload, providerTools = [], transport = 'provider-native')","createProviderToolStreamAccumulator(providerTools = [], transport = 'provider-native-stream')","buildOpenAICompatibleBody(spec, providerDefinition = null)","normalizeProviderRequirements(value)","normalizeOutputSchema(value)","providerError(json, status)","providerHttpError(json, status, provider = '', responseMetadata = null)","providerOutputError(code, provider, message, retryable = true, responseMetadata = null)","providerChoiceError(json, status, provider = '', responseMetadata = null)","providerResponseMetadata(response)","assertUsableProviderOutput({ message = '', reasoning = '', toolCalls = [], provider = '', strictOutput = false } = {})","providerFailureProjection(error)","visibleReasoningText(value)","openAICompatibleReasoning(message = {})","visibleMessageText(value)","safeAttachmentData(value)","Constants","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"safe view of an AI provider failure. Constants — Pure OpenAI compatible request/response helpers shared by the privileged extension transport and the browser direct mobile fallback. This module performs no storage, network, DOM, or chrome. work. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"208b7b10f912064f88a1a7e7d90fd698ea0e1b841331d250a561d89a5c480d9d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/ResidentService.md::0000","path":"webgpu-os/reference/browser-extension/services/ResidentService.md","title":"browser-extension/services/ResidentService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/ResidentService.js","updated":"","headings":["browser-extension/services/ResidentService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ResidentService.js — manages the resident SecureMesh node (offscreen document). Exposed via the bridge router (service name ) so the trusted OS page can query/toggle it, and via dedicated messages for the popup. Keeps an offscreen document alive (MV3's persistent WebRTC capable context) using a chrome.alarms keep alive that respawns the service worker to re ensure the doc exists. Privacy: this only ever stores the PUBLIC cert bundle the OS page pushes (pub key, name, room) — never the identity private key. It is OFF by default and fully user controlled. Real background mesh reachability is NOT attempted here (keep an OS tab open for that); this is a lightweight cert vault + keepalive responder. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"37a71b3dc8713bee46a6649e63192c75c4bd3c08214c0b693bddad63813263a9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/RuleService.md::0000","path":"webgpu-os/reference/browser-extension/services/RuleService.md","title":"browser-extension/services/RuleService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/RuleService.js","updated":"","headings":["browser-extension/services/RuleService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RuleService.js — declarativeNetRequest dynamic rule manager for the OS bridge. Runs in the extension background service worker context. User added rules use IDs = 50000 to avoid colliding with the built in frame unblock rules (IDs 100 102). Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d48745f2679ee1ce2b51669aa934d07c33857c1d8dd2a0b48d941b640582a05f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/SemanticAutomationRuntime.md::0000","path":"webgpu-os/reference/browser-extension/services/SemanticAutomationRuntime.md","title":"browser-extension/services/SemanticAutomationRuntime.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/SemanticAutomationRuntime.js","updated":"","headings":["browser-extension/services/SemanticAutomationRuntime.js","Functions","normalizeBrowserSemanticRequest(request = {})","runBrowserSemanticAction(request)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Validate and compact one AI Echo browser semantic request before it crosses the extension boundary. Unknown fields fail closed so the protocol cannot silently grow into a generic page execution channel. Packaged Chrome scripting entry point. This function is intentionally self contained because chrome.scripting serializes the function body into the target tab; it cannot close over extension service worker state. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"4c07000d4026683e364ded5d08c44f770222312537552f83fe8233dbaf5ce21f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/TabService.md::0000","path":"webgpu-os/reference/browser-extension/services/TabService.md","title":"browser-extension/services/TabService.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/TabService.js","updated":"","headings":["browser-extension/services/TabService.js","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TabService.js — chrome.tabs wrapper for the OS bridge. Runs in the extension background service worker context. Constants — TabService.js — chrome.tabs wrapper for the OS bridge. Runs in the extension background service worker context. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"3c72db6ba32265c1a620c28a8ed50a6ba101909cce7444ec3ffd7b07ebd1069f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/TrustedOsOriginPolicy.md::0000","path":"webgpu-os/reference/browser-extension/services/TrustedOsOriginPolicy.md","title":"browser-extension/services/TrustedOsOriginPolicy.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/TrustedOsOriginPolicy.js","updated":"","headings":["browser-extension/services/TrustedOsOriginPolicy.js","Functions","isTrustedOsOrigin(value)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Exact OS origins trusted with privileged browser bridge authority. Functions Constants — Exact OS origins trusted with privileged browser bridge authority. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"09da2b9e1e25a04c8cfb46b479533a2440426f7bb9fa0c29dac464ed22a6cf55"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/browser-extension/services/WebMCPBridgeRuntime.md::0000","path":"webgpu-os/reference/browser-extension/services/WebMCPBridgeRuntime.md","title":"browser-extension/services/WebMCPBridgeRuntime.js","description":"","kind":"reference","source":"webgpu-os/browser-extension/services/WebMCPBridgeRuntime.js","updated":"","headings":["browser-extension/services/WebMCPBridgeRuntime.js","Functions","normalizeBrowserWebMCPRequest(request = {})","async runBrowserWebMCPAction(request)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WebMCPBridgeRuntime.js clean room, versioned adapter between AI Echo and the browser's evolving WebMCP surface. Page owned metadata and results are always untrusted. The extension never exposes callbacks, Window objects, or credentials across the OS bridge. Functions Validate one bridge request before any page script is dispatched. Packaged Chrome scripting entry point. It deliberately feature detects the origin trial API, because WebMCP is still a Community Group draft and the browser execution helper is not yet part of the portable specification. Constants — WebMCPBridgeRuntime.js clean room, versioned adapter between AI Echo and the browser's evolving WebMCP surface. Page owned metadata and results are always untrusted. The extension never exposes callbacks, Window objects, or credentials across the OS bridge. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"e657e151971456e272446348df416311599c4394d3e2a18696027cd560b230ce"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/AudioDriver.md::0000","path":"webgpu-os/reference/drivers/AudioDriver.md","title":"drivers/AudioDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/AudioDriver.js","updated":"","headings":["drivers/AudioDriver.js","Classes","class AudioDriver","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AudioDriver.js — the OS audio server (kernel service). Provides system wide audio output routing, a per app volume mixer, output device switching, OS level media transport (navigator.mediaSession), and opt in spatial (window position) panning. Mirrors the kernel service pattern of AmbientEngine / ThemeEngine: created in KernelBootstrap, exposed via createAudioSyscalls() in Syscalls.js, guarded per app in guardSyscalls(). ── Two routing models ────────────────────────────────────────────────────────── 1. Shared context routing (true central mix): apps hand the driver an <audio /<video element (attachElement) or an AudioNode built in the OS context (context() + attachNode). The driver builds: source → sessionGain → analyser → stereoPanner → masterGain → destination(setSinkId) 2. Cooperative sessions: apps that keep their own AudioContext register with an onVolume(effective, muted) / onPan(pan) callback. The driver cannot touch their nodes, so it calls the callback whenever the user changes master/app volume, mute, or pan, and the app applies it to its own graph. Everything no ops safely before the first user gesture (autoplay policy) and on browsers without setSinkId / mediaSession. ── Events ────────────────────────────────────────────────────────────────────── kernel.events.emit('os:audio change', { type }) // 'sessions' 'master' 'devices' 'spatial' Classes Method Signature Summary Desktop calls this to let the driver locate a window for spatial panning. Lazily create the shared context + master chain. Returns the context or null. Returns the shared AudioContext (creating it if needed). For app node routing. Register a controllable audio source. Ensure a session's shared context","contentHash":"9159f2d1805f199293524bfef3ef3ba2c8887454ed84d160413d29aa32a7e8f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/AudioDriver.md::0001","path":"webgpu-os/reference/drivers/AudioDriver.md","title":"drivers/AudioDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/AudioDriver.js","updated":"","headings":["drivers/AudioDriver.js","Classes","class AudioDriver","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"or null. Returns the shared AudioContext (creating it if needed). For app node routing. Register a controllable audio source. Ensure a session's shared context node chain exists; returns its input GainNode. Route an <audio /<video element through a session (shared context mixing). Route an arbitrary AudioNode (built in the OS context) through a session. RMS output level (0..1) for a shared context session, else 0. Invoke a transport action on a session ('play' 'pause' 'next' 'prev' 'seek'). Most recently updated session that has playback metadata. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1be7d207215cc6fccbf116ea0d1f87041fb9b1d3a0e626256f187b191565c458"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/CryptoDriver.md::0000","path":"webgpu-os/reference/drivers/CryptoDriver.md","title":"drivers/CryptoDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/CryptoDriver.js","updated":"","headings":["drivers/CryptoDriver.js","Classes","class CryptoDriver","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CryptoDriver.js — OS level cryptographic identity driver. Wraps CollabIdentity (ECDSA P 256) and exposes a simple API: Persistent key pair stored in IndexedDB (survives page reload) Same fingerprint = same user across sessions sign(data) → ECDSA signature bytes verify(pubKeyRaw, data, sig) → boolean publicKeyRaw / fingerprint → identity Used by: kernel/Syscalls.js → syscalls.crypto. chat room → signed messages (tamper evident + authenticated) future game systems → anti cheat signed receipts, session proofs Classes Method Signature Summary Initialise — loads or generates the persistent ECDSA P 256 identity. True if SubtleCrypto is available and the identity was created successfully. True if the key pair will survive page reload (IndexedDB). 65 byte raw ECDSA P 256 public key. 16 hex char SHA 256 fingerprint of the public key. Sign a string with ECDSA P 256. Verify an ECDSA P 256 signature. Compute a 16 char fingerprint from any raw public key. Useful for displaying who sent a signed message. Sign raw bytes with ECDSA P 256. Counterpart to sign() for binary payloads. Verify an ECDSA P 256 signature over raw bytes. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually","contentHash":"f21259c40214e4942bef60e7a2c6394487d6b89c4c0ce34e76b385954378dc61"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/CryptoDriver.md::0001","path":"webgpu-os/reference/drivers/CryptoDriver.md","title":"drivers/CryptoDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/CryptoDriver.js","updated":"","headings":["drivers/CryptoDriver.js","Classes","class CryptoDriver","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"1be647adf1a7acc163343a4b5e100dd3c4042aea274aecfebfbd1706d5707601"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/EmbeddedParticleNode.md::0000","path":"webgpu-os/reference/drivers/EmbeddedParticleNode.md","title":"drivers/EmbeddedParticleNode.js","description":"","kind":"reference","source":"webgpu-os/drivers/EmbeddedParticleNode.js","updated":"","headings":["drivers/EmbeddedParticleNode.js","Classes","class EmbeddedParticleNode","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes One embedded Particle node per browser profile. Resident availability and temporary supernode/witness roles are facets of this same node identity. Method Signature Summary <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"793f07d8b23f8992c17da5a9b26999897d2a870883431fa8cb2dbfccce32590b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/NetDriver.md::0000","path":"webgpu-os/reference/drivers/NetDriver.md","title":"drivers/NetDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/NetDriver.js","updated":"","headings":["drivers/NetDriver.js","Classes","class NetDriver","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NetDriver.js — Phase 5 network driver for WebGPU OS. Tiered transport (fastest wins): Tier 1 — BroadcastChannel (same origin tabs, <1ms, always available) Tier 2 — WebRTC full mesh via CollabCore + pinned Particle V2 signaling (cross machine). BitTorrent remains an explicit, off by default hard fallback. Public API (mirrored by kernel/Syscalls.js net namespace): connect(roomId, opts) — join a named room disconnect() — leave current room send(channel, data) — broadcast to all peers sendTo(peerId, channel, data) — unicast to specific peer on(channel, cb) — subscribe to incoming channel messages off(channel, cb) — unsubscribe peers() — list connected peers { id, transport } isConnected() — true if at least one peer stats() — transport statistics selfId — this peer's UUID Classes Method Signature Summary Current room id (null when disconnected). Used by mesh sync packet scoping. Join a named room. Starts BroadcastChannel fast channel immediately. Optionally starts WebRTC mesh if opts.webrtc === true. Leave the current room and tear down all transports. Broadcast a message to all peers on a named channel. Send a message to a specific peer. Subscribe to incoming messages on a channel. Unsubscribe from a channel. Dispatch a message received out of band (e.g. via an app layer supernode relay) to LOCAL listeners only — it is NOT re broadcast to the mesh. Used so relayed, already encrypted payloads are handled exactly like directly received ones. Force an immediate discovery re announce on the WebRTC signaling tiers so a known peer can be found without waiting for the periodic announce cycle. No op when WebRTC isn't active (BroadcastChannel peers are always live). List all currently","contentHash":"9357905181f05415dc9440b592f269894c27bcc0cfd708b7dfb233f4ba5c037e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/NetDriver.md::0001","path":"webgpu-os/reference/drivers/NetDriver.md","title":"drivers/NetDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/NetDriver.js","updated":"","headings":["drivers/NetDriver.js","Classes","class NetDriver","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"peer can be found without waiting for the periodic announce cycle. No op when WebRTC isn't active (BroadcastChannel peers are always live). List all currently connected peers. Transport statistics. Destroy the driver entirely (called by KernelBootstrap on shutdown). <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"5dd04d348f89d0c1dfd58e9c622a7fb2b012ca55259affc30ac9a52f8fb13a83"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/NetworkDriver.md::0000","path":"webgpu-os/reference/drivers/NetworkDriver.md","title":"drivers/NetworkDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/NetworkDriver.js","updated":"","headings":["drivers/NetworkDriver.js","Classes","class NetworkDriver","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: drivers/NetworkDriver.js — kernel driver backing / / (network plan Phase 6 webgpu os wiring, previously deferred — see C:\\Users\\btspa\\.windsurf\\plans\\particle network layer 2bf6f0.md). Thin glue only: delegates to engine/network's already complete client side modules (identity, routes/MasterServerList, the shared pinned ParticleNetworkDaemon, syncManager, workstation) and reads/writes the SAME localStorage backed config already uses ( / ), so any app calling these syscalls sees the exact same state the Control Panel shows — one source of truth, not a second copy. Security model (see kernel/RuleGraph.js): / are low risk status/config visibility; actually opens a Masterserver session and can attach/signal on routes (declaration gated, high risk); changes what syncs where (medium risk). Every live session method requires to have been called first for that url — apps cannot attach/signal/discover on a session they never opened, even though the underlying WebSocket may be SHARED with other OS features via the V2 daemon registry (or the V1 registry only for explicit compatibility endpoints). Classes Method Signature Summary Load/generate the OS's profile + device identity signers. Safe to call multiple times. Compatibility adapter for the legacy namespace. Read only public contract inventory. No implementation functions escape. Verify or validate an app supplied record through an explicit allowlist. The concrete descriptor and its methods never cross the syscall boundary. Register a signed, currently valid authority lease for Navi semantic replication. This is a kernel/Realm runtime hook, not an app syscall. The issuing key must directly control both the issuer ID and Realm ID. Revoke","contentHash":"25ea99d2cab3ec6c23a9b48025e93e657903e2f19bc4490761f47f582c14aea8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/NetworkDriver.md::0001","path":"webgpu-os/reference/drivers/NetworkDriver.md","title":"drivers/NetworkDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/NetworkDriver.js","updated":"","headings":["drivers/NetworkDriver.js","Classes","class NetworkDriver","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":3,"text":"semantic replication. This is a kernel/Realm runtime hook, not an app syscall. The issuing key must directly control both the issuer ID and Realm ID. Revoke a currently registered Navi replication authority lease. Verify an exact Navi replication target against the live fenced lease and monotonic per resource sequence head. No lease is minted by this method. Open (or reuse) a real WebRTC mesh session for a route. Requires init() to have completed. Acquire a scoped consumer lease. App/room sessions stay cold until the first lease and close after the final release plus a short idle grace. Create a signed app scoped authority election using this device identity. Unified, secret free identity, route, protocol, and reachability projection. Foreground only public mesh presence. The browser owns the WebRTC transports, so closing/discarding this OS tab always ends the node. Send one application message over the route's direct peer channel. Broadcast one application message to the connected mesh neighbors. Subscribe to otherwise unclaimed route messages. Send one chunk's fragments to a peer over an open mesh session. / come from a Manifest.js chunk entry. Verify, cache, and advertise a chunk this live browser endpoint can serve. Fetch and assemble a signed manifest using verified chunks from many peers. Low level: relay an already built CarrierPacket (see CarrierPacket.js/SealedPacket.js) to a specific next hop. High level: build a multi hop sealed onion packet addressed to (in order) and send it to the first hop, using ECDH keys this node has already learned via CarrierIdentity announces. Rejects if any hop hasn't announced a key yet (they must be a currently joined mesh peer — see listCarrierRecipients). peerIds currently joined to this mesh session that have announced a","contentHash":"1133296ca2b28e7bb993d0407cd414522e78b6f78789d1169c0f902ec75f0d90"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/NetworkDriver.md::0002","path":"webgpu-os/reference/drivers/NetworkDriver.md","title":"drivers/NetworkDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/NetworkDriver.js","updated":"","headings":["drivers/NetworkDriver.js","Classes","class NetworkDriver","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":2,"chunkCount":3,"text":"a key yet (they must be a currently joined mesh peer — see listCarrierRecipients). peerIds currently joined to this mesh session that have announced a carrier recipient key (i.e. can be used as an onion hop). Query every registered endpoint discovery source concurrently. Verify and retain a signed reconnect ticket for unified discovery. Create the standard authenticated SSE lease source for a connected V3 route. Push the current shared workstation over an already connected, already attached route. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss cal","contentHash":"9824c5649712734c121d9da06ff25fa99514ec8ccefd7ab2948fbd82ea1609ae"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/NetworkPersistence.md::0000","path":"webgpu-os/reference/drivers/NetworkPersistence.md","title":"drivers/NetworkPersistence.js","description":"","kind":"reference","source":"webgpu-os/drivers/NetworkPersistence.js","updated":"","headings":["drivers/NetworkPersistence.js","Functions","async saveGroupLedger(sandbox, ledger)","async loadGroupLedger(sandbox, groupId)","async listSavedGroupIds(sandbox)","async deleteGroupLedger(sandbox, groupId)","async savePeerTickets(sandbox, store)","async loadPeerTickets(sandbox)","async saveStateChannelCheckpoint(sandbox, channelId, checkpoint)","async loadStateChannelCheckpoint(sandbox, channelId)","async listSavedStateChannelIds(sandbox)","async deleteStateChannelCheckpoint(sandbox, channelId)","async saveStateChannelOutbox(sandbox, channelId, intents, maxEntries = 512)","async loadStateChannelOutbox(sandbox, channelId)","createStateChannelCheckpointStore(sandbox)","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: drivers/NetworkPersistence.js — OS integration persistence for engine/network's intentionally storage agnostic modules (network plan §15/§38 persistence gap: \"EventLog is in memory only\" / \"PeerTicketStore is in memory only... callers are responsible for persisting\"). engine/network never imports webgpu os/storage/AppSandbox.js (same layering rule as drivers/ResidentBootstrapSource.js) — this file is the glue that reads/writes an AppSandbox instance using the snapshot/hydrate/ replay functions those modules already expose: engine/network/groupLedger/GroupLedger.js: replayGroupLedger() engine/network/peerTickets/PeerTicketStore.js: snapshotPeerTicketStore()/hydratePeerTicketStore() AppSandbox encrypts everything at rest (AES 256 GCM, device+app bound key) and is isolated per appId (webgpu os/storage/AppSandbox.js) — callers should pass the sandbox of THE APP THAT OWNS THIS DATA (e.g. a future groups/chat app), not some shared \"network\" pseudo app, so the sandbox's per app isolation guarantee stays meaningful. Functions Persist a group ledger's full replayable state: its static config (groupId/founders/mode/threshold) plus . Cheap to call after every / — it's a full snapshot, not an incremental diff, so there's nothing to get out of sync. Parameters: (object) — an initialized webgpu os/storage/AppSandbox.js instance (object) — from engine/network/groupLedger/GroupLedger.js's createGroupLedger() Load and replay a previously saved group ledger. Returns: a live ledger, or null if nothing is saved for groupId groupIds this sandbox currently has a saved ledger for. Forget a saved group ledger. Does not affect any already live in memory ledger object. Persist a peer ticket store (full","contentHash":"5031629dc1dfa0e69e93f44ccc06c55ffa13a094d08721ce58d7eec8a53ca25f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/NetworkPersistence.md::0001","path":"webgpu-os/reference/drivers/NetworkPersistence.md","title":"drivers/NetworkPersistence.js","description":"","kind":"reference","source":"webgpu-os/drivers/NetworkPersistence.js","updated":"","headings":["drivers/NetworkPersistence.js","Functions","async saveGroupLedger(sandbox, ledger)","async loadGroupLedger(sandbox, groupId)","async listSavedGroupIds(sandbox)","async deleteGroupLedger(sandbox, groupId)","async savePeerTickets(sandbox, store)","async loadPeerTickets(sandbox)","async saveStateChannelCheckpoint(sandbox, channelId, checkpoint)","async loadStateChannelCheckpoint(sandbox, channelId)","async listSavedStateChannelIds(sandbox)","async deleteStateChannelCheckpoint(sandbox, channelId)","async saveStateChannelOutbox(sandbox, channelId, intents, maxEntries = 512)","async loadStateChannelOutbox(sandbox, channelId)","createStateChannelCheckpointStore(sandbox)","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"currently has a saved ledger for. Forget a saved group ledger. Does not affect any already live in memory ledger object. Persist a peer ticket store (full snapshot — see PeerTicketStore.js's snapshotPeerTicketStore). Load a previously saved peer ticket store, or a fresh empty one if none is saved. Persist one complete, fenced State Channel authority checkpoint. Bounded pending intents survive tab reload until a receipt is observed. Adapter consumed by StateChannelAuthorityCoordinator. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"886f4ea1c7744aac392671e565ea3375c885feedb7e54e546f4c34794cc4c5d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/ProfileDriver.md::0000","path":"webgpu-os/reference/drivers/ProfileDriver.md","title":"drivers/ProfileDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/ProfileDriver.js","updated":"","headings":["drivers/ProfileDriver.js","Classes","class ProfileSchemaVersionError extends Error","class ProfileDriver","Functions","assertSupportedProfileSchemaVersion(value, { allowMissing = true, label = 'profile record' } = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProfileDriver.js — OS level multi user profile + per profile identity. SecureMesh Phase 1. Lawful, user owned identity: profile = OS created account + per profile ECDSA P 256 keypair + random (hashed) install id + user held recovery code. Privacy rules baked in: NO hardware/browser fingerprinting feeds identity. is a SHA 256 of a RANDOM, user resettable install id (never the raw id, never any device characteristics). The private key is NEVER stored raw. The working signing key is held as a NON EXTRACTABLE WebCrypto key (cannot be exfiltrated). A separate copy is stored encrypted (AES GCM, PBKDF2 from recovery code) purely for user triggered export / portability. Storage: IndexedDB store (CryptoKey objects are structured cloneable); active profile id + random install id live in the generic store. This driver is additive — the legacy global CryptoDriver identity is left untouched. Apps opt into per user identity via . Classes Method Signature Summary Method Signature Summary Return a snapshot signer for the active or specifically stored Passport. Create a new OS user profile with a fresh ECDSA P 256 identity. Generate a keypair + non extractable working key + recovery wrapped copy. Import a profile bundle; needs the recovery code to unlock the private key. Rotate a Passport key while preserving its stable ID and signed lineage. The legacy method name remains for syscall/UI compatibility. Terminally revoke a Passport key without erasing its ownership history. Regenerate the random install id — re derives every profile's device hash. Functions Reject records from a newer writer before normalization can discard fields. Missing versions are accepted as the legacy v1 shape and migrated","contentHash":"8258fd54933c35fa667400660f9a993e360d4b462f0f0ccd8eb027ee962447c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/ProfileDriver.md::0001","path":"webgpu-os/reference/drivers/ProfileDriver.md","title":"drivers/ProfileDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/ProfileDriver.js","updated":"","headings":["drivers/ProfileDriver.js","Classes","class ProfileSchemaVersionError extends Error","class ProfileDriver","Functions","assertSupportedProfileSchemaVersion(value, { allowMissing = true, label = 'profile record' } = {})","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"hash. Functions Reject records from a newer writer before normalization can discard fields. Missing versions are accepted as the legacy v1 shape and migrated explicitly. Constants <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6dd47ee4e4ffe0e16b184365cb6cbb2ab44f500b822f506837a2faa5a22103b6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/RealmNetworkFeatureFlags.md::0000","path":"webgpu-os/reference/drivers/RealmNetworkFeatureFlags.md","title":"drivers/RealmNetworkFeatureFlags.js","description":"","kind":"reference","source":"webgpu-os/drivers/RealmNetworkFeatureFlags.js","updated":"","headings":["drivers/RealmNetworkFeatureFlags.js","Classes","class RealmNetworkFeatureFlags","Functions","createRealmNetworkFeatureFlags(options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Persisted rollout gates for the additive Realm Network upgrade. Realm Network Alpha ships with every completed slice active. Version 2 stores only explicit user overrides, so later default changes cannot erase a deliberate opt out. Callers may inject a storage compatible object in tests; the driver uses localStorage in the OS. Classes Method Signature Summary Functions Constants — Persisted rollout gates for the additive Realm Network upgrade. Realm Network Alpha ships with every completed slice active. Version 2 stores only explicit user overrides, so later default changes cannot erase a deliberate opt out. Callers may inject a storage compatible object in tests; the driver uses localStorage in the OS. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large","contentHash":"3e30d75f67a35f3c1a285bb8539ff3c72d351a98c86e7f6df89022f60f8c1cb8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/RealmNetworkFeatureFlags.md::0001","path":"webgpu-os/reference/drivers/RealmNetworkFeatureFlags.md","title":"drivers/RealmNetworkFeatureFlags.js","description":"","kind":"reference","source":"webgpu-os/drivers/RealmNetworkFeatureFlags.js","updated":"","headings":["drivers/RealmNetworkFeatureFlags.js","Classes","class RealmNetworkFeatureFlags","Functions","createRealmNetworkFeatureFlags(options)","Constants","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"b0dd3b689a96fc3d0df1750c6545f6cd64d3634fe9470a0bb198831511db8025"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/ResidentBootstrapSource.md::0000","path":"webgpu-os/reference/drivers/ResidentBootstrapSource.md","title":"drivers/ResidentBootstrapSource.js","description":"","kind":"reference","source":"webgpu-os/drivers/ResidentBootstrapSource.js","updated":"","headings":["drivers/ResidentBootstrapSource.js","Functions","createResidentBootstrapSource({ browserBridge } = {})","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: drivers/ResidentBootstrapSource.js — OS integration adapter wiring the browser extension's resident cert vault (browser extension/services/ ResidentService.js) into engine/network/dht/BootstrapSource.js's interface (network plan §37/§47/§48). intentionally has no dependency (same layering rule as the deferred wiring — see BootstrapSource.js's header comment) — this file is the OS side glue the plan called out as the natural adapter, kept honest about what the resident node actually does today: The resident node is a lightweight, OFF BY DEFAULT cert vault + a chrome.alarms keepalive heartbeat living in an MV3 offscreen document. It does NOT run a real WebRTC/Masterserver client and does NOT answer DISCOVER while no OS tab is open (see ResidentService.js's own header comment). Do not oversell this as \"background reachability\" anywhere in the UI (network plan §42's \"never overstate privacy/reachability\"). What it DOES give a bootstrap attempt: a small piece of persisted memory that survives an OS tab closing — \"the last identity this browser saved for room X\" — which is a legitimate (if modest) bootstrap hint once a new tab reopens, and a place to advertise our current identity so it's still there next time. Functions Parameters: (object) — No description in source JSDoc. (object) — the shared BrowserBridgeClient singleton Returns: a BootstrapSource ({ id, scan, advertise }) <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native","contentHash":"c0a9ab20c335ed7c1ccd04d35c7dec6bc8908399c5c74873d694d5bdff86ad19"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/ResidentBootstrapSource.md::0001","path":"webgpu-os/reference/drivers/ResidentBootstrapSource.md","title":"drivers/ResidentBootstrapSource.js","description":"","kind":"reference","source":"webgpu-os/drivers/ResidentBootstrapSource.js","updated":"","headings":["drivers/ResidentBootstrapSource.js","Functions","createResidentBootstrapSource({ browserBridge } = {})","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"6b9bf898a99984660570701565eb4a4d84206a52d2f3026ed216766a1b24217f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/WebSurfaceDriver.md::0000","path":"webgpu-os/reference/drivers/WebSurfaceDriver.md","title":"drivers/WebSurfaceDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/WebSurfaceDriver.js","updated":"","headings":["drivers/WebSurfaceDriver.js","Classes","class WebSurfaceDriver","Notes & Examples","Shared GPU device"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WebSurfaceDriver.js — Render any cross origin website as a live WebGPU texture. ── How it works ───────────────────────────────────────────────────────────── 1. Creates an <iframe that loads the target URL (browser renders it normally) 2. User clicks \"Share Tab\" once via getDisplayMedia({ preferCurrentTab: true }) 3. Element Capture API restricts the stream to just the iframe's pixels 4. HTMLVideoElement.srcObject = stream → live video feed of the website 5. device.importExternalTexture({ source: videoEl }) → WebGPU texture every frame Result: any cross origin URL renders as a live GPU texture surface inside the OS. ── Browser support ─────────────────────────────────────────────────────────── getDisplayMedia: all major browsers Element Capture: Chrome 116+ (RestrictionTarget.fromElement) importExternalTexture: Chrome/Edge (WebGPU) ── Security model ──────────────────────────────────────────────────────────── User must approve screen share once (one time gesture, can be re used) iframe is sandboxed; cross origin website cannot access our JS We only get pixels, not DOM of the foreign page Mouse/keyboard relay is optional (events forwarded to iframe element) Classes Method Signature Summary Feature detection. Create a new web surface for a URL. Returns a WebSurface object with a .texture getter usable each frame. Request screen share permission (one time user gesture). Call this in response to a user click. After approval all surfaces attach automatically. Destroy a surface by ID. Relay a pointer event from the WebGPU panel UV coords to the iframe. Destroy the driver — releases all surfaces and stops capture. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems","contentHash":"233c68988f215e3934647d609f363452637cbe4da5acc5df19f55cfafdcdf4f7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/drivers/WebSurfaceDriver.md::0001","path":"webgpu-os/reference/drivers/WebSurfaceDriver.md","title":"drivers/WebSurfaceDriver.js","description":"","kind":"reference","source":"webgpu-os/drivers/WebSurfaceDriver.js","updated":"","headings":["drivers/WebSurfaceDriver.js","Classes","class WebSurfaceDriver","Notes & Examples","Shared GPU device"],"chunkIndex":1,"chunkCount":2,"text":"UV coords to the iframe. Destroy the driver — releases all surfaces and stops capture. <! HUMAN NOTES Notes & Examples Shared GPU device Engine subsystems should reuse the cached wrapper returned by . The wrapper owns the native , its queue, granted features, limits, and device loss callbacks. Resources created by one native device cannot be used by another, so pass the shared wrapper or native device into each subsystem that needs GPU access. Example: Acquire the shared engine device Request a feature only when the application cannot run without it. automatically requests the engine's supported optional feature set, while reports the features actually granted to the device. Feature and limit checks Device loss Gotchas: First acquisition defines requirements: caches the wrapper. Supply mandatory features and limits on the first call. Native access: use and when a subsystem needs WebGPU primitives. Recovery: this module reports device loss but does not expose an in place API. Re bootstrap all device owned resources together. Limits: check the granted before large allocations. (Source: ) See also: GPU Device Sharing · Virtual GPU · GpuFormats","contentHash":"45e7fcc03d3a009764abad4cb750c38ed8ec661af372fceb187d2db7b83ff8b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/AmbientEngine.md::0000","path":"webgpu-os/reference/kernel/AmbientEngine.md","title":"kernel/AmbientEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/AmbientEngine.js","updated":"","headings":["kernel/AmbientEngine.js","Classes","class AmbientEngine","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AmbientEngine.js — Desktop background rendering service. Owns a fixed full screen DOM layer (z index: 10) that sits permanently behind every panel and shell element. Supports CSS gradients, solid colors, static images, video, and extensible driver plug ins registered by mods. Exposes the same before/after hook middleware pattern as ThemeEngine so mods can intercept and customize background changes. ThemeEngine drives this automatically via setFromTheme() when the accent or wallpaper preset changes. Mods (or the user) can bypass ThemeEngine entirely with apply() for fully custom backgrounds. ── Modder API ──────────────────────────────────────────────────────────── const amb = syscalls.ambient; // Register a totally custom renderer (canvas, WebGPU, Three.js …) amb.registerDriver('webgpu scene', { apply(layer, config) { layer.innerHTML = ''; const canvas = document.createElement('canvas'); canvas.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;'; layer.appendChild(canvas); // … render into canvas … }, destroy(layer) { layer.innerHTML = ''; } }); // Before hook — middleware: modify config before the layer receives it amb.before('my mod', (cfg, next) = next({ ...cfg, opacity: 0.7 }), 'Dim'); // After hook — react after background is applied amb.after('my mod', (cfg) = console.log('Ambient applied:', cfg)); // Apply custom backgrounds amb.apply({ type: 'css', value: 'linear gradient(135deg, ff0080, 7928ca)' }); amb.apply({ type: 'color', value: ' 1a0533' }); amb.apply({ type: 'image', src: '/bg.jpg', size: 'cover', position: 'center' }); amb.apply({ type: 'video', src: '/bg.mp4', bg: ' 000' }); amb.apply({ type: 'webgpu scene', ... }); // custom driver // Set opacity","contentHash":"fbd372f47d1af8b5735f6b6de5ee4de3029f779f2c7b1756f61ae9fedc74031f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/AmbientEngine.md::0001","path":"webgpu-os/reference/kernel/AmbientEngine.md","title":"kernel/AmbientEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/AmbientEngine.js","updated":"","headings":["kernel/AmbientEngine.js","Classes","class AmbientEngine","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"position: 'center' }); amb.apply({ type: 'video', src: '/bg.mp4', bg: ' 000' }); amb.apply({ type: 'webgpu scene', ... }); // custom driver // Set opacity of the ambient layer (0–1) amb.setOpacity(0.85); // Export / import config JSON const json = amb.export(); amb.import(json); // Subscribe to changes kernel.events.on('os:ambient change', ({ config }) = { … }); Classes Method Signature Summary Insert the ambient layer into the document. Call once after Desktop mounts. Restore the persisted ambient config on boot. Preview: push a config to the layer immediately. No hooks, no save, no event — safe for live dragging/hover previews. Apply: full pipeline — before hooks → layer → save → after hooks → event. Called by ThemeEngine whenever the accent or wallpaper preset changes. Bypasses the hook chain — ThemeEngine owns the state here. Set the global opacity of the ambient layer (0 = invisible, 1 = full). Enable/disable the reactive FX overlay (FxBus). Suspend compute heavy custom backgrounds while foreground GPU work runs. React to a FxBus frame: paint a soft accent glow on the FX overlay whose intensity tracks the frame's energy. Never touches the wallpaper layer. Fade the FX overlay back to neutral. Register a custom driver for a new wallpaper type. driver = { apply(layer, config), destroy?(layer) } Inject CSS keyframe rules for animated backgrounds. Tear down the currently active custom driver, if any. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS","contentHash":"a8e5bfc0f56186c07bde5a7e7f0bd24022ea59c4952bd8f96aa44e74d4386e30"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/AmbientEngine.md::0002","path":"webgpu-os/reference/kernel/AmbientEngine.md","title":"kernel/AmbientEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/AmbientEngine.js","updated":"","headings":["kernel/AmbientEngine.js","Classes","class AmbientEngine","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d07d036d3c1bcde7cf50bb559b8e06affcb5e4954736b85e221dfd6d605c3d8d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/AppRegistrationScope.md::0000","path":"webgpu-os/reference/kernel/AppRegistrationScope.md","title":"kernel/AppRegistrationScope.js","description":"","kind":"reference","source":"webgpu-os/kernel/AppRegistrationScope.js","updated":"","headings":["kernel/AppRegistrationScope.js","Functions","scopeToolSyscalls(kernel, appId, raw = kernel?.syscalls?.tools)","scopeProtocolSyscalls(kernel, appId, raw = kernel?.syscalls?.protocol)","scopeCommandSyscalls(kernel, appId, raw = kernel?.syscalls?.cmd)","cleanupAppRegistrations(kernel, appId, { logger = console } = {})","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Authenticated app wrappers for registration bearing syscall namespaces. Identity binding is independent of permission enforcement mode: developer mode may relax capability checks, but it never relaxes ownership. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"eddfa5fcebb499a9239bd2640a3b0d41e0418aa4526d0251f0ec4be1893a3a02"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/AppRegistry.md::0000","path":"webgpu-os/reference/kernel/AppRegistry.md","title":"kernel/AppRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/AppRegistry.js","updated":"","headings":["kernel/AppRegistry.js","Classes","class AppManifestValidationError extends Error","class AppRegistry","Functions","validateAppManifest(manifest, { mode = APPMANIFESTVALIDATION.STRICT, registry = schemaRegistry, logger = console, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AppRegistry.js — fully dynamic, fetch based app discovery. NO apps are hardcoded here. Discovery works as follows: 1. Fetch apps/index.json → array of folder names, e.g. [\"calculator\",\"notepad\",…] 2. For each folder, fetch apps/<folder /manifest.json 3. Resolve manifest.entry against the manifest URL (absolute URL) 4. Register and emit 'change' so the shell re renders live To add a new app: create apps/<name /manifest.json + apps/<name /YourApp.js, then add \"<name \" to apps/index.json. No JS edits required. Manifest shape (see docs/APP MANIFEST SPEC.md): appId, name, entry, icon, category, surface, defaultWidth, defaultHeight, permissions, description, version, settings[] Classes Method Signature Summary Method Signature Summary Compiled in entry module for an app (bundled builds), or undefined. Scan apps/index.json, fetch each manifest, register all found apps. Safe to call multiple times — re scans and merges. Register an app whose entry module is already compiled into the bundle. The module namespace is stored on the manifest (manifest. module) so the shell mounts it directly instead of import() ing a URL. Re fetch a single app's manifest (e.g. after hot reload). Remove a registered app (e.g. uninstalled). Apps that declare a specific capability (what they PROVIDE). Apps that require a specific permission. Full map of capability → app manifests that provide it. Apps that should be auto mounted at boot (tray/background surface or autoMount flag). Search apps by name, description, keywords, or capability. Summary report: for each app, list its declared permissions and provided capabilities. True if an app with this appId is registered. Source priority for an appId: bundled=3,","contentHash":"d7b5de6cc5aa7080d8a98c5c27a554c8e464ca6e8c2539ba51471f63076128a5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/AppRegistry.md::0001","path":"webgpu-os/reference/kernel/AppRegistry.md","title":"kernel/AppRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/AppRegistry.js","updated":"","headings":["kernel/AppRegistry.js","Classes","class AppManifestValidationError extends Error","class AppRegistry","Functions","validateAppManifest(manifest, { mode = APPMANIFESTVALIDATION.STRICT, registry = schemaRegistry, logger = console, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"for each app, list its declared permissions and provided capabilities. True if an app with this appId is registered. Source priority for an appId: bundled=3, package=2, raw=1, unknown=0. Find the best app that provides a capability. Sorted: highest source priority first, then alphabetically by appId. Register an app from an external source (e.g. PackageManager after install). source: 'package' (priority 2) 'raw' (priority 1) Silently skips if a higher priority source already owns this appId. Returns true if registered, false if skipped. Incrementally discover additional app folders without clearing existing registrations. Safe to call after PackageManager installs a new app — already registered higher priority apps are automatically skipped by priority dedup in loadManifest. Subscribe to registry events: 'register', 'update', 'unregister', 'ready'. Functions Validate an authority bearing manifest after removing registry only fields. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"66cc7ed130d99a72b0f06b3f6e2b2fcc2f256136be30e12f38d4442229691b1e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/CommandBus.md::0000","path":"webgpu-os/reference/kernel/CommandBus.md","title":"kernel/CommandBus.js","description":"","kind":"reference","source":"webgpu-os/kernel/CommandBus.js","updated":"","headings":["kernel/CommandBus.js","Classes","class CommandBus","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CommandBus.js — OS wide addressable command registry. Every syscall namespace, app, and service can register handlers for dot namespaced command strings: pkg.install patch.apply gpu.profile.start browser.tabs.list Dispatch flow: caller → cmd.dispatch('pkg.install', { url }) → handler → result All dispatches are logged to /os/logs/commands.log (async, non blocking). Usage: kernel.cmd.register('pkg.install', async ({ url }, ctx) = { ... }); const result = await kernel.cmd.dispatch('pkg.install', { url: '...' }); Classes CommandBus.js — OS wide addressable command registry. Every syscall namespace, app, and service can register handlers for dot namespaced command strings: pkg.install patch.apply gpu.profile.start browser.tabs.list Dispatch flow: caller → cmd.dispatch('pkg.install', { url }) → handler → result All dispatches are logged to /os/logs/commands.log (async, non blocking). Usage: kernel.cmd.register('pkg.install', async ({ url }, ctx) = { ... }); const result = await kernel.cmd.dispatch('pkg.install', { url: '...' }); Method Signature Summary Register a command handler. Register an app owned command. The authenticated owner is stored outside caller controlled metadata and may replace only its own existing entry. Register multiple commands from a { command: handler } object. Returns a single function that unregisters all of them. Register a command alias. Unregister a command. Remove a command only when it belongs to the authenticated caller. Remove every command owned by one authenticated app. Unregister ALL commands registered with a given tag (e.g. all of an app's commands). Check if a command is registered (including wildcard fallback). Resolve a command to its","contentHash":"2d1fa7cfdf16add7aa1b15ba6699d3dd59a28867b507f680e9090e7626f4d1f5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/CommandBus.md::0001","path":"webgpu-os/reference/kernel/CommandBus.md","title":"kernel/CommandBus.js","description":"","kind":"reference","source":"webgpu-os/kernel/CommandBus.js","updated":"","headings":["kernel/CommandBus.js","Classes","class CommandBus","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"commands registered with a given tag (e.g. all of an app's commands). Check if a command is registered (including wildcard fallback). Resolve a command to its registered key. Order: exact → alias → namespace wildcards (pkg.install → pkg. → ) Dispatch a command. Returns the handler's result. Dispatch without throwing — returns { ok, result, error }. List all registered commands with metadata. List commands matching a prefix (e.g. 'pkg'). List all registered aliases as { alias, canonical } pairs. Last N dispatch records (default 50). Optionally filter by command name or caller appId. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"216ba3cd838240b7c0825146918f26b0ca785f19ca1ebb4893f2b94953ec7076"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/FxBus.md::0000","path":"webgpu-os/reference/kernel/FxBus.md","title":"kernel/FxBus.js","description":"","kind":"reference","source":"webgpu-os/kernel/FxBus.js","updated":"","headings":["kernel/FxBus.js","Classes","class FxBus","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FxBus.js — the OS \"FX Bridge\". A normalized pipeline that lets apps (and the OS itself) publish a lightweight \"vibe\" — a dominant accent color, optional palette, an energy level, and an optional beat/mood — which the desktop reacts to (ambient tint/pulse, accent glow) and which external sinks (WLED / Home Assistant / Hue via a relay) can later subscribe to. Producers: Explicit: an app calls (capability ). Sandboxed iframe guests call , routed over the existing postMessage RPC bridge. Automatic: samples a provided surface (canvas/img/video) and extracts the dominant color, so an app can drive effects with no code. Consumers subscribe to the kernel event . The built in consumer is AmbientEngine.fxTint(); more sinks can be added without touching producers. Frames are normalized and rate limited (coalesced to one emit per minInterval) so a chatty producer cannot flood the desktop or thrash the compositor. Classes Method Signature Summary Subscribe the built in desktop sink (ambient tint). Safe to call once. Publish an FX frame from (may be null for OS/anonymous sources). Last frame for an app, or the last emitted frame overall when appId omitted. Subscribe to emitted frames. Returns an unsubscribe fn. Set a provider that returns the surface to sample — an HTMLCanvasElement, <img , <video , or null. The shell can point this at the focused app's canvas. (Cross origin / sandboxed guest canvases are unreadable by design; those guests publish explicitly instead.) Begin sampling the provider surface every and publishing its vibe. Extract a vibe (dominant accent + small palette + energy) from a drawable source. Returns null on failure (e.g. a cross origin tainted canvas). <! HUMAN NOTES","contentHash":"00750cb5055b0658f89d9daea283b79c528acdf800a009bcb04dc93ae3aee06a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/FxBus.md::0001","path":"webgpu-os/reference/kernel/FxBus.md","title":"kernel/FxBus.js","description":"","kind":"reference","source":"webgpu-os/kernel/FxBus.js","updated":"","headings":["kernel/FxBus.js","Classes","class FxBus","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"Extract a vibe (dominant accent + small palette + energy) from a drawable source. Returns null on failure (e.g. a cross origin tainted canvas). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"7a4d7e6b0775b64dc076424fb07c73122d2da333441446049365848891812c93"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/GpuDeviceBroker.md::0000","path":"webgpu-os/reference/kernel/GpuDeviceBroker.md","title":"kernel/GpuDeviceBroker.js","description":"","kind":"reference","source":"webgpu-os/kernel/GpuDeviceBroker.js","updated":"","headings":["kernel/GpuDeviceBroker.js","Classes","class GpuDeviceBroker","Functions","bucketLimits(limits)","bucketAdapterInfo(info)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GpuDeviceBroker.js — per app GPU device facades, quotas, and adapter redaction. WHY a facade and not a Proxy of the real GPUDevice? Host objects with internal slots (GPUDevice/GPUQueue) fail brand checks when a Proxy is handed back to other WebGPU APIs (notably ). So we hand apps a forwarding facade : a plain object that forwards to the real device and ALWAYS returns real host objects (real GPUBuffer/GPUTexture/encoder/queue). The only host API that consumes the device object itself is — untrusted apps should get their canvas via (configured by the OS with the REAL device), so they never need to pass the facade anywhere. If an untrusted app does configure a canvas itself with the facade it fails closed (safe). POLICY: trusted / built in apps receive the RAW device (zero compatibility risk). Untrusted (unverified) apps receive a facade that: tracks + quota checks every createBuffer / createTexture (via VRAMTracker), counts pipelines / shader modules / queue submits per app, enforces a command submit budget (anti runaway), partitions the shader module cache per app (no cross app cache sharing), fails closed after device loss until the broker re issues a fresh facade. Classes Method Signature Summary True when a real GPU device is present. Get the device object an app should use. Invalidate all facades (called on device loss). Apps must re acquire. Drop one app's facade + accounting (call on app close). Functions Bucket GPUSupportedLimits into a coarse, plain object. Reduces fingerprint entropy (exact limits vary per GPU/driver) while keeping values usable. Returns a plain object with the same keys apps read. Redact a rich adapter info report down to a coarse, low entropy summary","contentHash":"ebe5ef0f6f40cf10153e736c36738e5a3c025df77d3f6097bf504173fd05fe5a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/GpuDeviceBroker.md::0001","path":"webgpu-os/reference/kernel/GpuDeviceBroker.md","title":"kernel/GpuDeviceBroker.js","description":"","kind":"reference","source":"webgpu-os/kernel/GpuDeviceBroker.js","updated":"","headings":["kernel/GpuDeviceBroker.js","Classes","class GpuDeviceBroker","Functions","bucketLimits(limits)","bucketAdapterInfo(info)","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"while keeping values usable. Returns a plain object with the same keys apps read. Redact a rich adapter info report down to a coarse, low entropy summary for untrusted apps. Keeps the vendor bucket and capability booleans; drops the precise renderer string, driver version, device id, and exact limits. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a0d2dfc0ca67310fbec1f2456e474cb83faa1fad9ab94aec93ccc3f8231efd04"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/GpuInfo.md::0000","path":"webgpu-os/reference/kernel/GpuInfo.md","title":"kernel/GpuInfo.js","description":"","kind":"reference","source":"webgpu-os/kernel/GpuInfo.js","updated":"","headings":["kernel/GpuInfo.js","Functions","vendorBucket(info)","friendlyAdapterName(info)","async gatherGpuInfo(adapter, device = null, options = {})","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GpuInfo.js — rich, consolidated GPU adapter reporting for the OS. Browsers expose the GPU through several uneven channels; the most accurate picture comes from combining them (this mirrors what the engine's VGPUMemoryTracker / GPU Profiler do, minus the heavy VRAM probe): 1. WebGPU → vendor / architecture / device / description 2. → same, legacy async fallback 3. → some implementations expose it here 4. WebGL → the UNMASKED renderer string is usually the only place the real model name (e.g. \"AMD Radeon RX 6700 XT\") appears, since Chrome hides it from adapter.info. 5. / → capability flags + key device limits returns ONE structured report plus best effort adapter preference probes. Everything is best effort and never throws — missing channels just leave their fields empty. Functions Coarse vendor label from any descriptive string. Best human readable adapter name from the combined channels. Gather a full GPU report from a WebGPU adapter (+ optional device). Parameters: (GPUAdapter null) — No description in source JSDoc. (GPUDevice null) — No description in source JSDoc. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"b37738b7844beabf0c1c05fc7d1b7bec8ea6c08bc9719ebaccfcdb06836a2059"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/KernelBootstrap.md::0000","path":"webgpu-os/reference/kernel/KernelBootstrap.md","title":"kernel/KernelBootstrap.js","description":"","kind":"reference","source":"webgpu-os/kernel/KernelBootstrap.js","updated":"","headings":["kernel/KernelBootstrap.js","Classes","class KernelBootstrap","class KernelEventBus","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes KernelBootstrap — the OS kernel layer. Owns: The single shared WebGPU device (if available). The central task scheduler (kernel owned RAF). The event bus. GPU device lost fan out to all registered apps. The syscall surface exposed to apps. Tier 2 note: In Tier 2 this becomes a Rust native host service; the kernel.syscalls shape must remain stable across tiers. Method Signature Summary Factory — initialise and return a ready kernel. Provision the one OS owned executable Faculty that applications may ask the kernel to install automatically. The public gateway deliberately accepts only the exact active Navi and exact built in Faculty identity. Execute one planner selected tool through an installed deterministic Faculty. This is deliberately kernel internal: apps receive the narrow naviFaculty gateway and cannot prepare, mint, consume, or settle grants. Re open the immutable Faculty receipt before projecting learning evidence. A successful looking provider or tool result is never sufficient: the exact runtime descriptor, verifier profile, Navi, task, operation, and signed receipt must all agree with the authoritative Faculty Store. Mirror a terminal continuity outcome onto every dependent Navi service. pins all dependents to synchronously, but they are only re bound after continuity publishes. If the rebind ends before that point, those services keep a transient state that nothing will ever resolve: the authority recovery net refuses to run while continuity is unavailable, so every later request waits out its full transient budget and then fails on a state that cannot change.","contentHash":"eb54d68b88ed939fc26cb570774d1361c58b1d15e0e7ca05559ddd8dfd434207"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/KernelBootstrap.md::0001","path":"webgpu-os/reference/kernel/KernelBootstrap.md","title":"kernel/KernelBootstrap.js","description":"","kind":"reference","source":"webgpu-os/kernel/KernelBootstrap.js","updated":"","headings":["kernel/KernelBootstrap.js","Classes","class KernelBootstrap","class KernelEventBus","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"net refuses to run while continuity is unavailable, so every later request waits out its full transient budget and then fails on a state that cannot change. Publishing the same terminal state keeps the dependents honest and lets callers fail fast with an actionable reason. This is only for outcomes with no follow up bind. A pre change boundary is deliberately left transient because its committing Profile event will bind the next operator. Install always on Navi services after the operator ProfileDriver is ready. Engine Compatibility runtime — boots compat wrapped guest apps (HTML/WebGPU packages) through a probe→heal→interpose→run pipeline. Exposed as , the syscall, and (the fallback used by auto generated package bootloader entries). Build the capability bridge handed to a sandboxed (iframe) compat guest. Exposes ONLY scoped storage + mediated network — no kernel/syscall access. storage → per app encrypted AppSandbox (os.sandbox.<appId ), localStorage keys namespaced 'ls:'. Persists across sessions; purge clears it. net → host origin fetch gated by the app's network.fetch permission; a denied app simply has no network. Responses are serialised. Snapshot the OS theme tokens a guest can adopt (read from live CSS vars). Register a per frame tick callback. Returns an unregister function. Stop the kernel RAF loop and drain network/manifestation authority before all lower authority. Current smoothed FPS. Current frame count. Built in, always on unified search providers (work even when their app is closed): • calc — evaluate a math expression typed into the palette • files — fuzzy search the virtual filesystem and open the hit in Files Open Files focused on a VFS entry (deep link via the subsurface nav pipeline). Call after the desktop shell has mounted to the DOM. Mounts the","contentHash":"69eced557eba3524df59e6e068e5ef1e88c7e52b95ca6560d07689e553ea028f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/KernelBootstrap.md::0002","path":"webgpu-os/reference/kernel/KernelBootstrap.md","title":"kernel/KernelBootstrap.js","description":"","kind":"reference","source":"webgpu-os/kernel/KernelBootstrap.js","updated":"","headings":["kernel/KernelBootstrap.js","Classes","class KernelBootstrap","class KernelEventBus","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"the hit in Files Open Files focused on a VFS entry (deep link via the subsurface nav pipeline). Call after the desktop shell has mounted to the DOM. Mounts the PermissionPortal and attaches it to the kernel permissions layer. Create a ctx object with verified kernel level trust. Pass to commandBus.dispatch() from trusted kernel subsystems that need full capability access. Minimal synchronous event bus for kernel internal use. Apps should use kernel.syscalls.ipc for cross app messaging. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based","contentHash":"57599686567033480aa3356d04d76d2ac867e7b01fe136de87269d01baf7d2f2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/LaunchCoordinator.md::0000","path":"webgpu-os/reference/kernel/LaunchCoordinator.md","title":"kernel/LaunchCoordinator.js","description":"","kind":"reference","source":"webgpu-os/kernel/LaunchCoordinator.js","updated":"","headings":["kernel/LaunchCoordinator.js","Classes","class LaunchCoordinator","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Route validated launch intents through the existing desktop and subsurface services. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a5302f25655323e0c425161918409ccfefe0fc646abe45cc0854eefeac219bd6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/LaunchIntent.md::0000","path":"webgpu-os/reference/kernel/LaunchIntent.md","title":"kernel/LaunchIntent.js","description":"","kind":"reference","source":"webgpu-os/kernel/LaunchIntent.js","updated":"","headings":["kernel/LaunchIntent.js","Classes","class LaunchIntentError extends Error","Functions","parseLaunchUrl(input, { baseUrl = globalThis.location?.href ?? 'https://localhost/webgpu-os/', scopePath = DEFAULTLAUNCHSCOPE, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Canonical, untrusted input boundary for browser and operating system launches. Classes Method Signature Summary Functions Parse a canonical launch URL. Non launch URLs inside the shell return null; malformed URLs under /open/ throw so callers can log a security rejection. Constants — Canonical, untrusted input boundary for browser and operating system launches. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8ad1f321d27ac6e4392c8e7747eec9062f8239314a0959a44ceded809d08b935"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ModRegistry.md::0000","path":"webgpu-os/reference/kernel/ModRegistry.md","title":"kernel/ModRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/ModRegistry.js","updated":"","headings":["kernel/ModRegistry.js","Classes","class ModRegistry","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ModRegistry.js — dynamic mod discovery, mirroring AppRegistry. Scans mods/index.json → per mod mods/<folder /manifest.json Imports the mod entry and registers its hooks into PatchBus. Mod manifest shape: modId — unique reverse domain id, e.g. \"com.example.dark plus\" name — display name version — semver string author — author name description — one line description targets — array of appIds to patch, or [\" \"] for all apps entry — relative path to mod JS module (default export = mod object) entryOverride — boolean, if true this mod completely replaces the app entry enabled — boolean (default true), false to disable without removing Adding a new mod: 1. Create mods/<name /manifest.json 2. Create mods/<name /YourMod.js (default export: mod object) 3. Add \"<name \" to mods/index.json No kernel or app code changes required. Classes Method Signature Summary Register a mod whose entry module is already compiled into the bundle. Register a mod that was installed as a (its entry module was loaded from OPFS by PackageManager/PackageLoader). Wires it into PatchBus like a dev tree mod. Idempotent per modId. Unregister a mod (e.g. on package removal). Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"364cfc689555ed2773496fd598b88830c92e3a512a5a0d9f58bfa5fd50ad3b1e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/OsLogger.md::0000","path":"webgpu-os/reference/kernel/OsLogger.md","title":"kernel/OsLogger.js","description":"","kind":"reference","source":"webgpu-os/kernel/OsLogger.js","updated":"","headings":["kernel/OsLogger.js","Classes","class OsLogger","Functions","projectLogMetadata(value)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: OsLogger.js — in memory ring buffer logger for the OS kernel and apps. Levels: debug < info < warn < error Keeps the last MAX ENTRIES entries in memory. Listeners (e.g. Log Viewer) are notified on each write. Optionally flushes to /os/logs/os.log via StorageManager (non blocking). Classes Method Signature Summary Return last entries, optionally filtered by level/source. Subscribe to new log entries. Returns unsubscribe fn. Functions Produce an accessor free, bounded, closed projection for a log entry. Unknown fields and nested objects are omitted instead of serialized. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d33a95837c979924a6decd67a2eb03cbfc33aaa6b5e16c0b7bcb933fa943206a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/PatchBus.md::0000","path":"webgpu-os/reference/kernel/PatchBus.md","title":"kernel/PatchBus.js","description":"","kind":"reference","source":"webgpu-os/kernel/PatchBus.js","updated":"","headings":["kernel/PatchBus.js","Classes","class PatchBus","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PatchBus.js — Android style mod / patch bus for WebGPU OS. Provides: beforeMount / afterMount / beforeUnmount / afterUnmount hooks UI injection — mods append DOM into any app panel CSS injection — scoped to the app's panel element automatically Manifest patch — mods can widen panels, add permissions, change defaults Entry override — a mod can fully replace an app's module Syscall intercept — middleware chain on any syscall namespace.method Hook execution order: mods registered first run first (FIFO per phase). Syscall interceptors are chained: each calls next() to delegate down. ── Mod object API (default export from mod entry file) ───────────────────── beforeMount(container, syscalls, manifest) → void Promise afterMount(container, syscalls, appInstance, manifest) → void Promise beforeUnmount(appInstance, manifest) → void Promise afterUnmount(manifest) → void Promise injectUI(container, manifest) → HTMLElement null injectCSS(manifest) → string null patchManifest(manifest) → Partial<Manifest interceptSyscall(syscallPath, args, next) → any None of these are required — implement only what you need. Classes PatchBus.js — Android style mod / patch bus for WebGPU OS. Provides: beforeMount / afterMount / beforeUnmount / afterUnmount hooks UI injection — mods append DOM into any app panel CSS injection — scoped to the app's panel element automatically Manifest patch — mods can widen panels, add permissions, change defaults Entry override — a mod can fully replace an app's module Syscall intercept — middleware chain on any syscall namespace.method Hook execution order: mods registered first run first (FIFO per phase). Syscall interceptors are chained: each calls next() to delegate down.","contentHash":"77f62595085c6e58a6a638529c5015240eec7fed9cdde37bbb6726f881f853c6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/PatchBus.md::0001","path":"webgpu-os/reference/kernel/PatchBus.md","title":"kernel/PatchBus.js","description":"","kind":"reference","source":"webgpu-os/kernel/PatchBus.js","updated":"","headings":["kernel/PatchBus.js","Classes","class PatchBus","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"namespace.method Hook execution order: mods registered first run first (FIFO per phase). Syscall interceptors are chained: each calls next() to delegate down. ── Mod object API (default export from mod entry file) ───────────────────── beforeMount(container, syscalls, manifest) → void Promise afterMount(container, syscalls, appInstance, manifest) → void Promise beforeUnmount(appInstance, manifest) → void Promise afterUnmount(manifest) → void Promise injectUI(container, manifest) → HTMLElement null injectCSS(manifest) → string null patchManifest(manifest) → Partial<Manifest interceptSyscall(syscallPath, args, next) → any None of these are required — implement only what you need. Method Signature Summary Register a mod object against one or more app IDs. Merge all manifest patches from applicable mods. Mods returning a patch object get deep merged in registration order. If any mod declares { entryOverride: true }, the LAST such mod's own replaces the app's entry (like forking the app). Wrap a syscalls object with a middleware chain for all registered interceptors targeting this app. Interceptor signature: (syscallPath, args, next) = result Call next(args) to pass through to the next interceptor / original. Each mod's injectUI(container, manifest) may return an HTMLElement which is appended as an overlay into the app's container. Each mod's injectCSS(manifest) returns a CSS string. It is scoped to the panel via [data panel id=\"...\"] automatically. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example:","contentHash":"b02b57c4be6884100beabf91aea66c0d4bb72dfd8829852312bf4a0e442f71ec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/PatchBus.md::0002","path":"webgpu-os/reference/kernel/PatchBus.md","title":"kernel/PatchBus.js","description":"","kind":"reference","source":"webgpu-os/kernel/PatchBus.js","updated":"","headings":["kernel/PatchBus.js","Classes","class PatchBus","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bf9878fff450dad3b0da2e75f1cbddf338dd18f76da63257b16802b0d451161b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/PermissionPortal.md::0000","path":"webgpu-os/reference/kernel/PermissionPortal.md","title":"kernel/PermissionPortal.js","description":"","kind":"reference","source":"webgpu-os/kernel/PermissionPortal.js","updated":"","headings":["kernel/PermissionPortal.js","Classes","class PermissionPortal","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PermissionPortal.js — user facing permission prompt. Appears as a stacked card above the taskbar whenever an app requests a capability that is not yet decided. Multiple requests queue and show one at a time (FIFO). Each card: ┌──────────────────────────────────────┐ │ 🔒 os.my app wants permission │ │ Access camera │ │ Risk: ● High │ │ [Deny] [Allow Once] [Allow Always] │ └──────────────────────────────────────┘ Usage (kernel internal — apps call syscalls.permissions.request()): const portal = new PermissionPortal(); portal.mount(document.body); const granted = await portal.ask(appId, capability, manifest); Classes Method Signature Summary Ask the user for permission. Returns Promise<boolean . If the same capability is already in the queue, returns a new promise that resolves to the same answer. Queue depth — for debugging <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a93c2d02dc44bbd2b1a64e3571f6edf28643b4d2816f8bfba37e2ca54a5305d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/PermissionStore.md::0000","path":"webgpu-os/reference/kernel/PermissionStore.md","title":"kernel/PermissionStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/PermissionStore.js","updated":"","headings":["kernel/PermissionStore.js","Classes","class PermissionStore","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PermissionStore.js — IDB backed persistence of user permission decisions. Decisions are keyed as in the 'permissions' IDB store. Each record: { appId, capability, decision: 'allow' 'deny', scope: 'once' 'always', ts } 'once' decisions are in memory only (not persisted). 'always' decisions are stored and reloaded on next boot. Classes PermissionStore.js — IDB backed persistence of user permission decisions. Decisions are keyed as in the 'permissions' IDB store. Each record: { appId, capability, decision: 'allow' 'deny', scope: 'once' 'always', ts } 'once' decisions are in memory only (not persisted). 'always' decisions are stored and reloaded on next boot. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"ae042ce922fa77ce11621fb0de410a9d90a7186b1c37541576f718740cc33917"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/Permissions.md::0000","path":"webgpu-os/reference/kernel/Permissions.md","title":"kernel/Permissions.js","description":"","kind":"reference","source":"webgpu-os/kernel/Permissions.js","updated":"","headings":["kernel/Permissions.js","Classes","class Permissions","class PermissionDeniedError extends Error","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Permissions.js — capability gating backed by RuleGraph. Phase 4: enforces manifest declared permissions via a declarative RuleGraph. Phase 1 mode: audit only (log violations, never block) — set enforcing=false. Tier 2: delegates to WASI capability broker (same check() interface). Usage: kernel.permissions.registerApp(appId, manifest) kernel.permissions.check(appId, 'gpu.compute') → { granted, reason } kernel.permissions.require(appId, 'gpu.compute') → throws if denied + enforcing Classes Method Signature Summary Register an app manifest so condition based rules can read its permissions. Call this as each app is discovered by AppRegistry. Check whether appId can use capability. Check and throw if denied + enforcing mode is on. Safe to call inside syscall handlers. List all capabilities granted to an app (from the known vocabulary). check() without side effects — no audit log, no console output. Access the underlying RuleGraph to add project specific rules. Attach a PermissionPortal (set by kernel after shell mounts). Without a portal, requestAsync() auto denies unknown capabilities. Attach a PermissionStore (set by kernel at boot after IDB is ready). Attach a StorageManager so grant/revoke decisions are mirrored to /user/preferences/permissions.json as a human readable, non authoritative projection. Authority is changed only through the Permissions service. Load persisted decisions from IDB into overrides. Call this once at boot after setStore(). Async version of check(). If the decision is already known (manifest rule OR saved override), resolves immediately. Otherwise, shows the PermissionPortal to ask the user. 'Allow Always' persists to IDB; 'Allow Once' / 'Deny' stay in","contentHash":"55734a1ac3442536a111272f4311a2f8319d243d23a20a992affceb2d3ac1574"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/Permissions.md::0001","path":"webgpu-os/reference/kernel/Permissions.md","title":"kernel/Permissions.js","description":"","kind":"reference","source":"webgpu-os/kernel/Permissions.js","updated":"","headings":["kernel/Permissions.js","Classes","class Permissions","class PermissionDeniedError extends Error","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"OR saved override), resolves immediately. Otherwise, shows the PermissionPortal to ask the user. 'Allow Always' persists to IDB; 'Allow Once' / 'Deny' stay in memory. Forget a persisted decision (and remove in memory override). Forget all saved decisions for an app. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"cc2418cd5ad54ddb4846b2c0edb2118d856590cecd4b779fab5db7ddf0265a9a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ProcessTable.md::0000","path":"webgpu-os/reference/kernel/ProcessTable.md","title":"kernel/ProcessTable.js","description":"","kind":"reference","source":"webgpu-os/kernel/ProcessTable.js","updated":"","headings":["kernel/ProcessTable.js","Classes","class ProcessTable","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProcessTable.js — tracks all running app panel instances. Each entry maps an appId to its runtime handle: { appId, panelId, manifestPath, panel, resources, startedAt, parentAppId, cpuMs, memoryBytes, networkBytes, diskBytes, lastSampleAt } Phase 4 extends this with per app VRAM quotas, capability sets, and \"destroy on policy breach\" enforcement. Phase 5 adds full system monitoring (CPU%, memory, network I/O, disk I/O). Classes Method Signature Summary Start periodic sampling of process metrics Stop sampling (for cleanup) Sample CPU, memory, network, disk for all processes Estimate CPU usage based on panel activity ( RAF calls, event handlers ) Estimate memory usage (DOM nodes approx size + JS heap share) Get network stats from kernel network tracker Get disk stats from kernel storage tracker Record network activity for an app (called by network layer) Record disk activity for an app (called by storage layer) Get system wide statistics Register a running app. Unregister and clean up a running app. Get process tree with parent child relationships Returns the entry for an app, or null. Returns true if the app is running. Returns an array snapshot of all running app entries. Returns live process handles for trusted shell internals. is intentionally sanitized for syscalls, tools, and UI data views. Window management code needs the live panel handle, so it must opt into this method instead of assuming contains DOMPanel references. Subscribe to register/unregister events. Returns an unsubscribe fn. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes","contentHash":"d9bdcd68501518f792dc15057c8d7eef60a970da11df36b2811cc8f8a7efc39a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ProcessTable.md::0001","path":"webgpu-os/reference/kernel/ProcessTable.md","title":"kernel/ProcessTable.js","description":"","kind":"reference","source":"webgpu-os/kernel/ProcessTable.js","updated":"","headings":["kernel/ProcessTable.js","Classes","class ProcessTable","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"cbef7eacb1900d35ab6fa78cfad4072e39f82b41b68fc4b2e2a8c50c87ca3afa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ProvenanceChecker.md::0000","path":"webgpu-os/reference/kernel/ProvenanceChecker.md","title":"kernel/ProvenanceChecker.js","description":"","kind":"reference","source":"webgpu-os/kernel/ProvenanceChecker.js","updated":"","headings":["kernel/ProvenanceChecker.js","Classes","class ProvenanceChecker","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProvenanceChecker.js — SLSA inspired build provenance validation. Signatures prove WHO built a package; provenance proves HOW. The 2026 TanStack attack shipped packages with valid signatures from a hijacked builder, so we validate a provenance block and (critically) that the declared source materials actually match the packaged files. Provenance block shape (in the envelope): { sourceRef: 'git@… <commit ' 'webgpu os/devtools', builderId: 'webgpu os/devtools' 'ci/github', builtAt: ISO timestamp, buildParams:{ … }, materials: [ { path: 'files/app.js', sha256: '…' }, … ] } Returns a verdict { ok, level, builderId, warnings[] }: level 0 — no provenance (allowed, but lowers trust → risk badge) level 1 — provenance present + materials match packaged files level 2 — level 1 AND builder is a recognized trusted builder Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8c4662eb81a9e68d30ff782f39737bb7f88a0b5146e06b2de9b1b8f422a7e19e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/RuleGraph.md::0000","path":"webgpu-os/reference/kernel/RuleGraph.md","title":"kernel/RuleGraph.js","description":"","kind":"reference","source":"webgpu-os/kernel/RuleGraph.js","updated":"","headings":["kernel/RuleGraph.js","Classes","class RuleGraph","Functions","buildDefaultRuleGraph()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RuleGraph.js — declarative capability based permissions engine. Rules are evaluated in registration order; the LAST matching rule wins (CSS like specificity — more specific rules override general ones). Capabilities follow a dot namespace convention: fs.read, fs.write, gpu.compute, gpu.acquireSurface, net.send, net.on, ai.infer, ui.notify, ipc.emit, … Wildcard matching: 'fs. ' matches any capability starting with 'fs.' ' ' matches everything Condition functions receive (appId, capability, manifest) and return bool. A rule with a condition is only applied when the condition is true. Usage: const graph = new RuleGraph() .allow('fs. ') .deny('net. ') .allowIf('gpu.compute', (id, cap, mf) = mf.permissions?.includes('gpu.compute')); const { granted, reason } = graph.check('os.calculator', 'fs.read', manifest); Classes RuleGraph.js — declarative capability based permissions engine. Rules are evaluated in registration order; the LAST matching rule wins (CSS like specificity — more specific rules override general ones). Capabilities follow a dot namespace convention: fs.read, fs.write, gpu.compute, gpu.acquireSurface, net.send, net.on, ai.infer, ui.notify, ipc.emit, … Wildcard matching: 'fs. ' matches any capability starting with 'fs.' ' ' matches everything Condition functions receive (appId, capability, manifest) and return bool. A rule with a condition is only applied when the condition is true. Usage: const graph = new RuleGraph() .allow('fs. ') .deny('net. ') .allowIf('gpu.compute', (id, cap, mf) = mf.permissions?.includes('gpu.compute')); const { granted, reason } = graph.check('os.calculator', 'fs.read', manifest); Method Signature Summary Allow for (string, array, or ' ' for","contentHash":"7ef62358ca4fe7a28f8dd069c80bf7fdfda39b9ea5fed337b6f4ab2d8f80873b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/RuleGraph.md::0001","path":"webgpu-os/reference/kernel/RuleGraph.md","title":"kernel/RuleGraph.js","description":"","kind":"reference","source":"webgpu-os/kernel/RuleGraph.js","updated":"","headings":["kernel/RuleGraph.js","Classes","class RuleGraph","Functions","buildDefaultRuleGraph()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"const { granted, reason } = graph.check('os.calculator', 'fs.read', manifest); Method Signature Summary Allow for (string, array, or ' ' for all). Deny for . Allow for all apps where returns true. Deny for all apps where returns true. Evaluate the rule graph for an app+capability pair. Check many capabilities at once. Return all capabilities that an app is currently granted (from the registered rule set). Only works for the known set of you pass in. Functions Build the default OS wide RuleGraph. Apps with explicit manifest.permissions entries unlock restricted capabilities. Constants — Human readable label for each capability (used by PermissionPortal). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"f155596cff52812c2d16d8c85216d9393c9df216249300858d733a0481b35d79"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/RuntimeModeManager.md::0000","path":"webgpu-os/reference/kernel/RuntimeModeManager.md","title":"kernel/RuntimeModeManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/RuntimeModeManager.js","updated":"","headings":["kernel/RuntimeModeManager.js","Classes","class RuntimeModeManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RuntimeModeManager.js — Runtime ↔ Developer mode switch. Modes: 'runtime' — enforcing permissions, no debug surface, production like 'developer' — enforcing permissions, bounded diagnostics, hot reload enabled Effects applied on mode change: runtime → permissions.setEnforcing(true), window. DEV = false developer → permissions.setEnforcing(true), window. DEV = true Developer mode is never an authority bypass. Entering it requires a trusted system principal and a live browser user activation; the kernel object and private services are never projected onto . Persisted in IDB kv store under key 'os.runtimeMode'. Emits kernel event 'os:mode change' with { mode, prev }. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d27b63e429cc2fe6e49358715fda8c3c03bb8a9081dfbf8de251d79f271234f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SearchManager.md::0000","path":"webgpu-os/reference/kernel/SearchManager.md","title":"kernel/SearchManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/SearchManager.js","updated":"","headings":["kernel/SearchManager.js","Classes","class SearchManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SearchManager.js — unified OS search backend for the command palette. Aggregates \"app elements\" from three kinds of sources, on top of the apps / subsurfaces / deep links the palette already indexes: 1. Quick Actions (static) — declared in a manifest's array. Each is a runnable item. If it carries a , the palette dispatches it on the CommandBus; otherwise it is delivered to the app as an app action (the app is opened/focused first, then receives ui:app action / reads pendingActions). 2. Live content providers — a running app registers a query callback via ui.registerSearchProvider(id, { label, query }). returns result items { id, label, sublabel?, icon?, run } where run() performs the action. Providers are same realm closures, so run() can call straight back into the app. 3. Commands (opt in) — CommandBus commands registered with meta.search:true become searchable; selecting dispatches them (no arg). Opt in keeps destructive commands out of search by default. Events: ui:app action { appId, actionId, args } — a manifest app action was invoked. Classes SearchManager.js — unified OS search backend for the command palette. Aggregates \"app elements\" from three kinds of sources, on top of the apps / subsurfaces / deep links the palette already indexes: 1. Quick Actions (static) — declared in a manifest's array. Each is a runnable item. If it carries a , the palette dispatches it on the CommandBus; otherwise it is delivered to the app as an app action (the app is opened/focused first, then receives ui:app action / reads pendingActions). 2. Live content providers — a running app registers a query callback via ui.registerSearchProvider(id, { label, query }). returns result items { id,","contentHash":"5be419bba52df8b95ae5de7c067f5f5687ee38415b293fb3f6dbcfbcfe585de0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SearchManager.md::0001","path":"webgpu-os/reference/kernel/SearchManager.md","title":"kernel/SearchManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/SearchManager.js","updated":"","headings":["kernel/SearchManager.js","Classes","class SearchManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"2. Live content providers — a running app registers a query callback via ui.registerSearchProvider(id, { label, query }). returns result items { id, label, sublabel?, icon?, run } where run() performs the action. Providers are same realm closures, so run() can call straight back into the app. 3. Commands (opt in) — CommandBus commands registered with meta.search:true become searchable; selecting dispatches them (no arg). Opt in keeps destructive commands out of search by default. Events: ui:app action { appId, actionId, args } — a manifest app action was invoked. Method Signature Summary Register a live search provider. Returns an unregister fn. Run every provider against the query; returns grouped results (errors swallowed). Flatten every visible app's manifest into runnable descriptors. Take (and clear) actions queued for an app that is mounting now. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"fc309d4d31fbdd8f8ae7f76176dbf50008bfae93f3b5099b051cde445775e8dd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SecurityDoctor.md::0000","path":"webgpu-os/reference/kernel/SecurityDoctor.md","title":"kernel/SecurityDoctor.js","description":"","kind":"reference","source":"webgpu-os/kernel/SecurityDoctor.js","updated":"","headings":["kernel/SecurityDoctor.js","Functions","scoreSecurityFindings(findings)","async runSecurityDoctor(kernel)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SecurityDoctor.js — in browser security posture report (no Node required). Aggregates the OS's runtime security signals into a single graded report: syscall guard coverage (reuses auditSyscallGuards) complete capability policy coverage (reuses auditCapabilityMap) permission enforcement state package trust posture (quarantined / untrusted installed packages) update supply chain policy (signed + trusted for auto) GPU containment (per app broker + VRAM quotas) shell CSP delivery (Report Only vs enforcing, inline script regressions) browser extension presence Each finding has a severity ('critical' 'high' 'medium' 'low' 'info') and a pass flag. returns a structured report suitable for logging or rendering in a Security Doctor panel. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"eba2241a06de9bc34fcea47744c23a0f53c73df05d8ce79faa6990a69ac5e32a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SessionStore.md::0000","path":"webgpu-os/reference/kernel/SessionStore.md","title":"kernel/SessionStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/SessionStore.js","updated":"","headings":["kernel/SessionStore.js","Classes","class SessionStore","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SessionStore.js — OS wide, encrypted per origin session + credential store. One machine bound, AES 256 GCM encrypted IndexedDB store (via AppSandbox, db ) shared by every app and the compat layer. It replaces the Browser app's localStorage local vault/cookie stores so logins and per site policy are managed OS wide and consistently encrypted. Record kinds (one IDB key each): policy:<origin → 'persist' 'isolated' per site session policy sess:<origin → { cookies:{k:v}, local:{k:v}, t } agent captured data vault → the Browser vault blob (itself master password encrypted; stored here so all apps share one OS wide vault) IMPORTANT — what this can and cannot do: We CANNOT read a cross origin live frame's real cookies (browser isolation), and Set Cookie is a forbidden header. So \"persistence\" is policy driven: • 'isolated' (default) → frame loads (ephemeral, sessionless) • 'persist' → frame drops so the browser keeps its cookies natively across reloads + restarts Captured data only comes from surfaces we CONTROL (proxied / srcdoc / compat sandbox documents) via an injected agent — never scraped from a live cross origin frame. Classes Method Signature Summary Lazily open the encrypted sandbox. Safe to call repeatedly. 'persist' (keep logins) 'isolated' (default — credentialless, sessionless). Map of origin → policy for every origin with a non default policy. { cookies, local, t } or null. Merge save captured cookies/localStorage for an origin. Origins that have either a policy or captured data. Wipe everything (policies, captured sessions, vault). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps","contentHash":"81d6891c390403d271f97d35bbd4dd0ffd4a603df7050b686847b201afbe32cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SessionStore.md::0001","path":"webgpu-os/reference/kernel/SessionStore.md","title":"kernel/SessionStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/SessionStore.js","updated":"","headings":["kernel/SessionStore.js","Classes","class SessionStore","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"sessions, vault). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d0d8fe4bb294ffc445525f5a0f288a1360dc90944b9eae9b7365e5a947d2b29f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SigningLineage.md::0000","path":"webgpu-os/reference/kernel/SigningLineage.md","title":"kernel/SigningLineage.js","description":"","kind":"reference","source":"webgpu-os/kernel/SigningLineage.js","updated":"","headings":["kernel/SigningLineage.js","Functions","lineageNodePayload(appId, prevFingerprint, node)","async verifyLineage(lineage, crypto)","async authorizeRotation(lineage, signerFingerprint, pinnedFingerprint, crypto)","async createGenesisLineage(appId, pubKeyRaw, crypto, flags = 0)","async appendRotation(lineage, newPubKeyRaw, signWithCurrent, crypto, opts = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SigningLineage.js — publisher signing key rotation lineage (proof of rotation). Models the Android APK Signature Scheme v3 \"proof of rotation\" idea in our ECDSA P 256 world: a singly linked list of publisher keys, ordered oldest → newest, where EACH ancestor key signs the NEXT key's payload. This proves that a new key is endorsed by the previous one, so an app update signed by a fresh key is provably the same publisher identity as the version a user already pinned — \"reuse the same identity with new keys, still isolated per update.\" Two independent guarantees (kept separate, exactly like APK v3): 1. File integrity / self verification — the CURRENT key signs the version's Merkle root (PackageBuilder.buildV2). That is unchanged and lives outside this module: a package always verifies against its own files. 2. Identity continuity — THIS module. The lineage is carried inside the signed package envelope (so it is covered by the current key's signature and cannot be stripped/swapped in transit), and proves the head key descends from the previously pinned key. Lineage shape ( ): { format: 'prlineage v1', appId: 'community.my app', nodes: [ { pubKey:<b64 , fingerprint:<hex , flags:<uint , rotatedAt:<iso }, ... ], // oldest → newest links: [ <b64 sig , ... ] // links[i] = nodes[i] signing canonical(nodes[i+1]); length = nodes.length 1 } Node flags (self trusted old certs, bitfield): FLAG INSTALL (1) — this (old) key may still authorize fresh installs FLAG UPDATE (2) — this (old) key may still sign updates Default for new rotations is 0 (strict): only the head key installs/updates; ancestors are accepted ONLY to prove continuity to a pinned fingerprint. SECURITY: this verifier is FAIL","contentHash":"493247df601c86e02f96e4e25185f2762d4178ec89d533824df025a8fa979af1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SigningLineage.md::0001","path":"webgpu-os/reference/kernel/SigningLineage.md","title":"kernel/SigningLineage.js","description":"","kind":"reference","source":"webgpu-os/kernel/SigningLineage.js","updated":"","headings":["kernel/SigningLineage.js","Functions","lineageNodePayload(appId, prevFingerprint, node)","async verifyLineage(lineage, crypto)","async authorizeRotation(lineage, signerFingerprint, pinnedFingerprint, crypto)","async createGenesisLineage(appId, pubKeyRaw, crypto, flags = 0)","async appendRotation(lineage, newPubKeyRaw, signWithCurrent, crypto, opts = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"is 0 (strict): only the head key installs/updates; ancestors are accepted ONLY to prove continuity to a pinned fingerprint. SECURITY: this verifier is FAIL CLOSED. Any malformed structure, fingerprint mismatch, or broken link signature ⇒ { valid:false }. Callers fall back to the existing publisher change quarantine path on invalid/absent lineage. fingerprintOf:(pubRaw:Uint8Array)= Promise<string , sign?:(data:string)= Promise<Uint8Array null }} CryptoLike Functions Canonical signed payload for a lineage node — the bytes an ancestor key signs to endorse this successor node. Binds the successor's key, fingerprint, flags, the appId, and the PREVIOUS node's fingerprint, so a link cannot be replayed onto a different app or spliced into a different chain. Verify a lineage end to end. FAIL CLOSED. Parameters: (object) — No description in source JSDoc. (CryptoLike) — No description in source JSDoc. Returns: {Promise<{ valid:boolean, reason?:string, root?:string, head?:string, Decide whether an update may proceed via key rotation. FAIL CLOSED. Accepts iff the lineage is valid, its head equals the package's current signer fingerprint, and the previously pinned fingerprint appears in the chain (i.e. the head provably descends from the key the user already trusts). Parameters: (object) — — from the package envelope (string) — — fingerprint of the key that signed THIS package (string) — — the user's currently pinned fingerprint for this app/publisher (CryptoLike) — No description in source JSDoc. Returns: } Build the genesis (single node) lineage for a brand new publisher key. Parameters: (string) — No description in source JSDoc. (Uint8Array) — No description in source JSDoc. (CryptoLike) — No description in source JSDoc. (number) — No description in source JSDoc. Append a","contentHash":"a3b17c91da7127db95d10326bf047afec7bc46d0303831311b99a3018f259d1b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SigningLineage.md::0002","path":"webgpu-os/reference/kernel/SigningLineage.md","title":"kernel/SigningLineage.js","description":"","kind":"reference","source":"webgpu-os/kernel/SigningLineage.js","updated":"","headings":["kernel/SigningLineage.js","Functions","lineageNodePayload(appId, prevFingerprint, node)","async verifyLineage(lineage, crypto)","async authorizeRotation(lineage, signerFingerprint, pinnedFingerprint, crypto)","async createGenesisLineage(appId, pubKeyRaw, crypto, flags = 0)","async appendRotation(lineage, newPubKeyRaw, signWithCurrent, crypto, opts = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"source JSDoc. (Uint8Array) — No description in source JSDoc. (CryptoLike) — No description in source JSDoc. (number) — No description in source JSDoc. Append a rotation: the CURRENT head key signs the NEW key's node, proving the new key inherits the identity. The caller supplies a bound to the OLD/head private key (the dev's safely kept key), so private keys never enter this module. Parameters: (object) — — existing valid lineage (Uint8Array) — — the freshly generated next key ((data:string)= Promise<Uint8Array null ) — — signs with the head key (CryptoLike) — No description in source JSDoc. Returns: the extended lineage (new node + new link appended) Constants — SigningLineage.js — publisher signing key rotation linea","contentHash":"3f2e4ceed73ed18178d09bb4c3901ec147f542c81cd7b83863a7337d88284dda"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SubsurfaceManager.md::0000","path":"webgpu-os/reference/kernel/SubsurfaceManager.md","title":"kernel/SubsurfaceManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/SubsurfaceManager.js","updated":"","headings":["kernel/SubsurfaceManager.js","Classes","class SubsurfaceManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SubsurfaceManager.js — kernel navigation service for app SUBSURFACES. A \"surface\" is an app's top level display mode (window / overlay / tray — see manifest.surface). A \"subsurface\" is a navigable sub location inside an app (a tab, section, or view), declared in the manifest as: \"subsurfaces\": [ { \"id\": \"mixer\", \"label\": \"Volume Mixer\", \"icon\": \"🎚\", \"keywords\": [\"volume\"] }, ... ] This service is the OS level registry/tracker for deep linking into those: Active tracking: which subsurface each running app currently shows. Pending nav: a deep link target stashed for an app that is still launching (the app reads it on mount via ui.pendingNavigate). Recents + Pins: persisted deep link shortcuts (the \"small UI shortcuts\"), surfaced in the command palette / Start Menu. NOTE: This is distinct from SurfaceManager.js, which allocates WebGPU canvases. Events emitted on kernel.events: ui:navigate subsurface { appId, subsurfaceId, args } — a deep link was requested ui:subsurface change { appId, subsurfaceId } — an app reported its active sub os:deeplinks change {} — pins/recents changed Classes Method Signature Summary The subsurfaces declared by a single app (from its manifest). Flatten every visible app's subsurfaces into searchable deep link descriptors. Resolve a single {appId, subId} into a full descriptor (or null). Pins + recents, each enriched with display descriptors (stale entries dropped). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level","contentHash":"0562c2e72cd1b50bc04790f1ce9679d3dc957891d093075690b8b42c281ce465"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SubsurfaceManager.md::0001","path":"webgpu-os/reference/kernel/SubsurfaceManager.md","title":"kernel/SubsurfaceManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/SubsurfaceManager.js","updated":"","headings":["kernel/SubsurfaceManager.js","Classes","class SubsurfaceManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6924afdd95fbdb6c202243280982598e35a096a233ec6054ec6c5a2b34017fc1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/SurfaceManager.md::0000","path":"webgpu-os/reference/kernel/SurfaceManager.md","title":"kernel/SurfaceManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/SurfaceManager.js","updated":"","headings":["kernel/SurfaceManager.js","Classes","class SurfaceManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SurfaceManager.js — allocates and manages one WebGPU canvas surface per panel. Checks permissions (gpu.acquireSurface) and VRAM quotas before allocating. Classes Each app gets an exclusive <canvas + GPUCanvasContext bound to the kernel's GPU device. The SurfaceManager handles: Canvas creation and insertion into the panel body GPUCanvasContext.configure() with the preferred format ResizeObserver wiring so the canvas tracks panel resize Clean release (unconfigure + canvas removal) on panel close Quota admission happens before GPUCanvasContext creation/configuration. Method Signature Summary Allocate a WebGPU canvas surface for inside . Returns a surface descriptor or null if WebGPU is unavailable. Release the surface for , unconfiguring the context and removing the canvas. Get an allocated surface by panelId. List all active surfaces. Number of active surfaces. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e8c4dc39a72f7348339cffa165ff6e4b17f5068100559f9f0d4c2b468736300f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/Syscalls.md::0000","path":"webgpu-os/reference/kernel/Syscalls.md","title":"kernel/Syscalls.js","description":"","kind":"reference","source":"webgpu-os/kernel/Syscalls.js","updated":"","headings":["kernel/Syscalls.js","Functions","createSyscalls(kernel)","guardSyscalls(kernel, appId, syscalls)","auditSyscallGuards(kernel)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Syscalls.js — the stable Tier 1 ↔ Tier 2 contract boundary. Every app sees ONLY this surface. In Tier 1 (browser) each method delegates to the corresponding engine module. In Tier 2 (Rust + Wasmtime) each method becomes a WASI capability table entry. ⚠ Never expose engine internals directly to apps. If an app needs a new capability, add a method here first; never let apps import from ../../engine/. Syscall namespaces: kernel.fs — virtual filesystem (IndexedDB + ProjectManager) kernel.gpu — GPU stats, resource budgets, device info kernel.ipc — cross app event bus kernel.ai — inference handle (AGI driver, Phase 6) kernel.net — networking (collab driver, Phase 5) kernel.crypto — ECDSA P 256 identity, sign/verify (CryptoDriver) kernel.ui — notifications, modals, panels Functions Wrap a syscalls object with per app permission enforcement. Only restricted capabilities are guarded — universally open ones (fs. , ipc. , ui. ) are skipped since they are always granted and the overhead is unnecessary. Parameters: (object) — No description in source JSDoc. (string) — No description in source JSDoc. (object) — — the panelSyscalls built by Desktop. launchPanel Returns: a new syscalls object with guarded methods Inventory every syscall method and classify it as guarded / open / unguarded. Build only: no syscall is invoked. Use at boot (dev mode) or in tests to catch privileged methods added without a capability guard. Parameters: (object) — No description in source JSDoc. Returns: } <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on","contentHash":"3358f68944e95e4bcf581108c0ad1f0ed8f4e5db9481d49fa6e966c8ce2c56fa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/Syscalls.md::0001","path":"webgpu-os/reference/kernel/Syscalls.md","title":"kernel/Syscalls.js","description":"","kind":"reference","source":"webgpu-os/kernel/Syscalls.js","updated":"","headings":["kernel/Syscalls.js","Functions","createSyscalls(kernel)","guardSyscalls(kernel, appId, syscalls)","auditSyscallGuards(kernel)","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"1e8187395e04ed514e945507d86ef9c50f63ebecfe167e2250c8646ace812329"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ThemeEngine.md::0000","path":"webgpu-os/reference/kernel/ThemeEngine.md","title":"kernel/ThemeEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/ThemeEngine.js","updated":"","headings":["kernel/ThemeEngine.js","Classes","class ThemeEngine","Functions","normalizeAppearance(input = {})","readAppearanceRecord()","writeAppearanceRecord(input)","removeAppearanceRecord()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ThemeEngine.js — Kernel level theme orchestration service. Single source of truth for all OS appearance state. Exposes a middleware chain hook system so mods can intercept theme changes before or after they are applied to the DOM. ── Modder API ──────────────────────────────────────────────────────────── const tm = syscalls.theme; // Before hook — middleware: receive appear + next(modified) tm.before('my mod', (appear, next) = next({ ...appear, chromeStyle: 'metal' }), 'Force metal chrome'); // After hook — react to a completed theme change tm.after('my mod', (appear) = console.log('Theme applied:', appear)); // Remove hooks tm.removeHook('my mod'); // Reorder tm.moveHook('my mod', 'before', 1); // move to index 1 in before list // Preview (no save, no events) tm.preview({ ...tm.current(), chromeStyle: 'metal' }); // Apply (save + emit os:theme change) tm.apply({ ...tm.current(), themeId: 'crimson' }); // Export / import theme JSON const json = tm.export(); tm.import(json); // List registered hooks tm.hookList(); // → [{ id, phase, description, enabled, order }] Classes Method Signature Summary Call once at boot to restore persisted appearance. Start a reversible live preview transaction. Idempotent while active. Restore the saved appearance after an abandoned preview. Register a BEFORE hook (middleware). fn(appear, next) — call next(modified) to continue the chain. Register an AFTER hook (reaction). fn(appear) — called after DOM is updated and state is saved. Remove all hooks (before + after) for the given id. Enable or disable a hook by id without removing it. Move a hook to a specific index within its phase list. Returns a snapshot of all registered hooks. Preview: apply to","contentHash":"1e3e8e1f0754d3373d2b97ae8f2ab06753e86174a23973787637145f48dd86ff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ThemeEngine.md::0001","path":"webgpu-os/reference/kernel/ThemeEngine.md","title":"kernel/ThemeEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/ThemeEngine.js","updated":"","headings":["kernel/ThemeEngine.js","Classes","class ThemeEngine","Functions","normalizeAppearance(input = {})","readAppearanceRecord()","writeAppearanceRecord(input)","removeAppearanceRecord()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"disable a hook by id without removing it. Move a hook to a specific index within its phase list. Returns a snapshot of all registered hooks. Preview: apply to DOM instantly without saving or firing events. Used for live preview in Theme Manager or Settings. Apply: run before hooks → apply to DOM → save → run after hooks → emit event. Serialize the current appearance as a portable, versioned theme pack. Parse a JSON string and apply it. Return user saved named appearance profiles, newest first. Functions Normalize untrusted or legacy appearance data into the supported schema. Publish one canonical appearance record after guarding the existing version. Remove the current record only when this runtime can understand it. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"542185229be8fbb77f5baade6498501349d67702d0e01ae6a799a7d0b6349050"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ToolDriver.md::0000","path":"webgpu-os/reference/kernel/ToolDriver.md","title":"kernel/ToolDriver.js","description":"","kind":"reference","source":"webgpu-os/kernel/ToolDriver.js","updated":"","headings":["kernel/ToolDriver.js","Classes","class ToolDriver","Functions","evaluateCalculatorExpression(expression)","normalizeCalculatorExpression(expression)","async projectContentFreeToolFailure(error, { toolName = 'unknown', errorCode = null, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ToolDriver — small OS native tool registry for LLM/tool callers. This mirrors the useful parts of Augment's tool registry in browser native form: schema listing, guarded execution, history, read only batching, and a narrow terminal bridge that never exposes the interactive terminal's eval path. Classes Method Signature Summary Remove one tool. When originAppId is supplied, ownership is mandatory so app scoped callers cannot remove kernel tools or another app's handlers. Remove all tools registered by one app origin, preserving built ins. Deterministically search the live tool catalog without invoking a model. Exact name/tag hits outrank description matches; an empty query returns the catalog in stable name order. Execution authority is never granted. Raw internal descriptor for a tool (resolves aliases). Used by ToolRouter's firewall pipeline. Independently verify a tool result before a Navi Faculty receipt may claim success. Mutations fail closed unless their descriptor registered an authoritative readback verifier. Read only calls are self verifying observations because they cannot mutate canonical state. Content free retention diagnostics; rows and argument hashes are omitted. Functions Project an arbitrary handler failure without retaining its message. Handler messages are untrusted and may quote complete tool inputs, credentials, or provider content. The digest preserves deterministic incident correlation. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app","contentHash":"31c99349fa6f2d579065bd590454700e0192f0268557bbb9d5bed8cf399eab29"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ToolDriver.md::0001","path":"webgpu-os/reference/kernel/ToolDriver.md","title":"kernel/ToolDriver.js","description":"","kind":"reference","source":"webgpu-os/kernel/ToolDriver.js","updated":"","headings":["kernel/ToolDriver.js","Classes","class ToolDriver","Functions","evaluateCalculatorExpression(expression)","normalizeCalculatorExpression(expression)","async projectContentFreeToolFailure(error, { toolName = 'unknown', errorCode = null, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8d346b56635383e60e5a29173b664911da2178364afe926fcdb76c9b8a0fee1a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/TrayManager.md::0000","path":"webgpu-os/reference/kernel/TrayManager.md","title":"kernel/TrayManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/TrayManager.js","updated":"","headings":["kernel/TrayManager.js","Classes","class TrayManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TrayManager.js — system notification area (status icons). Background/utility apps register a small status icon next to the clock, the same model used by Windows' notification area, macOS' menu bar extras, and the FreeDesktop StatusNotifier spec. Apps register via syscalls.ui.registerTrayIcon(spec) and the StatusTray renders them, with an overflow popup for icons beyond the visible limit. Icon spec: { id, appId?, icon, tooltip?, onClick?, menu?, priority? } icon: emoji/glyph string (or short text) onClick: fn() invoked on left click (shared realm apps only) menu: [{ label, onClick }] optional right click menu priority: higher sorts first (default 0) Classes TrayManager.js — system notification area (status icons). Background/utility apps register a small status icon next to the clock, the same model used by Windows' notification area, macOS' menu bar extras, and the FreeDesktop StatusNotifier spec. Apps register via syscalls.ui.registerTrayIcon(spec) and the StatusTray renders them, with an overflow popup for icons beyond the visible limit. Icon spec: { id, appId?, icon, tooltip?, onClick?, menu?, priority? } icon: emoji/glyph string (or short text) onClick: fn() invoked on left click (shared realm apps only) menu: [{ label, onClick }] optional right click menu priority: higher sorts first (default 0) Method Signature Summary Register (or replace) a tray icon. Returns an unregister function. Update mutable fields (icon/tooltip) of an existing icon, if present. Remove every icon owned by an app (called on app close). Icons sorted by priority (desc), then insertion order. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and","contentHash":"54cc3779e3bd23f1f41e5fc2478704b54332c9cfdfb3ec634c9d678b7929cada"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/TrayManager.md::0001","path":"webgpu-os/reference/kernel/TrayManager.md","title":"kernel/TrayManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/TrayManager.js","updated":"","headings":["kernel/TrayManager.js","Classes","class TrayManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"by priority (desc), then insertion order. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c00611a6df325511c4f842d15a710ac8ba1b18630b7f60afd41737c813418a64"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/TrustStore.md::0000","path":"webgpu-os/reference/kernel/TrustStore.md","title":"kernel/TrustStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/TrustStore.js","updated":"","headings":["kernel/TrustStore.js","Classes","class TrustStore","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TrustStore.js — ring 0 trust anchors + publisher pinning for the package system. Two tiers of trust: 1. ROOTS — public keys baked into the OS bundle (kernel/trust/roots.json). A publisher certificate that chains to a root is fully trusted. 2. PINS — publishers the user accepted on first install (trust on first use). Persisted in IndexedDB (kv store, key ). Anti takeover: a pinned publisher is bound to a specific key fingerprint. If a later package for the same publisher presents a different fingerprint, the caller (PackageManager.verifyAndAuthorize) treats it as an identity change and blocks pending explicit re consent — defending event stream/durabletask style account takeovers. SECURITY NOTE: signatures prove who built a package, not that the build was clean. Trust here is combined with provenance + static scan + egress controls. Classes Method Signature Summary Validate a publisher certificate. Returns { trusted, selfSigned, fingerprint, reason }. trusted=true → cert chains to a ring 0 root (signature verified) selfSigned=true → not rooted; eligible for pin on consent Canonical bytes of a cert (excluding issuer signature) for chain verification. 16 char fingerprint of a base64 raw public key (matches the OS identity scheme). Has this publisher (by name) been pinned under ANY fingerprint? Returns the pin record or null. True if the fingerprint is a root or an explicitly pinned publisher. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level","contentHash":"a7454da9da62de7e87ca99caa4a366951b7636a90a8f9a468c547dcb399a63d3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/TrustStore.md::0001","path":"webgpu-os/reference/kernel/TrustStore.md","title":"kernel/TrustStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/TrustStore.js","updated":"","headings":["kernel/TrustStore.js","Classes","class TrustStore","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6924afdd95fbdb6c202243280982598e35a096a233ec6054ec6c5a2b34017fc1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/UiSounds.md::0000","path":"webgpu-os/reference/kernel/UiSounds.md","title":"kernel/UiSounds.js","description":"","kind":"reference","source":"webgpu-os/kernel/UiSounds.js","updated":"","headings":["kernel/UiSounds.js","Classes","class UiSounds","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: UiSounds.js — OS wide UI sound engine (kernel service). Procedurally synthesizes short UI sounds (click, open, close, notify, error, …) through the OS AudioDriver's shared context, so every cue is mixed and volume controlled centrally (it appears in the Sound mixer as a \"System sounds\" session). Sounds are auto triggered from OS wide kernel events (panel open/close/minimize/ restore, notifications, theme toggle) and from a global click listener, so the whole desktop gets feedback without each app wiring anything. Apps can also play a cue explicitly via syscalls.ui.sound('click'). ── Future customization ────────────────────────────────────────────────────────── Every cue is a named entry in a registry. A mod / sound pack can override or add cues at runtime: kernel.uiSounds.register('click', (ctx, out, t0) = { ... custom synth ... }); kernel.uiSounds.register('coin', (ctx, out, t0) = { ... new cue ... }); Per cue enable flags, global enable, and volume persist in localStorage, ready for a settings UI (the Sound app exposes the global toggle + volume today). Classes Method Signature Summary DND is owned by NotificationCenter / Quick Settings via the shared notif prefs key. List registered cue names (for a future customization UI). Register or override a cue. synth(ctx, out, t0, opts) schedules nodes on . Play a named cue. No op if disabled, unknown, or audio unavailable. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example:","contentHash":"9f9909257f6ffd0f165c212fb917d28e58ec8e04d0617a78d0a88cf061e9e0a8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/UiSounds.md::0001","path":"webgpu-os/reference/kernel/UiSounds.md","title":"kernel/UiSounds.js","description":"","kind":"reference","source":"webgpu-os/kernel/UiSounds.js","updated":"","headings":["kernel/UiSounds.js","Classes","class UiSounds","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bf9878fff450dad3b0da2e75f1cbddf338dd18f76da63257b16802b0d451161b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/VRAMTracker.md::0000","path":"webgpu-os/reference/kernel/VRAMTracker.md","title":"kernel/VRAMTracker.js","description":"","kind":"reference","source":"webgpu-os/kernel/VRAMTracker.js","updated":"","headings":["kernel/VRAMTracker.js","Classes","class VRAMTracker","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VRAMTracker.js — per app GPU memory budget tracking. WebGPU does not expose actual VRAM usage. We track requested allocations: Surfaces — estimated from canvas dimensions × bytes per pixel Buffers — exact size passed to createBuffer (when routed via syscalls) Textures — estimated from width × height × format bytes per pixel Admission is checked before allocations. Canvas surfaces receive a small, bounded reserve so buffer/texture workloads cannot consume the final UI capacity and make an app impossible to close or recover. Phase 5+ upgrade path: hook device.createBuffer/createTexture via a GPUDevice proxy to track all allocations, not just syscall routed ones. Classes Method Signature Summary Record a GPU canvas surface allocation. Returns the estimated byte size. Record a GPU buffer allocation. Returns an opaque handle for freeing. Track a texture by an already estimated byte size (used by the GPU facade). Count a created render/compute pipeline for this app. Count a created shader module for this app. Return a typed admission decision with enough evidence to diagnose it. Check ordinary buffer/texture admission without using the UI reserve. Check canvas admission against the bounded per app and global UI reserve. Return usage summary for all tracked apps. Format bytes as human readable string. Drop all tracking for an app (call on app close). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and","contentHash":"25982493eb65bc4d67980342f7b0cb65477942ab00ab50f63d95db22ceb0677d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/VRAMTracker.md::0001","path":"webgpu-os/reference/kernel/VRAMTracker.md","title":"kernel/VRAMTracker.js","description":"","kind":"reference","source":"webgpu-os/kernel/VRAMTracker.js","updated":"","headings":["kernel/VRAMTracker.js","Classes","class VRAMTracker","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c35d68a1bf82d76113e126c1ca1c35b4f3ecd9169ae47631417f959b850e0e3b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/VirtualFS.md::0000","path":"webgpu-os/reference/kernel/VirtualFS.md","title":"kernel/VirtualFS.js","description":"","kind":"reference","source":"webgpu-os/kernel/VirtualFS.js","updated":"","headings":["kernel/VirtualFS.js","Classes","class VirtualFS","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: VirtualFS.js — path tree virtual filesystem. Features: POSIX like paths — /user/notepad/file.txt Directories — implicit from file paths; explicit mkdir supported Persistence — OPFS backed via StorageManager (falls back to localStorage) Events — on('write' 'delete' ' ', cb) for live watchers (e.g. Notepad tabs) JSON helpers — readJSON / writeJSON All public methods are synchronous (reads from in memory cache). Writes flush to OPFS asynchronously in the background. Call once at OS boot to preload OPFS → memory. Classes Method Signature Summary Initialize StorageManager + preload OPFS files into memory. Call once at OS boot: Bind a schema name to a path prefix or exact path. Any write to a matching path will be validated. Read a file. Returns the stored string, or null if not found. Write a file. Content may be a string or any JSON serialisable value. If a schema is bound to this path, the value is validated before writing. Pass to bypass (trusted internal writes). Check if a path exists as a file. List direct children of a directory. Returns basenames only (not full paths). Recursively list all file paths under a directory. Create a directory marker (optional — files implicitly create dirs). Return basic stat information for a path. Move / rename a file. Subscribe to fs events: 'write', 'delete', ' '. Returns unsubscribe fn. Keep the synchronous VFS cache coherent with storage based apps. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or","contentHash":"1f8e370444927fe7e967946beeb7920fa00a438bb838aa2f941731b088c4015c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/VirtualFS.md::0001","path":"webgpu-os/reference/kernel/VirtualFS.md","title":"kernel/VirtualFS.js","description":"","kind":"reference","source":"webgpu-os/kernel/VirtualFS.js","updated":"","headings":["kernel/VirtualFS.js","Classes","class VirtualFS","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"59d5ed818b4ece0060a27a12ad71eca20e740489a99dbe32c35d669c8bbcaf70"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/agent/JavaScriptProjectFacts.md::0000","path":"webgpu-os/reference/kernel/agent/JavaScriptProjectFacts.md","title":"kernel/agent/JavaScriptProjectFacts.js","description":"","kind":"reference","source":"webgpu-os/kernel/agent/JavaScriptProjectFacts.js","updated":"","headings":["kernel/agent/JavaScriptProjectFacts.js","Functions","javascriptLanguageForPath(path = '')","inspectJavaScriptProjectFacts({ path = '', content = '', maxTokens = MAXTOKENS, maxSymbols = MAXSYMBOLS, maxImports = MAXIMPORTS, } = {})","resolveJavaScriptImport({ sourcePath = '', specifier = '', knownFiles = null } = {})","dependencyName(specifier = '')","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Bounded lexical facts shared by project indexing and source verification. This module deliberately does not claim to parse JavaScript, TypeScript, or JSX. It identifies inspectable declarations and import specifiers while keeping lexical evidence distinct from parser evidence. Functions Constants — Bounded lexical facts shared by project indexing and source verification. This module deliberately does not claim to parse JavaScript, TypeScript, or JSX. It identifies inspectable declarations and import specifiers while keeping lexical evidence distinct from parser evidence. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"13b3519cc53e755093f31ce7543cfa423714d8c17a188c1c81c5658a18a59fa4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/agent/MountedProjectIntelligenceIndex.md::0000","path":"webgpu-os/reference/kernel/agent/MountedProjectIntelligenceIndex.md","title":"kernel/agent/MountedProjectIntelligenceIndex.js","description":"","kind":"reference","source":"webgpu-os/kernel/agent/MountedProjectIntelligenceIndex.js","updated":"","headings":["kernel/agent/MountedProjectIntelligenceIndex.js","Functions","async buildMountedProjectIntelligence({ invokeTool, rootPath, workspaceRevision = '', maxEntries = DEFAULTMAXENTRIES, maxDepth = DEFAULTMAXDEPTH, maxReadFiles = DEFAULTMAXREADFILES, maxReadChars = DEFAULTMAXREADCHARS, maxTotalReadChars = DEFAULTMAXTOTALREADCHARS, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Deterministic, authority free project intelligence for a mounted workspace. The builder can see a workspace only through AI Echo's existing bounded storage.list and storage.read tool contracts. It returns source backed facts separately from advisory suggestions and never exposes complete source text. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"93e5d309be0a0db103435ef6eed5eef67df54abbcca9a9ef775bbf3e63deb40e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/AIDispatchScheduler.md::0000","path":"webgpu-os/reference/kernel/ai-hub/AIDispatchScheduler.md","title":"kernel/ai-hub/AIDispatchScheduler.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/AIDispatchScheduler.js","updated":"","headings":["kernel/ai-hub/AIDispatchScheduler.js","Classes","class AIDispatchError extends Error","class AIDispatchScheduler","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AIDispatchScheduler.js — bounded, in memory admission for live model calls. Prompts stay inside the caller's run closure and are never serialized or persisted by this scheduler. Owners are serviced round robin while each owner's jobs retain FIFO start order. Provider and exact route limits keep a burst of Navi work from crushing one remote endpoint. Classes Method Signature Summary Method Signature Summary requestId:string, ownerId:string, provider:string, model:string, signal?:AbortSignal null, run:()= Promise< , abort?:()= Promise< , onStart?:(snapshot:object)= void, onRelease?:(snapshot:object)= void }} rawJob Cancel a queued or active request without widening provider authority. Constants — AIDispatchScheduler.js — bounded, in memory admission for live model calls. Prompts stay inside the caller's run closure and are never serialized or persisted by this scheduler. Owners are serviced round robin while each owner's jobs retain FIFO start order. Provider and exact route limits keep a burst of Navi work from crushing one remote endpoint. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4918c197f573df109d0ae0649c660b5164e3f0dfae66d63f1c2fb8fca1bcb987"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/AIService.md::0000","path":"webgpu-os/reference/kernel/ai-hub/AIService.md","title":"kernel/ai-hub/AIService.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/AIService.js","updated":"","headings":["kernel/ai-hub/AIService.js","Classes","class AIHub","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AIService.js — the OS.ai() entrypoint (Phase 1 skeleton). Remote provider based through an adaptive credential boundary. It prefers the isolated AI Bridge extension and falls back on phones to browser direct OpenRouter or an approved user controlled HTTPS proxy. Fully separate from (the local on device GGUF runtime). Exposed at kernel.aiHub and wrapped by syscalls.aiHub (capability gated). Classes Method Signature Summary The public OS.ai(appId, request) entrypoint. In flight OS.ai() requests, for the Task Ledger / overlay (Phase 8). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"702c9fffb817a097a848ac833381de6d30f79afb1b505d00293625de89ff6e20"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/AdaptiveProviderBridge.md::0000","path":"webgpu-os/reference/kernel/ai-hub/AdaptiveProviderBridge.md","title":"kernel/ai-hub/AdaptiveProviderBridge.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/AdaptiveProviderBridge.js","updated":"","headings":["kernel/ai-hub/AdaptiveProviderBridge.js","Classes","class AdaptiveProviderBridge","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Chooses one credential/transport boundary per operation. The extension is always preferred because its origin isolates secrets from the OS page. Browser direct is selected only when the extension remains unavailable after a bridge reprobe. Provider requests are never replayed across the two backends, preventing duplicate billing and duplicate tool/model effects. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"41ea048505be736f6e1d5136076ac0dd8e7c3a7b730d1435172d6c0c593bbd03"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/DirectProviderBridge.md::0000","path":"webgpu-os/reference/kernel/ai-hub/DirectProviderBridge.md","title":"kernel/ai-hub/DirectProviderBridge.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/DirectProviderBridge.js","updated":"","headings":["kernel/ai-hub/DirectProviderBridge.js","Classes","class DirectProviderBridge","Functions","readCustomEndpointAllowlist(storage = globalThis.localStorage)","writeCustomEndpointAllowlist(endpoints, storage = globalThis.localStorage)","readDirectModelCache(storage = globalThis.localStorage)","writeDirectModelCache(records, storage = globalThis.localStorage)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Browser direct AI transport for phones and other browsers without extension support. The allowlist is deliberately narrow: OpenRouter, whose official OAuth/PKCE flow supports browser clients. A user approved HTTPS OpenAI compatible proxy controlled by the user. OpenAI, Anthropic, and other long lived provider keys stay extension/server only. Their presence in the shared provider catalog does not grant this transport permission to call them. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"701f6cf520b6b0635c76571c3709f7dc8cad6b50d0df5c431dd351547a50f37a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/ExtensionBridge.md::0000","path":"webgpu-os/reference/kernel/ai-hub/ExtensionBridge.md","title":"kernel/ai-hub/ExtensionBridge.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/ExtensionBridge.js","updated":"","headings":["kernel/ai-hub/ExtensionBridge.js","Classes","class ExtensionBridge","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ExtensionBridge.js — the AI Hub's preferred isolated path to a remote provider. Talks to WebGPU OS Companion via kernel.browserBridge (relay.js's message contract). Never called with a page supplied header; built in routes accept only provider/model/messages/ params while custom endpoints remain explicitly approved by the user. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"cd9046d84a20f58fcd2123299e2b036efa27dd989274e3ec2f4bf060c9aada9c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/LocalCredentialVault.md::0000","path":"webgpu-os/reference/kernel/ai-hub/LocalCredentialVault.md","title":"kernel/ai-hub/LocalCredentialVault.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/LocalCredentialVault.js","updated":"","headings":["kernel/ai-hub/LocalCredentialVault.js","Classes","class LocalCredentialContractError extends Error","class LocalCredentialVault","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Same origin credential vault for browsers that cannot install extensions. Session credentials remain ephemeral. Opt in persistent credentials use a non extractable IndexedDB CryptoKey and a versioned, encrypted readback. V2 commits the Files visible readback first and the matching IndexedDB slot second. Readers compare monotonically increasing generations and repair an interrupted second step. V1 envelopes/readbacks remain read only inputs. Classes Method Signature Summary Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"21a3c32eb34c60dd8a53a89b642be7499105816a67185e5eb05245f565ad4151"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/LocalRuntimeProvider.md::0000","path":"webgpu-os/reference/kernel/ai-hub/LocalRuntimeProvider.md","title":"kernel/ai-hub/LocalRuntimeProvider.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/LocalRuntimeProvider.js","updated":"","headings":["kernel/ai-hub/LocalRuntimeProvider.js","Classes","class LocalRuntimeProvider","Functions","automaticRoutingReadiness(model, runtimeStatus = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AI Hub adapter for the kernel owned, on device GGUF runtime. Installed models and generation defaults stay authoritative in LLMDriver; this class only translates that state into the provider neutral AI Hub contract. Classes Method Signature Summary Functions Automatic Navi routing is stricter than catalog presence. A saved handle can identify a model without proving that this tab can read it, and an initialized driver can exist without a usable WebGPU device. Manual LLM Runtime flows may still ask the operator to reconnect a handle; unattended routing may not. Constants — AI Hub adapter for the kernel owned, on device GGUF runtime. Installed models and generation defaults stay authoritative in LLMDriver; this class only translates that state into the provider neutral AI Hub contract. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a8f1dd3d5067dc445f4e4fccd510a2b26127b683ff9fafbb4780afa44a435c5c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/ModelCapabilityRegistry.md::0000","path":"webgpu-os/reference/kernel/ai-hub/ModelCapabilityRegistry.md","title":"kernel/ai-hub/ModelCapabilityRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/ModelCapabilityRegistry.js","updated":"","headings":["kernel/ai-hub/ModelCapabilityRegistry.js","Classes","class ModelCapabilityRegistry","Functions","readModelCapabilityRouting(storage = globalThis.localStorage)","writeModelCapabilityRouting(tiers, storage = globalThis.localStorage)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ModelCapabilityRegistry.js — maps an abstract to a concrete { provider, model } pair for the OS AI Hub. Apps ask for a tier ('fast', 'balanced', 'reasoning'), not a specific vendor model, so the default can change without touching every app's request payload. Classes Method Signature Summary Override (or add) the { provider, model } pair for a tier. Resolve a tier to { provider, model }, falling back to 'balanced'. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"22a4739460100f875d4060f764b3769b9875e7da7dd0b2c673eba6fbeacec1e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/ProviderRouter.md::0000","path":"webgpu-os/reference/kernel/ai-hub/ProviderRouter.md","title":"kernel/ai-hub/ProviderRouter.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/ProviderRouter.js","updated":"","headings":["kernel/ai-hub/ProviderRouter.js","Classes","class ProviderRouter","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ProviderRouter.js — picks the concrete { provider, model } for a normalized OS.ai() request: an explicit provider/model on the request always wins, otherwise it resolves the request's modelTier via ModelCapabilityRegistry. Classes ProviderRouter.js — picks the concrete { provider, model } for a normalized OS.ai() request: an explicit provider/model on the request always wins, otherwise it resolves the request's modelTier via ModelCapabilityRegistry. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8b4694cb2d93ae63a267d8087848afd07272473981cc6befebcf0999c9d54f12"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/RequestNormalizer.md::0000","path":"webgpu-os/reference/kernel/ai-hub/RequestNormalizer.md","title":"kernel/ai-hub/RequestNormalizer.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/RequestNormalizer.js","updated":"","headings":["kernel/ai-hub/RequestNormalizer.js","Classes","class RequestNormalizer","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RequestNormalizer.js — validates and normalizes an OS.ai(request) payload into the canonical shape the rest of the AI Hub pipeline consumes. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bc7df5e0618cd62def214705ffe4399fdff9df617fea3e667372d9a29ea5b7f5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/ResultBroker.md::0000","path":"webgpu-os/reference/kernel/ai-hub/ResultBroker.md","title":"kernel/ai-hub/ResultBroker.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/ResultBroker.js","updated":"","headings":["kernel/ai-hub/ResultBroker.js","Classes","class ResultBroker","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ResultBroker.js — wraps a raw provider chat result into the OS.ai() response envelope and stamps it with CSE provenance (engine/state). Model output is always MODEL PREDICTED/untrusted for authority — it becomes canonical only if/when Phase 9's finalizer + CommitCoordinator commit it. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"de3ccf3f07a9e31448f7a963d295915296874527078f9a5bf71aad6d38700208"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/SmartModelPolicy.md::0000","path":"webgpu-os/reference/kernel/ai-hub/SmartModelPolicy.md","title":"kernel/ai-hub/SmartModelPolicy.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/SmartModelPolicy.js","updated":"","headings":["kernel/ai-hub/SmartModelPolicy.js","Functions","classifySmartModelRouterAlias(provider, model)","defaultSmartModelPolicy()","normalizeSmartModelPolicy(raw = null)","inferSmartModelWorkloadProfile(raw = {})","classifySmartModelTask(raw = {})","normalizeSmartModelCandidate(raw)","estimateSmartModelCostMicrounits(candidate, estimatedTokens)","rankSmartModelPool({ policy: rawPolicy = null, models = [], task = {}, usage = null } = {})","selectSmartModelPool(options = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SmartModelPolicy.js deterministic policy and catalog ranking for AI Hub. This module performs no provider calls, stores no credentials, and grants no authority. It projects provider catalog records into an inspectable ranking that Navi cognition can compile into its existing signed route contract. Functions Classify provider side router aliases separately from concrete model IDs. Dynamic aliases may resolve to a different model on every request, so their catalog capabilities cannot safely authorize strict or effectful tasks. Return a detached, immutable basic policy suitable for persisted settings. Normalize persisted policy. Missing fields migrate to v1 defaults, while an unknown field or version is rejected so misspelled safety controls never silently disappear. Infer preference only workload affinities from one provider catalog row. The result improves ranking and model picker explanations. It is never an authorization claim: privacy, modality, tool transport, context, endpoint health, and budget remain separate hard eligibility checks. Classify a task without consulting a model. Explicit purpose wins; otherwise bounded, ordered rules use declared modality/privacy/background state before keyword signals. Raw user text is never copied into the returned evidence. Project one provider catalog record into the policy's provider neutral form. Conservative projected cost for a normalized candidate and token estimate. Rank a catalog and return a deterministic, inspectable decision. The caller still owns provider authentication, canonical resource reservations, and final execution authority. Semantic alias for callers that consume the selected route and fallbacks. Constants —","contentHash":"d460db6c673976ec092e1891dbc5ed3f97c10e74de5e04ad077391ec015f2359"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ai-hub/SmartModelPolicy.md::0001","path":"webgpu-os/reference/kernel/ai-hub/SmartModelPolicy.md","title":"kernel/ai-hub/SmartModelPolicy.js","description":"","kind":"reference","source":"webgpu-os/kernel/ai-hub/SmartModelPolicy.js","updated":"","headings":["kernel/ai-hub/SmartModelPolicy.js","Functions","classifySmartModelRouterAlias(provider, model)","defaultSmartModelPolicy()","normalizeSmartModelPolicy(raw = null)","inferSmartModelWorkloadProfile(raw = {})","classifySmartModelTask(raw = {})","normalizeSmartModelCandidate(raw)","estimateSmartModelCostMicrounits(candidate, estimatedTokens)","rankSmartModelPool({ policy: rawPolicy = null, models = [], task = {}, usage = null } = {})","selectSmartModelPool(options = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"canonical resource reservations, and final execution authority. Semantic alias for callers that consume the selected route and fallbacks. Constants — SmartModelPolicy.js deterministic policy and catalog ranking for AI Hub. This module performs no provider calls, stores no credentials, and grants no authority. It projects provider catalog records into an inspectable ranking that Navi cognition can compile into its existing signed route contract. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"cb3a1a84106f180671dee6e26e82678468263da451bd2520d0030bc837f9976a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/attestation/CapabilityAttestation.md::0000","path":"webgpu-os/reference/kernel/attestation/CapabilityAttestation.md","title":"kernel/attestation/CapabilityAttestation.js","description":"","kind":"reference","source":"webgpu-os/kernel/attestation/CapabilityAttestation.js","updated":"","headings":["kernel/attestation/CapabilityAttestation.js","Classes","class CapabilityAttestation","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CapabilityAttestation.js — gates capability minting on descriptor attestation. Wraps engine/state's CapabilityRegistry/Capability.js (via the Phase 4 CapabilityNegotiator, kernel.protocol.capabilities — no parallel capability logic) and layers DescriptorHashStore on top so a capability is only minted for a tool whose descriptor hash matches the approved hash. The always on Navi runtime requires explicit package or operator approval for every first seen descriptor. Classes Method Signature Summary Attest a tool descriptor and, if it passes, mint a capability for to invoke it. Returns without minting anything if the descriptor changed since approval — callers (Phase 8's ApprovalCard) surface this as a re review prompt. Kernel only signed release handoff; never exposed as an application syscall. DescriptorHashStore binds the exact callable and deliberately treats package timestamps as audit data, never executable authority. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"f6c3afaad3791bdd2b4ea2c62d670513c43cc6808d272420c9c5557d7e87e4d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/attestation/DescriptorHashStore.md::0000","path":"webgpu-os/reference/kernel/attestation/DescriptorHashStore.md","title":"kernel/attestation/DescriptorHashStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/attestation/DescriptorHashStore.js","updated":"","headings":["kernel/attestation/DescriptorHashStore.js","Classes","class DescriptorHashStore","Functions","descriptorMeaningSnapshot(descriptor)","portableDescriptorMeaningSnapshot(descriptor)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DescriptorHashStore.js — persists approved tool/resource/prompt descriptor hashes IDB side, so a \"rug pull\" (descriptor silently changing after the user approved it) is detected across sessions, not just within one runtime (that in memory check is webgpu os/kernel/tools/MetadataRugPullDetector.js). Hashing reuses the same SHA 256 primitive as packages/PackageVerifier.js (contentHashHex from engine/core/math/ChecksumMath.js) rather than a new hashing routine. Storage reuses the generic 'kv' IndexedDB store (see storage/IndexedDBDriver.js) instead of adding a new object store/migration. Classes Method Signature Summary Canonical SHA 256 hex hash of a tool/resource/prompt descriptor's meaning bearing fields. Stable signed contract hash used by Faculty manifests. Release builds may minify function spelling, so this projection uses the declared, package signed implementationHash when one is present. It must never be used for live approval or rug pull checks; hashDescriptor() binds the exact callable code for those decisions. Atomically bind a live descriptor to a package policy verified ring 0 Faculty revision. The exact handler/verifier text is a per runtime tamper canary. Durable authority comes from the package signed portable descriptor, which deliberately survives raw/minified emission changes. A clean runtime may therefore rebind a verified emission, while an exact callback change observed by this store instance is always rejected. Compare a descriptor's current hash against the last approved one. Functions Complete approval identity for a callable descriptor. This intentionally includes authority, mutability, effect, provenance, timeout, and executable source fields so","contentHash":"d68a55165fe5bbc1c0cfdc97cf9005617fdc359a38acf53c4c625152e90d6508"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/attestation/DescriptorHashStore.md::0001","path":"webgpu-os/reference/kernel/attestation/DescriptorHashStore.md","title":"kernel/attestation/DescriptorHashStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/attestation/DescriptorHashStore.js","updated":"","headings":["kernel/attestation/DescriptorHashStore.js","Classes","class DescriptorHashStore","Functions","descriptorMeaningSnapshot(descriptor)","portableDescriptorMeaningSnapshot(descriptor)","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"approval identity for a callable descriptor. This intentionally includes authority, mutability, effect, provenance, timeout, and executable source fields so retaining the same JSON input schema cannot conceal a more dangerous implementation after approval. Package portable descriptor identity for signed Faculty manifests only. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"1c8dbcb45e6c14ef4915199f5346af9eb5808019e0e466e95acd72b9f53afda6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/attestation/DescriptorSanitizer.md::0000","path":"webgpu-os/reference/kernel/attestation/DescriptorSanitizer.md","title":"kernel/attestation/DescriptorSanitizer.js","description":"","kind":"reference","source":"webgpu-os/kernel/attestation/DescriptorSanitizer.js","updated":"","headings":["kernel/attestation/DescriptorSanitizer.js","Classes","class DescriptorSanitizer","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DescriptorSanitizer.js — static scanner for tool/resource/prompt descriptors: flags prompt injection strings in description/schema text, reuses HiddenParameterDetector (Phase 3) for undeclared/suspicious parameters instead of a parallel implementation, and flags a mismatch between a tool's self declared risk and its AffordanceRegistry declared risk. Classes Method Signature Summary True if a tool understates its own risk relative to its declared affordance risk. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d9ae4900ebedf7db392d4149c255fcaf86b158d469535b3f7b059f30ede0527a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/attestation/DryRunManager.md::0000","path":"webgpu-os/reference/kernel/attestation/DryRunManager.md","title":"kernel/attestation/DryRunManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/attestation/DryRunManager.js","updated":"","headings":["kernel/attestation/DryRunManager.js","Classes","class DryRunManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DryRunManager.js — thin wrapper over engine/state/worldmodel/PredictionSandbox.js (rollout/plan, confidence decay) — no new dry run engine. Lets a tool call's declared predictedEffects (AffordanceRegistry, Phase 3) be previewed against a state snapshot WITHOUT ever touching canonical state. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"35709e38b8c4235cb800f01dca8d4126a9f7094bcb7209538aff0f9d9f850c61"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/attestation/ParameterPreviewer.md::0000","path":"webgpu-os/reference/kernel/attestation/ParameterPreviewer.md","title":"kernel/attestation/ParameterPreviewer.js","description":"","kind":"reference","source":"webgpu-os/kernel/attestation/ParameterPreviewer.js","updated":"","headings":["kernel/attestation/ParameterPreviewer.js","Classes","class ParameterPreviewer","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParameterPreviewer.js — resolves a tool call args object into a human safe preview: sensitive looking values (key/secret/token/password/ credential) are masked and long strings are truncated, so an approval UI (Phase 8's ApprovalCard) can show \"what will actually be sent\" without ever rendering raw secrets to the screen. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"9630a18788e84e65e5dc18ec9942d0e0a22a3767f72e2f6e0e5b419a3ee305e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/drivers/LLMDriver.md::0000","path":"webgpu-os/reference/kernel/drivers/LLMDriver.md","title":"kernel/drivers/LLMDriver.js","description":"","kind":"reference","source":"webgpu-os/kernel/drivers/LLMDriver.js","updated":"","headings":["kernel/drivers/LLMDriver.js","Classes","class LLMDriver","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e151e9c7fc97bd43e76f69df581b3b04e9a9626150dd1425d1c46596f7b18bd7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/drivers/WebGPUAmbientDriver.md::0000","path":"webgpu-os/reference/kernel/drivers/WebGPUAmbientDriver.md","title":"kernel/drivers/WebGPUAmbientDriver.js","description":"","kind":"reference","source":"webgpu-os/kernel/drivers/WebGPUAmbientDriver.js","updated":"","headings":["kernel/drivers/WebGPUAmbientDriver.js","Functions","createWebGPUParticleDriver()","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Factory: returns an AmbientEngine driver object { apply, destroy }. Internal simulation state is held in a closure and fully reset between mounts. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"0026f365df7281b38f56d629443d873c41e50f293e04c030159e946651664b3a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/ActiveTurnCoordinator.md::0000","path":"webgpu-os/reference/kernel/execution/ActiveTurnCoordinator.md","title":"kernel/execution/ActiveTurnCoordinator.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/ActiveTurnCoordinator.js","updated":"","headings":["kernel/execution/ActiveTurnCoordinator.js","Classes","class ActiveTurnCoordinator","Functions","classifySteeringMessage(value)","classifySteeringImpact(kind, value = '')","classifySteeringDelivery(kind, value = '', { progressEstimate = null } = {})","createTaskCheckpointEnvelope(raw = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ActiveTurnCoordinator.js — bounded, provider neutral user steering for one active AI executor request. It owns ordering and deduplication only; kernel policy, tool approval, persistence, and model dispatch remain elsewhere. Classes Method Signature Summary Return an already admitted steering event without spending a model call. Admit a non authoritative model interpretation of an otherwise ambiguous steering message. The coordinator still owns delivery, task invalidation, cancellation, and ordering. A low confidence or malformed interpretation degrades to the deterministic additive classification. Functions Describe which cached work a steering message invalidates. This is a data decision only; it never widens authority or silently approves a new target. Select when one operator instruction should affect an active task. This is deliberately a score of the instruction/task relationship, never a score of the person. It is deterministic, local, content free in diagnostics, and grants no authority. The task Storylet consumes the resulting delivery mode at its next transition. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6bc1021f3ef5521ab09ed4bd51e00bd87d0524e28bfe3081cf2ef3f533946f23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/AuditLog.md::0000","path":"webgpu-os/reference/kernel/execution/AuditLog.md","title":"kernel/execution/AuditLog.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/AuditLog.js","updated":"","headings":["kernel/execution/AuditLog.js","Classes","class AuditLog","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AuditLog.js — thin audit VIEW over the same shared EventLog used by the Phase 7 Time Engine (one log, not two): filters to commit/receipt/ledger events via the existing TimelineExporter, with chain verification attached. Classes Method Signature Summary Audit relevant entries (tamper evident: chain verification included). Commit receipts only. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"b6818adea42ae2f96940d3c93c0a0a5f8c0fa66ffa3574508ff482cff54babf3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/BrowserNativeJavaScriptVerifier.md::0000","path":"webgpu-os/reference/kernel/execution/BrowserNativeJavaScriptVerifier.md","title":"kernel/execution/BrowserNativeJavaScriptVerifier.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/BrowserNativeJavaScriptVerifier.js","updated":"","headings":["kernel/execution/BrowserNativeJavaScriptVerifier.js","Functions","async verifyBrowserNativeJavaScript({ path = '', content = '', sourceRevision = '', rulesHash = '', knownFiles = null, knownDependencies = null, parserAdapters = {}, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Non executing browser verifier for JavaScript, TypeScript, JSX, and TSX. Browser engines expose a non executing parser only for classic JavaScript through Function construction. Module, TypeScript, and JSX verification must therefore use an explicitly supplied parser adapter or remain inconclusive. Lexical balance is always reported separately and is never promoted to parse evidence. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"02a589340244356904ec79d8117472fb73c2c3c21166711bc6c89350e747b4aa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/BudgetLimiter.md::0000","path":"webgpu-os/reference/kernel/execution/BudgetLimiter.md","title":"kernel/execution/BudgetLimiter.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/BudgetLimiter.js","updated":"","headings":["kernel/execution/BudgetLimiter.js","Classes","class BudgetLimiter","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BudgetLimiter.js — wraps engine/state/authority/PolicyEngine.js (ordered rules, deny overrides allow, risk classification, approval required) for AI request/tool call/commit policy, plus per request step budgets via the Phase 7 CooldownManager's BoundedCounterEscrow. Classes Method Signature Summary Add an app/deployment specific policy rule (evaluated in order; DENY overrides). Open a step budget for a request. Charge n steps against a request's budget. @returns {{ ok:boolean, reason:string null }} Record locally verified progress. Provider prose must never call this. Grant the one pre reserved extension after verified progress. This uses only the executor's step escrow and cannot consume Navi verification or compensation resource lanes. Re exports , <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bf81947dd6ce7bd96fa5531ec83085284b22f9720b218cfcc1c365ebea88df76"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/CommitGate.md::0000","path":"webgpu-os/reference/kernel/execution/CommitGate.md","title":"kernel/execution/CommitGate.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/CommitGate.js","updated":"","headings":["kernel/execution/CommitGate.js","Classes","class OSCommitGate","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CommitGate.js — the OS's ONE commit path: wraps engine/state's createCommitCoordinator (the 14 step atomic protocol) and createCommitGate (lightweight fact only commits) over the SHARED Phase 7 stores — the same FactStore, EventLog, USORegistry (CooldownManager's), IdempotencyRegistry, and the Phase 4 CapabilityRegistry. Nothing AI produced becomes canonical except through here. Classes Method Signature Summary Full 14 step atomic commit of a sealed transaction envelope against the shared canonical FactStore. Lightweight fact only commit (no USOs/capabilities/envelope) through CommitGate; merges the committed store back on success. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c4870b4786bcc9e131f4358742c95980bb63ebc7b5a929ed504317c8bbbdae21"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/ContextBroker.md::0000","path":"webgpu-os/reference/kernel/execution/ContextBroker.md","title":"kernel/execution/ContextBroker.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/ContextBroker.js","updated":"","headings":["kernel/execution/ContextBroker.js","Classes","class ContextBroker","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ContextBroker.js — wraps engine/state/worldmodel/BeliefStore.js: one BeliefStore per AI request keeping the five worlds strictly separated (CANONICAL/OBSERVED/BELIEF/PREDICTED/PROPOSED). A belief or prediction can NEVER become canonical here — syncCanonical() is only called by the execution loop AFTER a witnessed commit. Classes Method Signature Summary ONLY after a witnessed commit (rule 47). Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e2c94489665a17c439ad815703487979242ef1e696e5be5b7fbbb7e047e8f18b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/DodadForge.md::0000","path":"webgpu-os/reference/kernel/execution/DodadForge.md","title":"kernel/execution/DodadForge.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/DodadForge.js","updated":"","headings":["kernel/execution/DodadForge.js","Functions","classifyDodadForgeRecipe(prompt = '')","buildDodadForgeBlueprint(prompt = '', { decision = null } = {})","buildDodadForgeAuthoringPrompt(prompt = '', { failures = [] } = {})","parseDodadForgeProject(value, { prompt = '', blueprint = null } = {})","validateDodadForgeProject(input = {}, { prompt = '', blueprint = null } = {})","async verifyDodadForgeProjectRuntime(project, { timeoutMs = RUNTIMETIMEOUTMS } = {})","scoreDodadForgeProject({ html = '', css = '', javascript = '', manifest = null, recipe: selectedRecipe = null, blueprint = null } = {})","async verifyDodadJavaScriptWorker(source, { timeoutMs = WORKERTIMEOUTMS } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DodadForge.js — OS owned project contracts for interactive AI Echo outputs. Provider text is never executed directly. The forge accepts one explicit four file envelope, validates it as data, and runs declared behavior only in an opaque, network blocked iframe before the existing signed Dodad Faculty is allowed to persist the project. Functions Build a deterministic specialist handoff for one Dodad request. Roles are responsibility slices inside one bounded episode, not agents and not authority. Only patterns whose trigger evidence is present are loaded. Deterministic quality projection; blockers cover recipe defining behavior only. Compile and execute only the Dodad's top level JavaScript inside a killable Worker with inert DOM shims. Runtime deltas are never executed. A hung or syntactically invalid script is terminated before the DOM sandbox opens. Constants — DodadForge.js — OS owned project contracts for interactive AI Echo outputs. Provider text is never executed directly. The forge accepts one explicit four file envelope, validates it as data, and runs declared behavior only in an opaque, network blocked iframe before the existing signed Dodad Faculty is allowed to persist the project. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"efe9caa7ff3bcb2309187e7737a98ce9115ba66402a15282edc41bdd07441124"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/ExecutionApprovalMode.md::0000","path":"webgpu-os/reference/kernel/execution/ExecutionApprovalMode.md","title":"kernel/execution/ExecutionApprovalMode.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/ExecutionApprovalMode.js","updated":"","headings":["kernel/execution/ExecutionApprovalMode.js","Functions","normalizeExecutionApprovalMode(value)","executionApprovalRepeatProfile(review, { appId = '', naviId = '' } = {})","decideExecutionApproval({ mode, review, priorReceipt = null } = {})","eligibleForVerifiedRepeat(review)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Deterministic execution approval modes. This module decides whether an already reviewed tool action still needs an operator prompt. It never grants authority: ToolActionReview, ToolRouter, Navi Faculty capability leases, workspace roots, and mounted folder scopes remain authoritative for every call. Functions Content free identity for a repeatable approval scope. Arguments are intentionally omitted: changed values may repeat only when the tool, descriptor, authority, data classes, and exact target scope are unchanged. Decide only the prompt behavior for an action that has already passed the OS review. must be an OS recorded successful call for the same repeat profile; model recommendations never substitute for it. Constants — Deterministic execution approval modes. This module decides whether an already reviewed tool action still needs an operator prompt. It never grants authority: ToolActionReview, ToolRouter, Navi Faculty capability leases, workspace roots, and mounted folder scopes remain authoritative for every call. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"2a2dd891a1b715c8845747da1b41694fcfcb9095083e0d3b6aca59251dc22d57"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/ExecutionHorizonPolicy.md::0000","path":"webgpu-os/reference/kernel/execution/ExecutionHorizonPolicy.md","title":"kernel/execution/ExecutionHorizonPolicy.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/ExecutionHorizonPolicy.js","updated":"","headings":["kernel/execution/ExecutionHorizonPolicy.js","Classes","class ExecutionHorizonPolicy","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Pure adaptive execution window policy. It has no authority vocabulary and can only reduce caller supplied action/concurrency ceilings. Descriptor risk and reversibility dominate calibration: confidence never changes approval, capability, tool selection, or the static execution ceiling. Callers must enforce the returned action and mutation limits as hard dispatch boundaries. Classes Method Signature Summary Decide whether one more descriptor authorized action fits inside an already selected horizon. This is deliberately authority free: it can only reject work after a caller ceiling or mutation observation boundary has been reached. Constants — Pure adaptive execution window policy. It has no authority vocabulary and can only reduce caller supplied action/concurrency ceilings. Descriptor risk and reversibility dominate calibration: confidence never changes approval, capability, tool selection, or the static execution ceiling. Callers must enforce the returned action and mutation limits as hard dispatch boundaries. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bf6093839126c8936558963de9494b68735f05dd71f49b6980e39d914abf0870"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/JavaScriptExecutionGrant.md::0000","path":"webgpu-os/reference/kernel/execution/JavaScriptExecutionGrant.md","title":"kernel/execution/JavaScriptExecutionGrant.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/JavaScriptExecutionGrant.js","updated":"","headings":["kernel/execution/JavaScriptExecutionGrant.js","Classes","class JavaScriptExecutionGrantError extends Error","Functions","inspectJavaScriptApiUsage(source)","resolveJavaScriptPermittedApis(source, permittedApis = null)","async hashJavaScriptSource(source)","async hashJavaScriptNavigationGeneration({ tabId, url, pendingUrl = '', status = '' } = {})","async createJavaScriptApprovalBinding({ source, permittedApis = null, surface = 'browser-page', world = surface === 'os-worker' ? 'WORKER' : 'USERSCRIPT', tabId = null, naviId = '', facultyId = '', taskId = '', requestId = '', } = {})","async createJavaScriptExecutionGrant({ source, permittedApis = null, surface = 'browser-page', world = surface === 'os-worker' ? 'WORKER' : 'USERSCRIPT', target = null, naviId = '', facultyId = '', taskId = '', requestId = '', issuedAt = Date.now()","async verifyJavaScriptExecutionGrant(grant, { source, permittedApis = null, surface = 'browser-page', world = surface === 'os-worker' ? 'WORKER' : 'USERSCRIPT', target = null, naviId = '', facultyId = '', taskId = '', requestId = '', now = Date.now()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: JavaScriptExecutionGrant.js — exact source, short lived execution binding. This contract narrows an already authorized raw JavaScript tool call. It is not an authority source: ToolRouter, the Faculty capability grant, OS policy, developer mode, and the browser extension approval boundary still decide whether execution is allowed. Classes Method Signature Summary Functions Return the conservative, inspectable API categories visible in source. Normalize a caller declared API allowance and ensure it covers every API category the conservative source scan can observe. Omission selects the observed set, keeping existing developer only calls compatible. Hash the observable browser navigation identity without publishing its URL. Build the exact source/API projection embedded in ToolActionReview. Create one exact, bounded runtime grant after the target has been observed. Recompute every meaning bearing field and reject expired or altered grants. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"793a60d498573d6d3e0f1bc940eb5fb0c8ae6b7c7e855aad61066ec453c56b27"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/NaviContextRollover.md::0000","path":"webgpu-os/reference/kernel/execution/NaviContextRollover.md","title":"kernel/execution/NaviContextRollover.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/NaviContextRollover.js","updated":"","headings":["kernel/execution/NaviContextRollover.js","Classes","class NaviContextRolloverError extends Error","class NaviContextRollover","Functions","async createNaviContextRollover(raw = {}, options = {})","async validateNaviContextRollover(value)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Compact, derived task context for rollover between bounded execution turns. The projection contains identifiers, hashes, classifications, and counts only. It has no persistence and rejects raw content, tool arguments, or reasoning. Classes Method Signature Summary Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"1ce7147ba96b63f03950a71e8a88350ee18bbff19aa9f54f051011306fd4d551"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/NaviExplainabilityProjection.md::0000","path":"webgpu-os/reference/kernel/execution/NaviExplainabilityProjection.md","title":"kernel/execution/NaviExplainabilityProjection.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/NaviExplainabilityProjection.js","updated":"","headings":["kernel/execution/NaviExplainabilityProjection.js","Functions","projectNaviWhy(raw = {})","projectNaviResourceSelectionExplanation(rawSelection)","async projectNaviSmartRoutingExplanation(raw = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviExplainabilityProjection.js — compact, authority free explanations derived from records the OS already owns. This module has no persistence and never accepts provider reasoning. It projects task state, steering, routing, tool outcomes, verification, and receipts into inspectable local evidence. Functions Explain one active or completed Navi task from its existing projections and ledgers. is the TaskLedger FinalReport (or its durable compact form), and is ActiveTurnCoordinator.snapshot(). No record is written. Project one signed/validated resource selection receipt without re ranking. Explain an exact NaviModelBroker decision, including excluded routes and the smallest policy/settings change that could make each route eligible. The explanation is derived after routing and cannot alter the decision. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c5c3b74d386af54c214e63b2367623c206b25c53d9a03a60e2093d05820e838a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/NaviProposalEnvelope.md::0000","path":"webgpu-os/reference/kernel/execution/NaviProposalEnvelope.md","title":"kernel/execution/NaviProposalEnvelope.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/NaviProposalEnvelope.js","updated":"","headings":["kernel/execution/NaviProposalEnvelope.js","Functions","async createEvidenceBoundProposal(value = {})","async validateEvidenceBoundProposal(proposal)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviProposalEnvelope.js — binds a proposed change to observed evidence, explicit inferences, unresolved questions, an exact target revision, and deterministic verification/compensation. A proposal has no authority by itself and must still pass the normal review and capability path. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"5d376c36b4653dc3d2cddaf7cb7a434e67f76d51378e01dee9e82fedd0da28d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/NaviTaskGraphCheckpoint.md::0000","path":"webgpu-os/reference/kernel/execution/NaviTaskGraphCheckpoint.md","title":"kernel/execution/NaviTaskGraphCheckpoint.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/NaviTaskGraphCheckpoint.js","updated":"","headings":["kernel/execution/NaviTaskGraphCheckpoint.js","Classes","class NaviTaskGraphCheckpointError extends Error","class NaviTaskGraphCheckpointStore","Functions","async createNaviTaskGraphCheckpoint(raw = {})","async validateNaviTaskGraphCheckpoint(value)","async validateNaviTaskGraphCheckpointTransition(raw = {})","async classifyNaviTaskGraphResume(raw = {})","checkpointKeyForTask(taskId)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Durable, content free checkpoints for compiled Navi task graphs. This module neither executes nor replays graph nodes. Persistence is supplied by an exact key adapter with one read and one compare and swap operation. Classes Method Signature Summary Method Signature Summary Functions Enforce task lifetime monotonicity for the mutation ledger. Completed tombstones are immutable. Outcome unknown tombstones may resolve to a completed tombstone, or be removed by an exact current mutation node whose failed outcome is explicitly verifier bound. Generic failures never evict. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"0ad238e5ee31ac71b2258f1fd38847f5ce1250ad051b64744ff961d43a657b3e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/NaviTaskGraphCompiler.md::0000","path":"webgpu-os/reference/kernel/execution/NaviTaskGraphCompiler.md","title":"kernel/execution/NaviTaskGraphCompiler.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/NaviTaskGraphCompiler.js","updated":"","headings":["kernel/execution/NaviTaskGraphCompiler.js","Classes","class NaviTaskGraphCompilerError extends Error","class NaviTaskGraphCompiler","Functions","async validateCompiledTaskGraph(graph)","classifyTaskGraphChange(previousGraph, nextGraph)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviTaskGraphCompiler.js — deterministic compiler for model proposed tool plans. A compiled graph is evidence, never authority: every node still enters ToolActionReview, ToolRouter, and the Faculty membrane before it can execute. Classes Method Signature Summary Method Signature Summary Compile twice, compare canonical bytes, then retain the exact last good graph. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"248894747ac31a402af0ab0d2f46c13c295a6d85b3b3505909f693f4636fc8dc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/NaviTaskStateProjection.md::0000","path":"webgpu-os/reference/kernel/execution/NaviTaskStateProjection.md","title":"kernel/execution/NaviTaskStateProjection.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/NaviTaskStateProjection.js","updated":"","headings":["kernel/execution/NaviTaskStateProjection.js","Functions","createNaviTaskStateProjection(raw = {})","evolveNaviTaskStateProjection(current, patch = {}, { now = Date.now()","acceptNaviTaskSteering(current, event, options = {})","setNaviTaskCurrentAction(current, action, options = {})","completeNaviTaskWork(current, work, options = {})","setNaviTaskPendingApproval(current, approval, options = {})","clearNaviTaskApproval(current, approvalId, options = {})","syncNaviTaskRuntime(current, { executorPhase, status = null, remainingBudget = null, artifacts = null, planRef = undefined, contextManifestRef = undefined, resourceSelectionRef = undefined, investigationCaseRef = undefined, goalProgress = null, } = {}, options = {})","naviTaskPhaseForExecutor(value)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviTaskStateProjection.js — immutable, schema validated runtime projection for one active Navi task. Canonical task persistence remains NaviCognition; this module projects inspectable live state for streams and in flight views. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"3139af13e55e1087e5075ef50ec50873b9238b550c33862e723e0a41fc3e6905"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/PrivacyGuard.md::0000","path":"webgpu-os/reference/kernel/execution/PrivacyGuard.md","title":"kernel/execution/PrivacyGuard.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/PrivacyGuard.js","updated":"","headings":["kernel/execution/PrivacyGuard.js","Classes","class PrivacyGuard","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PrivacyGuard.js — scrubs context before it leaves the OS toward a remote model provider: sensitive looking values are masked (reuses Phase 5's ParameterPreviewer — one masking implementation), obvious credential literals in free text are redacted, and payload size is capped. Classes Method Signature Summary Deterministically classify secret like text before provider routing. Findings contain rule identifiers only, never matching credential text. Scrub a value for inclusion in an outbound prompt. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"45e6c5c012fdfb55b4b75d94382b4269df31dd46a85aa6414f8a2e8be5892737"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/RepairLoop.md::0000","path":"webgpu-os/reference/kernel/execution/RepairLoop.md","title":"kernel/execution/RepairLoop.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/RepairLoop.js","updated":"","headings":["kernel/execution/RepairLoop.js","Classes","class RepairLoop","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RepairLoop.js — malformed model output repair: first a local structural extraction (strip code fences, isolate the outermost JSON object/array), then target shape validation and at most one model assisted repair pass on the selected route's fast tier. Repair duration is operator controlled: steering may supersede it and Stop aborts it. The route/attempt policy stays bounded, and wrong schema JSON is never accepted merely because it parses. Classes Method Signature Summary Best effort local JSON extraction. @returns { } parsed value or null Explain incomplete provider output without misclassifying it as malformed JSON. Repair malformed output: local extraction, then one model assisted pass. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c2856a1a79e6426be7db5f350f6472f07e406f5f675188284d6265e40c3c6d6a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/RunEventStreamRegistry.md::0000","path":"webgpu-os/reference/kernel/execution/RunEventStreamRegistry.md","title":"kernel/execution/RunEventStreamRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/RunEventStreamRegistry.js","updated":"","headings":["kernel/execution/RunEventStreamRegistry.js","Classes","class RunEventStreamRegistry","class RunEventStreamGapError extends Error","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel owned resumable event streams for AI executions. App callbacks are only a live view. This registry assigns monotonic sequence numbers, buffers bounded events, and supports same owner replay after an app remount or transient UI failure. Durable history remains in FinalReport. Classes Kernel owned resumable event streams for AI executions. App callbacks are only a live view. This registry assigns monotonic sequence numbers, buffers bounded events, and supports same owner replay after an app remount or transient UI failure. Durable history remains in FinalReport. Method Signature Summary Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"04df4eda2cb4986c3545f7c9f194efa31c8d7185c63f834f36e6d01239b6aa92"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/SemanticEffectContract.md::0000","path":"webgpu-os/reference/kernel/execution/SemanticEffectContract.md","title":"kernel/execution/SemanticEffectContract.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/SemanticEffectContract.js","updated":"","headings":["kernel/execution/SemanticEffectContract.js","Classes","class SemanticEffectContractError extends Error","Functions","async compileDescriptorPostcondition({ descriptor, descriptorHash, args = {}, } = {})","async validateSemanticPostcondition(value)","async validateSemanticInvocation(postcondition, { descriptorHash, args = {} } = {})","async createExecutionPrestate({ graphHash, sourceHash, nodeId, dependencies = [], } = {})","async validateExecutionPrestate(value)","async compareSemanticEffects({ postcondition, prestate, receiptEvidence = null, observedEffects = null, resultOk = false, } = {})","projectSemanticNodeOutcome({ nodeId, graphHash, sourceHash, comparison, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SemanticEffectContract.js Pure, authority free compilation and comparison for descriptor authored postconditions. The model never supplies these contracts. Exact contracts are declared by trusted tool descriptors and are bound to the descriptor, arguments, graph prestate, and verified Faculty receipt before comparison. Durable projections contain hashes and bounded counts, never tool arguments or effect values. Classes Method Signature Summary Functions Compile a trusted descriptor's effect declaration into a value free graph postcondition. Legacy descriptors remain receipt/success bound; only the explicit closed contract enables exact semantic comparison. Bind a live invocation to the graph authored descriptor and argument hashes. Bind a node's comparison to the graph and exact terminal evidence of each dependency. No provider visible text or raw values enter this projection. Compare trusted readback effects with descriptor authored expectations. must be the kernel created verified Faculty projection for exact and mutation comparisons; caller supplied receipt shaped data cannot acquire authority through this pure function. Compact semantic node outcome consumed by checkpoint/episode projections. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e16b090af7fce3b801f95271675997f5281d70f35edcbe9faf10b9f997bd7b41"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/SemanticTransaction.md::0000","path":"webgpu-os/reference/kernel/execution/SemanticTransaction.md","title":"kernel/execution/SemanticTransaction.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/SemanticTransaction.js","updated":"","headings":["kernel/execution/SemanticTransaction.js","Classes","class SemanticTransactionError extends Error","class SemanticTransactionCoordinator","Functions","async hashSemanticTransactionValue(value)","async chooseSemanticTransactionConflict(conflict, choice)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SemanticTransaction.js — deterministic multi target preview/commit contract. The coordinator never writes storage itself. Callers provide one atomic commit callback that must recheck every expected revision/hash in the same critical section as its writes. This module validates that exact request, emits explicit conflict choices, and creates a hash bound undo record. Classes Method Signature Summary Method Signature Summary Build an immutable, deterministic semantic diff preview. Re read every target and invoke exactly one atomic commit callback. Conflicts are returned as inspectable records; the callback is never run. Apply the hash bound inverse only if the committed targets are unchanged. Functions Bind one explicit UI choice to the exact conflict record. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8551e0d39d22645052c5f0deab3ab858c4bbaed864e1135c656ef8ba565267c9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/TaskProgressEstimator.md::0000","path":"webgpu-os/reference/kernel/execution/TaskProgressEstimator.md","title":"kernel/execution/TaskProgressEstimator.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/TaskProgressEstimator.js","updated":"","headings":["kernel/execution/TaskProgressEstimator.js","Functions","classifyTaskEstimateProfile(prompt = '', taskKind = '')","createTaskProgressEstimate({ prompt = '', taskKind = '', estimatedInputTokens = null, routeAverageMs = null, routeSampleCount = 0, now = Date.now()","updateTaskProgressEstimate(current, event = {}, now = Date.now()","taskProgressEstimateLabel(value)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TaskProgressEstimator.js — deterministic, content free duration and progress estimates for an active Navi task. Estimates are ranges, never deadlines. They consume local prompt signals, historical route timing, and OS events; they do not call a model and never grant authority. Functions Constants — TaskProgressEstimator.js — deterministic, content free duration and progress estimates for an active Navi task. Estimates are ranges, never deadlines. They consume local prompt signals, historical route timing, and OS events; they do not call a model and never grant authority. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bf6cd4a8c8b15d5a58c32db03b9c44ea7b8403ea26cb80cc719700fde9c50376"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/TaskProgressGuard.md::0000","path":"webgpu-os/reference/kernel/execution/TaskProgressGuard.md","title":"kernel/execution/TaskProgressGuard.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/TaskProgressGuard.js","updated":"","headings":["kernel/execution/TaskProgressGuard.js","Classes","class TaskProgressGuard","Functions","verifiedToolProgressFingerprint(results, toolDriver = null)","statusToolFingerprint(results)","semanticToolRoundFingerprint(results)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TaskProgressGuard.js — bounded semantic progress detection for iterative AI work. The guard observes fingerprints only; it never executes tools, grants authority, persists state, or decides that unverified provider prose is work. Classes Method Signature Summary Observe one bounded execution round. must come from locally observed successful work. A new value resets stagnation counters; provider claims alone must omit it. Functions Return a stable fingerprint only for successful, locally observed progress. Fingerprint a round made entirely from status/polling tools. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"2df76e7f6f0228bad0ca5ac9ffd6d2147359e47f3c1e93c566746304b43ab2af"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/ToolActionReview.md::0000","path":"webgpu-os/reference/kernel/execution/ToolActionReview.md","title":"kernel/execution/ToolActionReview.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/ToolActionReview.js","updated":"","headings":["kernel/execution/ToolActionReview.js","Classes","class ToolActionReview","Functions","async reviewToolAction({ tool, args = {}, policy = null, appId = '', requestId = '', naviId = '', facultyId = '', taskId = '', proposal = null, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ToolActionReview.js — deterministic pre approval inspection for one exact AI tool call. This is an explanatory safety layer, not an authority source: BudgetLimiter policy and the ToolRouter capability boundary remain final. Classes Method Signature Summary Functions Review one exact tool descriptor and argument object before approval. Parameters: (object) — No description in source JSDoc. (object) — live ToolDriver descriptor (object) — exact model supplied arguments (object) — BudgetLimiter/PolicyEngine decision (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (string) — No description in source JSDoc. (object null) — already created evidence bound proposal Returns: deeply frozen, deterministic review projection Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"3f33ba7cdaab7a305a324c2aa0da2b5a74005b4cf6e45a1164dae6201eaaf6f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/TransactionManager.md::0000","path":"webgpu-os/reference/kernel/execution/TransactionManager.md","title":"kernel/execution/TransactionManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/TransactionManager.js","updated":"","headings":["kernel/execution/TransactionManager.js","Classes","class TransactionManager","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TransactionManager.js — wraps engine/state/transaction/Transaction.js (makeTransaction/sealTransaction) for the OS.ai() request/commit envelope, and engine/state/transaction/ProposalPool.js for candidate proposal management (competing proposals over the same exclusive inputs pick a deterministic winner; losers re observe and re plan — never silently overwritten). Classes Method Signature Summary Build + seal a transaction envelope. Submit a sealed envelope as a commit candidate. Resolve contention deterministically. @returns {{ winners:object[], superseded:object[] }} Build a deterministic multi target semantic preview. Commit one exact preview through the caller's atomic storage callback. Apply a receipt's exact compensation record through the same callback boundary. Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"79852129b54483c844535c4f467c4294312bf8853b3b705adb2b5531d627922a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/TwoPassPlannerFinalizer.md::0000","path":"webgpu-os/reference/kernel/execution/TwoPassPlannerFinalizer.md","title":"kernel/execution/TwoPassPlannerFinalizer.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/TwoPassPlannerFinalizer.js","updated":"","headings":["kernel/execution/TwoPassPlannerFinalizer.js","Classes","class TwoPassPlannerFinalizer","Functions","normalizeActiveGuidanceProjection(value)","normalizeAIExecutorAppContextCandidates(value)","selectActiveGuidanceForTool(activeGuidance, toolName)","taskGraphRuntimeInvalidation(previousGraph, nextGraph, { approvalCount = 0, toolResults = [], } = {})","taskScopeInvalidatesApprovals(impact)","classifyToolRoundReplanning(results = [])","naviModelRoutePreflightError(decision, requirements = {}, route = {})","providerToolTransportFallbackEligible(error, request = {})","compileNaviModelCompatibilityRequirements(rawRequest = {}, base = {})","applyNaviModelProviderContract(rawRequest = {}, purpose = 'chat')","strictOutputSchemaPortabilityErrors(rawSchema)","canonicalInvestigationArgumentHash(args)","isStrictInvestigationReadDescriptor(descriptor)","selectInvestigationForPrompt({ objective, taskKind = '', goalType = '' } = {})","normalizeInvestigationFrameResponse(value)","normalizeInvestigationObservationPlan(value)","normalizeInvestigationAssessmentResponse(value, observationIds, caseRecord)","async validateInvestigationReadReceipt({ kernel, ws, result, descriptorHash, argumentHash, dataClassification, caseId = null, } = {})","investigationEvidenceProjection(evidence, cycle)","resolveInvestigationDataClassification(descriptor)","parseSteeringModelClassification(value)","validatePlannerTransportEnvelope(value)","validatePlannerTransportResponse(value)","plannerResultTransportCandidate(result)","plannerTransportShapeEvidence(value)","plannerTransportRejection(error, retainedText)","normalizePlannerOutput(value)","normalizePlannerResponse(text)","isDirectConversationPrompt(value)","hasLivePatchMutationIntent(value)","hasExplicitLivePatchIntent(value)","hasSavedArtifactIntent(text)","savedArtifactPreferredKind(text)","savedArtifactIntentProfile(text)","savedArtifactPlannerFormatContract(text)","prioritizeRequiredPlannerTools(toolDescs, requiredNames = [])","classifySavedArtifactPlanSteps(steps, pending = false, { preferredKind = '' } = {})","buildSavedArtifactWebFiles({ title = 'AI Echo Artifact', authoredHtml = '' } = {})","savedArtifactFallbackTitle(text)","normalizeSavedArtifactFallbackContent(value, { kind = 'document' } = {})","hasWorkspaceOutputLookupIntent(text)","workspaceOutputSearchAssessment(toolResults)","isWorkspaceOutputMissingClaim(text)","unattemptedObligationEvidence(obligation, toolDescription)","isExplicitSavedArtifactRefusal(text)","currentUserPromptForRouting(value)","livePatchRoutingText(value)","normalizeFinalizerOutput(value, schema = DEFAULTOUTPUTSCHEMA, rawText = '')","readOnlyObservationSignature(results, toolDriver = null)","toolRoundSignature(results)","detectFinalToolEnvelope(answer, toolDriver = null, toolResults = [])","resolveNegotiatedToolName(requestedName, capabilities = [])","resolveNaviExecutionMode(kernel)","plannerOutputParams(params)","jsonOnlyReasoningDirective(model)","isTransientNaviExecutionState(value)","naviCognitionDenialMessage(mode)","waitForNaviExecutionMode(kernel, { timeoutMs = NAVICOGNITIONTRANSIENTWAITMS, signal = null, } = {})","resolveNaviFacultyToolInvocation(toolName, rawArgs = {})","projectVerifiedFacultyOutcomeAck(receiptEvidence, replayed = false)","projectArtifactFileActivity({ toolName = '', args = {}, result = null, phase = 'preparing', errorCode = null, error = null, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TwoPassPlannerFinalizer.js — the Phase 9 execution loop (kernel.aiExecutor). Full flow per OS.ai() task: prompt → goal classify → gather context (roots checked resource reads, PrivacyGuard scrubbed) → capability negotiation (Ph4/Ph5 attestation) → model tier choice → PASS 1 planner (JSON plan; tools executed through the AI Tool Firewall with idempotency keys, policy gating and approval elicitations) → PASS 2 finalizer (strict schema, NO tools) → validator → repair if needed (bounded RepairLoop) → CommitCoordinator commit → Witness receipt → Task Ledger record. The pipeline is driven as Phase 6 storylets over worldState.phase; every fired storylet returns (see AIStoryletFactory) which this loop awaits, then applies via StoryletEffectsApplier. Classes Method Signature Summary Run one AI task end to end. Ask the dedicated free steering lane to classify only an ambiguous operator instruction. The result is advisory: it cannot execute tools, approve actions, cancel work, or choose its own delivery semantics. Ask one exact 2–4 choice task checkpoint through the existing elicitation surface. Deterministic goal classification — no model call needed for routing. Roots checked, scrubbed resource reads → OBSERVED context. Attest + mint per tool capabilities for the negotiated tool set. PASS 1 — planner produces a JSON plan; tools run through the firewall. Complete an explicit saved Artifact obligation without asking a model to serialize a large mutation inside the general planner transport. The model authors ordinary text only. The OS constructs one exact local task graph and still routes the mutation through normal Faculty resolution, approval, ToolRouter execution, readback verification,","contentHash":"c9bf31f708af616ba5bf9ba81eb3486eca09d4a70494d2826f7c97824b6c4ceb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/TwoPassPlannerFinalizer.md::0001","path":"webgpu-os/reference/kernel/execution/TwoPassPlannerFinalizer.md","title":"kernel/execution/TwoPassPlannerFinalizer.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/TwoPassPlannerFinalizer.js","updated":"","headings":["kernel/execution/TwoPassPlannerFinalizer.js","Classes","class TwoPassPlannerFinalizer","Functions","normalizeActiveGuidanceProjection(value)","normalizeAIExecutorAppContextCandidates(value)","selectActiveGuidanceForTool(activeGuidance, toolName)","taskGraphRuntimeInvalidation(previousGraph, nextGraph, { approvalCount = 0, toolResults = [], } = {})","taskScopeInvalidatesApprovals(impact)","classifyToolRoundReplanning(results = [])","naviModelRoutePreflightError(decision, requirements = {}, route = {})","providerToolTransportFallbackEligible(error, request = {})","compileNaviModelCompatibilityRequirements(rawRequest = {}, base = {})","applyNaviModelProviderContract(rawRequest = {}, purpose = 'chat')","strictOutputSchemaPortabilityErrors(rawSchema)","canonicalInvestigationArgumentHash(args)","isStrictInvestigationReadDescriptor(descriptor)","selectInvestigationForPrompt({ objective, taskKind = '', goalType = '' } = {})","normalizeInvestigationFrameResponse(value)","normalizeInvestigationObservationPlan(value)","normalizeInvestigationAssessmentResponse(value, observationIds, caseRecord)","async validateInvestigationReadReceipt({ kernel, ws, result, descriptorHash, argumentHash, dataClassification, caseId = null, } = {})","investigationEvidenceProjection(evidence, cycle)","resolveInvestigationDataClassification(descriptor)","parseSteeringModelClassification(value)","validatePlannerTransportEnvelope(value)","validatePlannerTransportResponse(value)","plannerResultTransportCandidate(result)","plannerTransportShapeEvidence(value)","plannerTransportRejection(error, retainedText)","normalizePlannerOutput(value)","normalizePlannerResponse(text)","isDirectConversationPrompt(value)","hasLivePatchMutationIntent(value)","hasExplicitLivePatchIntent(value)","hasSavedArtifactIntent(text)","savedArtifactPreferredKind(text)","savedArtifactIntentProfile(text)","savedArtifactPlannerFormatContract(text)","prioritizeRequiredPlannerTools(toolDescs, requiredNames = [])","classifySavedArtifactPlanSteps(steps, pending = false, { preferredKind = '' } = {})","buildSavedArtifactWebFiles({ title = 'AI Echo Artifact', authoredHtml = '' } = {})","savedArtifactFallbackTitle(text)","normalizeSavedArtifactFallbackContent(value, { kind = 'document' } = {})","hasWorkspaceOutputLookupIntent(text)","workspaceOutputSearchAssessment(toolResults)","isWorkspaceOutputMissingClaim(text)","unattemptedObligationEvidence(obligation, toolDescription)","isExplicitSavedArtifactRefusal(text)","currentUserPromptForRouting(value)","livePatchRoutingText(value)","normalizeFinalizerOutput(value, schema = DEFAULTOUTPUTSCHEMA, rawText = '')","readOnlyObservationSignature(results, toolDriver = null)","toolRoundSignature(results)","detectFinalToolEnvelope(answer, toolDriver = null, toolResults = [])","resolveNegotiatedToolName(requestedName, capabilities = [])","resolveNaviExecutionMode(kernel)","plannerOutputParams(params)","jsonOnlyReasoningDirective(model)","isTransientNaviExecutionState(value)","naviCognitionDenialMessage(mode)","waitForNaviExecutionMode(kernel, { timeoutMs = NAVICOGNITIONTRANSIENTWAITMS, signal = null, } = {})","resolveNaviFacultyToolInvocation(toolName, rawArgs = {})","projectVerifiedFacultyOutcomeAck(receiptEvidence, replayed = false)","projectArtifactFileActivity({ toolName = '', args = {}, result = null, phase = 'preparing', errorCode = null, error = null, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"constructs one exact local task graph and still routes the mutation through normal Faculty resolution, approval, ToolRouter execution, readback verification, and receipts. Run the OS owned Sherlock episode before the general mutation capable planner. Model output may frame hypotheses and propose observations, but it never receives authority: every observation is re bound to a live read only descriptor, normal authorization, and a signed local receipt. Restore the exact encrypted Sherlock state before any provider dispatch. The persistence order is evidence episode case, so recovery admits only bounded deterministic layouts: a case only genesis, a single evidence first record, or one hash bound episode transition ahead of the case head. Every wider disagreement remains visible and read only. PASS 2 — finalizer (strict schema, NO tools) → validate → commit → receipt. Build the exact descriptor snapshot and integrity head used by planner validation. Normalize and compile a candidate through the same deterministic task graph boundary used immediately before authorization. Repair validation uses an isolated compiler so a rejected candidate cannot become a last good graph merely by being inspected. Bounded JSON repair; routes back to the phase that consumes the repaired value. Assemble the user facing content block (goal + context [+ tool results]). Bound app owned identity/policy context before it enters a system role. Functions Normalize app owned context before it crosses into the Navi task envelope. Applications may contribute only an identifier, a descriptive kind, and bounded text. Classification, authority, ranking, provenance, disclosure, and source hashes are deliberately absent because the kernel owns them. Convert a content free kernel route decision into one","contentHash":"257e5aa3cfc8b0a512012e7263abda9b8ba42f5c0a426024b06bf3db3a17d784"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/execution/TwoPassPlannerFinalizer.md::0002","path":"webgpu-os/reference/kernel/execution/TwoPassPlannerFinalizer.md","title":"kernel/execution/TwoPassPlannerFinalizer.js","description":"","kind":"reference","source":"webgpu-os/kernel/execution/TwoPassPlannerFinalizer.js","updated":"","headings":["kernel/execution/TwoPassPlannerFinalizer.js","Classes","class TwoPassPlannerFinalizer","Functions","normalizeActiveGuidanceProjection(value)","normalizeAIExecutorAppContextCandidates(value)","selectActiveGuidanceForTool(activeGuidance, toolName)","taskGraphRuntimeInvalidation(previousGraph, nextGraph, { approvalCount = 0, toolResults = [], } = {})","taskScopeInvalidatesApprovals(impact)","classifyToolRoundReplanning(results = [])","naviModelRoutePreflightError(decision, requirements = {}, route = {})","providerToolTransportFallbackEligible(error, request = {})","compileNaviModelCompatibilityRequirements(rawRequest = {}, base = {})","applyNaviModelProviderContract(rawRequest = {}, purpose = 'chat')","strictOutputSchemaPortabilityErrors(rawSchema)","canonicalInvestigationArgumentHash(args)","isStrictInvestigationReadDescriptor(descriptor)","selectInvestigationForPrompt({ objective, taskKind = '', goalType = '' } = {})","normalizeInvestigationFrameResponse(value)","normalizeInvestigationObservationPlan(value)","normalizeInvestigationAssessmentResponse(value, observationIds, caseRecord)","async validateInvestigationReadReceipt({ kernel, ws, result, descriptorHash, argumentHash, dataClassification, caseId = null, } = {})","investigationEvidenceProjection(evidence, cycle)","resolveInvestigationDataClassification(descriptor)","parseSteeringModelClassification(value)","validatePlannerTransportEnvelope(value)","validatePlannerTransportResponse(value)","plannerResultTransportCandidate(result)","plannerTransportShapeEvidence(value)","plannerTransportRejection(error, retainedText)","normalizePlannerOutput(value)","normalizePlannerResponse(text)","isDirectConversationPrompt(value)","hasLivePatchMutationIntent(value)","hasExplicitLivePatchIntent(value)","hasSavedArtifactIntent(text)","savedArtifactPreferredKind(text)","savedArtifactIntentProfile(text)","savedArtifactPlannerFormatContract(text)","prioritizeRequiredPlannerTools(toolDescs, requiredNames = [])","classifySavedArtifactPlanSteps(steps, pending = false, { preferredKind = '' } = {})","buildSavedArtifactWebFiles({ title = 'AI Echo Artifact', authoredHtml = '' } = {})","savedArtifactFallbackTitle(text)","normalizeSavedArtifactFallbackContent(value, { kind = 'document' } = {})","hasWorkspaceOutputLookupIntent(text)","workspaceOutputSearchAssessment(toolResults)","isWorkspaceOutputMissingClaim(text)","unattemptedObligationEvidence(obligation, toolDescription)","isExplicitSavedArtifactRefusal(text)","currentUserPromptForRouting(value)","livePatchRoutingText(value)","normalizeFinalizerOutput(value, schema = DEFAULTOUTPUTSCHEMA, rawText = '')","readOnlyObservationSignature(results, toolDriver = null)","toolRoundSignature(results)","detectFinalToolEnvelope(answer, toolDriver = null, toolResults = [])","resolveNegotiatedToolName(requestedName, capabilities = [])","resolveNaviExecutionMode(kernel)","plannerOutputParams(params)","jsonOnlyReasoningDirective(model)","isTransientNaviExecutionState(value)","naviCognitionDenialMessage(mode)","waitForNaviExecutionMode(kernel, { timeoutMs = NAVICOGNITIONTRANSIENTWAITMS, signal = null, } = {})","resolveNaviFacultyToolInvocation(toolName, rawArgs = {})","projectVerifiedFacultyOutcomeAck(receiptEvidence, replayed = false)","projectArtifactFileActivity({ toolName = '', args = {}, result = null, phase = 'preparing', errorCode = null, error = null, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"ranking, provenance, disclosure, and source hashes are deliberately absent because the kernel owns them. Convert a content free kernel route decision into one stable, actionable blocker. Eligibility remains owned by NaviModelBroker; this projection only explains why a zero route decision stopped before disclosure or dispatch. Native provider tool envelopes are an optimization, not an execution authority. If preflight proves that the approved route set cannot carry them, the planner may fall back before disclosure or dispatch to its exact JSON transport. Privacy, policy, and other route failures remain terminal. Compile hard model route requirements from the actual model protocol. Provider tools are an optional ty","contentHash":"534cf1033426a14a64ca015c1c187786e682ebdf9024079db2fad6499010b0b8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/AgentScratchpad.md::0000","path":"webgpu-os/reference/kernel/ledger/AgentScratchpad.md","title":"kernel/ledger/AgentScratchpad.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/AgentScratchpad.js","updated":"","headings":["kernel/ledger/AgentScratchpad.js","Classes","class AgentScratchpad","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AgentScratchpad.js — bounded execution notes for AI requests. This records operational state (plans, actions, observations, failures and phase changes), not hidden model reasoning. Entries are safe to render in a task report and give the user a replayable account of what the agent did. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"f176381c7429bca00f4ad7e7e8b2c6a691c486b08afe7fbc118e9701802524f9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/BlockerList.md::0000","path":"webgpu-os/reference/kernel/ledger/BlockerList.md","title":"kernel/ledger/BlockerList.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/BlockerList.js","updated":"","headings":["kernel/ledger/BlockerList.js","Classes","class BlockerList","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BlockerList.js — active blockers for an AI request: pending approvals, unanswered elicitations, effects parked for reconciliation, denied capabilities. The overlay's Mini Bar badge count comes from here. Classes Method Signature Summary Unresolved blockers, optionally for one request. Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"57fab1a46a40cf01e099ca819bd2d901e82b26b4bc84c9b780758ccf44cf97a4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/BoundedTrace.md::0000","path":"webgpu-os/reference/kernel/ledger/BoundedTrace.md","title":"kernel/ledger/BoundedTrace.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/BoundedTrace.js","updated":"","headings":["kernel/ledger/BoundedTrace.js","Classes","class BoundedTrace","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BoundedTrace.js — shared base for the ledger's simple per request traces (resource reads, sampling, elicitations, storylet fires): bounded, timestamped, requestId keyed append log. Type specific traces extend this instead of quadruplicating the same buffer logic. Classes BoundedTrace.js — shared base for the ledger's simple per request traces (resource reads, sampling, elicitations, storylet fires): bounded, timestamped, requestId keyed append log. Type specific traces extend this instead of quadruplicating the same buffer logic. Method Signature Summary Append an entry (timestamped). Returns the stored entry. Entries, optionally filtered to one request. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"f82fbef279873033e784874d414f96041f6b1d948563ca5e8acb0adaf2bb065c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/ElicitationTrace.md::0000","path":"webgpu-os/reference/kernel/ledger/ElicitationTrace.md","title":"kernel/ledger/ElicitationTrace.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/ElicitationTrace.js","updated":"","headings":["kernel/ledger/ElicitationTrace.js","Classes","class ElicitationTrace extends BoundedTrace","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ElicitationTrace.js — ledger trace of mid task user questions (Phase 4 ElicitationManager): what was asked, whether the user answered/declined/ timed out, and how long the task waited. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"708aec5d4df2ba6239227d17673a531c311c3bc82dd9ebbd376c307e31b96348"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/ExecutionGraph.md::0000","path":"webgpu-os/reference/kernel/ledger/ExecutionGraph.md","title":"kernel/ledger/ExecutionGraph.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/ExecutionGraph.js","updated":"","headings":["kernel/ledger/ExecutionGraph.js","Classes","class ExecutionGraph","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ExecutionGraph.js — the executed steps DAG for an AI request: nodes are storylet fires / tool calls / model passes; edges are causal (\"B used A's output\"). Feeds the Timeline Panel's graph view. Classes ExecutionGraph.js — the executed steps DAG for an AI request: nodes are storylet fires / tool calls / model passes; edges are causal (\"B used A's output\"). Feeds the Timeline Panel's graph view. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d18f1af6494431e436eef38418c02d542039c8f57dba19db598ebe3985b3315c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/FinalReport.md::0000","path":"webgpu-os/reference/kernel/ledger/FinalReport.md","title":"kernel/ledger/FinalReport.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/FinalReport.js","updated":"","headings":["kernel/ledger/FinalReport.js","Classes","class FinalReport","Functions","projectArtifactToolFailureDiagnostic(value = {})","projectProviderFailureDiagnostic(value)","projectNaviModelRouteBlocker(value)","projectModelExecutionDiagnostic(value)","publicErrorNumberForFailure({ errorCode = '', failure = null } = {})","createAIIncidentId(requestId)","projectAIEchoPipelineTrace(value, { requestId = '', incidentId = null, outcome = '', errorCode = null, errorNumber = null, openedAt = 0, closedAt = 0, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FinalReport.js — assembles the end of task report for one AI request from the ledger's parts: goal outcome, task summary, tool/resource/sampling/ elicitation activity, blockers hit, receipts issued. This is what the overlay shows when a task completes and what gets persisted with the request record. Classes Method Signature Summary Functions Convert an Artifact mutation failure into a fixed, content free diagnostic. Raw handler text is used only to select a known category and is never returned, so prompts, file contents, tool arguments, and provider bodies cannot enter Run Details or copied diagnostics through this path. Keep only broker authored, content free failure evidence. Provider payloads, prompts, credentials, endpoints, and response bodies are deliberately absent. Preserve a content free model compatibility decision when the kernel stops before provider dispatch. This is intentionally separate from : zero attempts is evidence that no provider was called. Project a Navi broker execution into a bounded diagnostic receipt. Request hashes and partial result hashes are intentionally excluded because they can fingerprint operator content without helping an operator diagnose routing. Project the existing resumable run stream into one compact, durable, content free diagnostic trace. This is deliberately a report projection, not a second event registry or ledger. Unknown fields are dropped rather than recursively scrubbed so prompts, provider bodies, credentials, raw tool arguments, and reasoning deltas cannot cross this boundary. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps","contentHash":"33290c4d8622da643091e55696987ffe174cb1eb52615f39b43fb79f367b49b4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/FinalReport.md::0001","path":"webgpu-os/reference/kernel/ledger/FinalReport.md","title":"kernel/ledger/FinalReport.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/FinalReport.js","updated":"","headings":["kernel/ledger/FinalReport.js","Classes","class FinalReport","Functions","projectArtifactToolFailureDiagnostic(value = {})","projectProviderFailureDiagnostic(value)","projectNaviModelRouteBlocker(value)","projectModelExecutionDiagnostic(value)","publicErrorNumberForFailure({ errorCode = '', failure = null } = {})","createAIIncidentId(requestId)","projectAIEchoPipelineTrace(value, { requestId = '', incidentId = null, outcome = '', errorCode = null, errorNumber = null, openedAt = 0, closedAt = 0, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"boundary. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"cbbcb4815e3ea45f932b1961373d081037ddd17476c33a09f1150970497b1f4b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/GoalTree.md::0000","path":"webgpu-os/reference/kernel/ledger/GoalTree.md","title":"kernel/ledger/GoalTree.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/GoalTree.js","updated":"","headings":["kernel/ledger/GoalTree.js","Classes","class GoalTree","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GoalTree.js — hierarchical goal decomposition for an AI request: the root goal (the user's prompt intent) breaks into subgoals; each node tracks its status so the Task Panel can render live progress. Classes Method Signature Summary Add a goal. The first goal added (or parentId=null) becomes the root. Serializable nested tree for UI rendering. Overall progress: done leaf goals / total leaf goals. Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"eeee4e04c720ef6f46907b4eb2c96e3dc461739bb2da041f7aebf4bf9d6bb8bd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/ObservationLog.md::0000","path":"webgpu-os/reference/kernel/ledger/ObservationLog.md","title":"kernel/ledger/ObservationLog.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/ObservationLog.js","updated":"","headings":["kernel/ledger/ObservationLog.js","Classes","class ObservationLog","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ObservationLog.js — wraps engine/state/entity/ProvenanceStore.js: every observation an AI task makes carries W3C PROV style provenance (observed/inferred/model predicted/user asserted/untrusted). Tool/model/ resource content is recorded as UNTRUSTED observation by default — never authority (the prompt injection boundary). Classes Method Signature Summary Record an observation for a request. Provenance records for a subject id (from ProvenanceStore). True if an entry's provenance marks it untrusted. Ordered observations, optionally filtered to one request. Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a23fc5b70e1567b9bc6e788a37628e4a8f551964b33fa4e4520cf34fb259c37a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/ResourceReadTrace.md::0000","path":"webgpu-os/reference/kernel/ledger/ResourceReadTrace.md","title":"kernel/ledger/ResourceReadTrace.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/ResourceReadTrace.js","updated":"","headings":["kernel/ledger/ResourceReadTrace.js","Classes","class ResourceReadTrace extends BoundedTrace","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ResourceReadTrace.js — ledger trace of every resource read an AI request performed (URI, byte size, roots check outcome), so the Task Panel can show exactly WHAT the AI looked at. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a991f8d2e7488f98dd092ce829cb86e91a9566e96a1df5fedb21e723a178b532"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/SamplingTrace.md::0000","path":"webgpu-os/reference/kernel/ledger/SamplingTrace.md","title":"kernel/ledger/SamplingTrace.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/SamplingTrace.js","updated":"","headings":["kernel/ledger/SamplingTrace.js","Classes","class SamplingTrace extends BoundedTrace","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SamplingTrace.js — ledger trace of nested LLM completions requested by tool handlers via the SamplingBroker (Phase 4): parent request, depth, model tier, token/cost accounting when available. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e322759be05bce6e93e21ef53e405ca8b88a7549eb0b7dc7e55b632273488f09"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/StoryletTrace.md::0000","path":"webgpu-os/reference/kernel/ledger/StoryletTrace.md","title":"kernel/ledger/StoryletTrace.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/StoryletTrace.js","updated":"","headings":["kernel/ledger/StoryletTrace.js","Classes","class StoryletTrace extends BoundedTrace","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StoryletTrace.js — ledger trace of storylet fires for an AI request (Phase 6 pipeline): which storylet fired, the phase transition it caused, and its result summary. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"2826bea127ac31d3bc5cddf33c1290ef1e64307c9ab263a707cffd352043a3c4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/TaskLedger.md::0000","path":"webgpu-os/reference/kernel/ledger/TaskLedger.md","title":"kernel/ledger/TaskLedger.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/TaskLedger.js","updated":"","headings":["kernel/ledger/TaskLedger.js","Classes","class TaskLedger","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TaskLedger.js — aggregation facade over the Phase 8 ledger parts, wired as kernel.taskLedger. One shared instance holds cross request traces (observations, tool calls, resource reads, sampling, elicitations, storylet fires, blockers) plus per request records (goal tree, task list, execution graph, receipts). Every recorded receipt/witness reuses engine/state/witness/Witness.js (makeWitness/makeReceipt) and every record lands in the SHARED Phase 7 event log via kernel.timeEngine.record(). Classes Method Signature Summary Close a request and freeze its final report. Record a commit/rejection receipt for a request. Record a projection/decision witness for a request. Record operator guidance attached to one exact elicitation decision. The scratchpad entry remains available to normal task reports, while the shared time engine event also preserves decisions that use a synthetic request id and therefore never open a full AI task record. Record one bounded planner round for diagnostics and durable app history. Mark a recorded planner round as a safe executor stop with a durable reason. Untargeted event sink (OSEventGraphAdapter forwards storylet events here). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e5cf57c70ff1e67f4ce2245722b61377ccf9418881ba90484b5fb8d195c4c12c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/TaskList.md::0000","path":"webgpu-os/reference/kernel/ledger/TaskList.md","title":"kernel/ledger/TaskList.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/TaskList.js","updated":"","headings":["kernel/ledger/TaskList.js","Classes","class TaskList","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TaskList.js — flat, ordered task list for an AI request (each task usually maps to a goal tree leaf + a storylet/tool step). Drives the Task Panel's checklist view. Classes Method Signature Summary Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"15486fa57a0b9816c8a87b25c2309dd321d250d4b2364192a69acffb34a05ebb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/ledger/ToolCallTrace.md::0000","path":"webgpu-os/reference/kernel/ledger/ToolCallTrace.md","title":"kernel/ledger/ToolCallTrace.js","description":"","kind":"reference","source":"webgpu-os/kernel/ledger/ToolCallTrace.js","updated":"","headings":["kernel/ledger/ToolCallTrace.js","Classes","class ToolCallTrace","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ToolCallTrace.js — wraps engine/state/workflow/Outbox.js + Reconciler.js: every AI initiated tool call is recorded as a transactional effect INTENT (idempotent by stable effect id — commit retries never duplicate a call), delivered via drain(), with ambiguous outcomes parked as RECONCILE and resolved by EVIDENCE (a probe of the authoritative status), never guessed. Classes Method Signature Summary Record an intended tool call for a request (does NOT execute it). Deliver pending tool calls through an executor. Resolve parked (ambiguous) calls by probing authoritative status. All outbox entries for one request (UI view). Settle an intent that was delivered by the AI executor's idempotent path. Re exports , <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"be7a48be9f69bf2e1725757595c3086c205df7c9c8fc29ad95fb93da76c33289"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/live-patch/LivePatchService.md::0000","path":"webgpu-os/reference/kernel/live-patch/LivePatchService.md","title":"kernel/live-patch/LivePatchService.js","description":"","kind":"reference","source":"webgpu-os/kernel/live-patch/LivePatchService.js","updated":"","headings":["kernel/live-patch/LivePatchService.js","Classes","class LivePatchService","Functions","validateLivePatchDraft(input = {})","sanitizeLivePatchMarkup(markup, { patchId = 'livepreview' } = {})","sanitizeLivePatchStylesheet(css)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: LivePatchService.js — kernel owned, declarative live UI editing. Model output never becomes executable code. A caller can inspect registered surfaces and propose a small allow listed operation list. The service applies that list as a reversible preview, verifies the resulting DOM, and only then persists a canonical patch + receipt beneath /user/live patches. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"5b746dcd53d34362a96f87af7f77ab6a319980f12bd48861980584ca4c5e46e2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviAutonomyService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviAutonomyService.md","title":"kernel/navi/NaviAutonomyService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviAutonomyService.js","updated":"","headings":["kernel/navi/NaviAutonomyService.js","Classes","class NaviAutonomyServiceError extends Error","class NaviAutonomyService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Constants — Kernel owned structured operational cognition for one or more Navis. Entries are Navi authored conclusions, evidence, uncertainty, proposals, and budget accounting. They are never provider hidden reasoning or raw model transcripts. The injected continuity cipher owns encryption; this service never receives or exposes a generic key or decryption API. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"75e36faa6f456d61aa8bdf36f9e0aa264e5010dd8b97ab9a1ff06c33c9180c27"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviBackgroundCoordinator.md::0000","path":"webgpu-os/reference/kernel/navi/NaviBackgroundCoordinator.md","title":"kernel/navi/NaviBackgroundCoordinator.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviBackgroundCoordinator.js","updated":"","headings":["kernel/navi/NaviBackgroundCoordinator.js","Classes","class NaviBackgroundCoordinatorError extends Error","class NaviBackgroundTransientExecutionError extends NaviBackgroundCoordinatorError","class NaviBackgroundCoordinator","Functions","buildNaviBackgroundCognitionPrompt({ operation = '', objective = '' } = {})","naviBackgroundTokenEnvelope({ operation = '', objective = '', outputTokens = 0, routeAttempts = 1, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Persistent, cross tab coordinator for bounded Navi background cognition. Web Locks is the execution authority: one exclusive lock remains held across the durable reread, executor call, operational journal append, and terminal job update. BroadcastChannel is observability and wake up only; peer messages never grant authority or replace the durable encrypted job record. Classes Method Signature Summary Explicit retry signal accepted from the kernel owned background executor. Arbitrary errors cannot opt into retries by attaching or fields: the coordinator accepts only instances privately branded here, and this constructor admits only the closed outage/throttle transient set. Method Signature Summary Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"dcb35711c706d0f6dbc9fe6e0c0293a5e6d162b2d49fa9e9c3b13212c0f3cea8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviBackupRecoveryService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviBackupRecoveryService.md","title":"kernel/navi/NaviBackupRecoveryService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviBackupRecoveryService.js","updated":"","headings":["kernel/navi/NaviBackupRecoveryService.js","Classes","class NaviBackupRecoveryError extends Error","class NaviBackupIntegrityError extends NaviBackupRecoveryError","class NaviBackupRecoveryService","Functions","isDeterministicRecoveryBranchRegistrationFailure(error)","createNaviBackupStateReader({ continuityStore, cognitionStore } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Signed, encrypted Navi backups and recovery branch reconciliation. This service never exports a credential, a private CryptoKey, raw provider output, a live capability, or a canonical write authority. Restore decrypts and validates into a durable non canonical branch. Only an exact reviewed diff may reach an injected canonical merge applier. Classes Method Signature Summary Method Signature Summary Method Signature Summary Verify a restore receipt against the encrypted branch record already committed by this service. This exposes no bundle plaintext or Store mutation authority and is intended for NaviRecoveryBranchAuthority. Activate a staged recovery branch on a device where this Navi does not yet exist. The injected Continuity import authority must itself perform 2 of 3 recovery, full lineage verification, and atomic persistence. Functions Build the production state reader over already initialized continuity and cognition Stores. The reader exports only the Phase 7 allow list. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"03e18ed30b9bb1f3b9c6445e8ce4c4d9845c09b7532056b129abc0cdaf971e5d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviCognitionService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviCognitionService.md","title":"kernel/navi/NaviCognitionService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviCognitionService.js","updated":"","headings":["kernel/navi/NaviCognitionService.js","Classes","class NaviCognitionServiceError extends Error","class NaviCognitionService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviCognitionService — kernel authority for model neutral task continuity. Provider conversations are transports, never task storage. This service persists signed task envelopes, per Navi routes, self model state, disclosure receipts, and encrypted checkpoints before exposing immutable projections. Classes Method Signature Summary Method Signature Summary Load the exact encrypted task record head for kernel commit protocols. This is intentionally exposed only by the kernel owned service, not the capability gateway presented to applications or model tools. Load one durable task graph checkpoint by its exact encrypted record key. V2 graph checkpoints use a disjoint record identifier. Existing v1 ciphertext remains unopened and unchanged, and neither identity can enter the legacy history. Compare and swap one exact durable task graph checkpoint head. Retrying an already committed identical value is idempotent and does not reseal or rewrite the encrypted record. Record one kernel verified Faculty outcome for advisory guidance only. This API is intentionally absent from the application/model capability surface. It persists the minimum receipt projection needed to prove independent outcomes; it cannot sign, install, enable, or execute a learned Guidance Faculty. List inert, unsigned Guidance Faculty candidates for operator review. Record an exact operator review without granting execution authority. The approval proof is single use and bound to the candidate instruction hash and decision; the result remains unsigned and disabled. List continuity signed, analysis only strategy scorecards. Load one encrypted, continuity signed model resource selection. Load one encrypted, continuity","contentHash":"68269994c22018101ee447dae356654eb25107e8aea2601d595321b934b98559"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviCognitionService.md::0001","path":"webgpu-os/reference/kernel/navi/NaviCognitionService.md","title":"kernel/navi/NaviCognitionService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviCognitionService.js","updated":"","headings":["kernel/navi/NaviCognitionService.js","Classes","class NaviCognitionServiceError extends Error","class NaviCognitionService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"List continuity signed, analysis only strategy scorecards. Load one encrypted, continuity signed model resource selection. Load one encrypted, continuity signed investigation case. List encrypted investigation cases without crossing Navi scope. Load the encrypted, hash bound deterministic episode for one case. Persist one deterministic episode head. Evidence transitions intentionally permit a one record evidence first crash window; every other mismatch is retained as a fail closed recovery condition rather than reset. Persist one revision bound investigation case through the Navi record cipher. The continuity service re signs every accepted revision so the deterministic investigation runtime never receives generic key access. Commit one investigation episode/case transition against the exact durable task head. The task assertion and both encrypted writes share a single Store transaction, eliminating the legacy case/episode crash window without allowing the investigation runtime to mutate the task. Load one immutable encrypted evidence entry. List immutable encrypted evidence, optionally narrowed to one case. Append one signed evidence entry. Evidence IDs are immutable: updates must use a new record and the contract's field. Bind a reviewed broker decision to its effect relevant semantic shape. The full decision hash intentionally includes append only reliability evidence. That evidence may change while an operator is reviewing a disclosure, and the short lived in memory execution plan cache may be unavailable after a service rebind. Carrying this content free semantic attestation across the preflight boundary lets dispatch reconstruct the plan without treating telemetry churn as new authority. Configuration, policy, candidates, endpoint capabilities, route order,","contentHash":"6a1b4cfb519a650f7ad00e9ef96a01d76ebd7dc364a28d4abd6d4d3ea3f49bf8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviCognitionService.md::0002","path":"webgpu-os/reference/kernel/navi/NaviCognitionService.md","title":"kernel/navi/NaviCognitionService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviCognitionService.js","updated":"","headings":["kernel/navi/NaviCognitionService.js","Classes","class NaviCognitionServiceError extends Error","class NaviCognitionService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"lets dispatch reconstruct the plan without treating telemetry churn as new authority. Configuration, policy, candidates, endpoint capabilities, route order, selection, and attempt bounds remain covered and therefore still fail closed. Return a content free local explanation of either one exact signed resource selection receipt or one exact integrity bound broker decision. This projection never re ranks routes and never dispatches a provider. Load only dispatches that can still require crash recovery. Completed dispatch history is intentionally absent from this encrypted index. Its derived checkpoint/evidence pair remains fail closed and is verified when that exact task is reconstructed or reused. Pre index insta","contentHash":"7318a34c8c8337bedca7d52e81793d6d332d11381f40ce53e44c5668ddec10fe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviCognitionStore.md::0000","path":"webgpu-os/reference/kernel/navi/NaviCognitionStore.md","title":"kernel/navi/NaviCognitionStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviCognitionStore.js","updated":"","headings":["kernel/navi/NaviCognitionStore.js","Classes","class NaviCognitionStoreError extends Error","class NaviCognitionStoreConflictError extends NaviCognitionStoreError","class NaviCognitionStoreQuarantineError extends NaviCognitionStoreError","class IndexedDbCognitionBackend","class NaviCognitionStore","Functions","async validateNaviCognitionRecord(value, expected = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Durable ciphertext only storage for the Navi Cognition Fabric. The Store deliberately knows nothing about task, context, or self model plaintext. A kernel only continuity cipher creates authenticated record envelopes before they reach this boundary. Invalid data is quarantined instead of becoming an empty task, route configuration, or self model. Classes Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Atomically apply a bounded set of exact encrypted assertions, writes, and deletions. Assertions are read only compare and swap guards: their revision and envelope hash are rechecked in the same transaction as the mutations they authorize. Kernel only cross Navi scan used to resume encrypted maintenance journals. Permanently destroy one exact ciphertext envelope and its wrapped record key. Callers must bind deletion to both the observed revision and envelope hash so a stale erasure journal cannot delete replacement data. Functions Verify one portable encrypted cognition row without opening its Store. Recovery uses this exact validator before an authenticated backup row may enter a reconciliation branch. The function validates the same binding, envelope hash, and record integrity hash as the live Store read path. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture ·","contentHash":"27760f9e9bcb7c6d58d16d6e1a8649739ba856ce699ae4bfc62017bd645bf5ad"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviCognitionStore.md::0001","path":"webgpu-os/reference/kernel/navi/NaviCognitionStore.md","title":"kernel/navi/NaviCognitionStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviCognitionStore.js","updated":"","headings":["kernel/navi/NaviCognitionStore.js","Classes","class NaviCognitionStoreError extends Error","class NaviCognitionStoreConflictError extends NaviCognitionStoreError","class NaviCognitionStoreQuarantineError extends NaviCognitionStoreError","class IndexedDbCognitionBackend","class NaviCognitionStore","Functions","async validateNaviCognitionRecord(value, expected = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c099398a4b7d13479940e73816a6148131dbf26ebccf7a765f8c6c64e0035c4a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviContextCompiler.md::0000","path":"webgpu-os/reference/kernel/navi/NaviContextCompiler.md","title":"kernel/navi/NaviContextCompiler.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviContextCompiler.js","updated":"","headings":["kernel/navi/NaviContextCompiler.js","Classes","class NaviContextCompilerError extends Error","class NaviContextCompiler","Functions","async diffNaviContextManifests(previous, current)","compileNaviContext(input, options = {})","normalizeNaviContextItems(items)","estimateNaviContextTokens(content)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviContextCompiler.js — deterministic, policy filtered Navi model context. This module is deliberately provider agnostic. It accepts a previously verified active Covenant, filters every classified context item before any provider call can be made, and emits a content free disclosure receipt. Provider sessions and model output never become canonical state here. Classes Method Signature Summary Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e25b44398d105bb3578899b130ecfbe656eb421fc27345873b359540afcd4b92"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviContinuityService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviContinuityService.md","title":"kernel/navi/NaviContinuityService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviContinuityService.js","updated":"","headings":["kernel/navi/NaviContinuityService.js","Classes","class NaviContinuityServiceError extends Error","class NaviContinuityServiceDisabledError extends NaviContinuityServiceError","class NaviContinuityServiceIntegrityError extends NaviContinuityServiceError","class NaviContinuityService","Functions","validateNaviContinuityRecord(value, expected = {})","createNaviContinuityService(options)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviContinuityService.js — kernel authority for model independent Navi identity. AI Echo and other Manifestations receive immutable public projections only. Private keys, generic signing/decryption, raw Store records, recovery bundles, and non extractable CryptoKey handles never cross this boundary. Classes Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Public, secret free progressive recovery posture for one resident Navi. Reveal one deferred A/B factor. Status reads alone can never disclose it. Authenticate one operator held factor together with the kernel only device factor, then record its separate custody without exposing C. Kernel only full Covenant for the policy compiler. App projections omit conditional and destination detail and therefore cannot authorize model disclosure. This method is intentionally absent from the stable gateway. Kernel only, purpose bound cognition encryption. This method is absent from the stable app gateway and cannot encrypt credentials or arbitrary record namespaces. Kernel only inverse of sealCognitionRecord with exact scope binding. Operationally sign a model neutral task without exposing a signer. Operationally sign an observation only investigation case. Verify one historical investigation case signature without exposing a key. Operationally sign one authority free investigation evidence record. Verify one historical investigation evidence signature without exposing a key. Sign a content free record of one exact model context admission. Verify a historical context manifest without exposing a signing key. Sign one deterministic resource selection decision and its exclusions. Verify a","contentHash":"59b57330149bec9e192051c32579174bfe0ce70ebf7315e12a1c4049f725ceaa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviContinuityService.md::0001","path":"webgpu-os/reference/kernel/navi/NaviContinuityService.md","title":"kernel/navi/NaviContinuityService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviContinuityService.js","updated":"","headings":["kernel/navi/NaviContinuityService.js","Classes","class NaviContinuityServiceError extends Error","class NaviContinuityServiceDisabledError extends NaviContinuityServiceError","class NaviContinuityServiceIntegrityError extends NaviContinuityServiceError","class NaviContinuityService","Functions","validateNaviContinuityRecord(value, expected = {})","createNaviContinuityService(options)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"admission. Verify a historical context manifest without exposing a signing key. Sign one deterministic resource selection decision and its exclusions. Verify a historical resource selection receipt without exposing keys. Sign an analysis only scorecard derived from observable task receipts. Verify a historical analysis only strategy scorecard. Sign an inert, disabled Navi authored guidance Faculty. Verify an inert Navi authored guidance Faculty without exposing keys. Verify the continuity signed public identity for a locally known Navi. Verify that one signed lineage event is present in the fully verified canonical lineage. This is purpose bound verification for witnessing; it does not expose a key, raw ledger, or generic signature primitive. Sign an exact, one call Faculty capability without exposing a signer. Sign the final staged action receipt without exposing a signer. Sign one verified post commit recovery outcome. Restore staging is not a signable Navi claim, and the receipt must still name the current lineage head so a caller cannot pre sign a future or stale canonical mutation. Verify one Navi signed canonical recovery outcome without exposing its key. Atomically append and persist the operational reconciliation transition. Replaying the exact signed receipt returns its already verified event; a different receipt naming an old head fails closed. Sign one append only causal memory event without exposing a signer. Verify one Navi authored causal memory event against live key lineage. Sign one exact resource lease state transition without exposing a signer. Verify one Navi authored resource lease against the active operational key lineage. Sign one exact worker assignment or terminal transition without exposing a signer. Verify a Navi delegation against the active","contentHash":"76f834bd217a5dfa752526ffde0c4074f271e73bf1590efb653125f369b4f840"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviContinuityService.md::0002","path":"webgpu-os/reference/kernel/navi/NaviContinuityService.md","title":"kernel/navi/NaviContinuityService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviContinuityService.js","updated":"","headings":["kernel/navi/NaviContinuityService.js","Classes","class NaviContinuityServiceError extends Error","class NaviContinuityServiceDisabledError extends NaviContinuityServiceError","class NaviContinuityServiceIntegrityError extends NaviContinuityServiceError","class NaviContinuityService","Functions","validateNaviContinuityRecord(value, expected = {})","createNaviContinuityService(options)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"active operational key lineage. Sign one exact worker assignment or terminal transition without exposing a signer. Verify a Navi delegation against the active operational key lineage. Sign one exact Manifestation registration or presence transition. Verify a Manifestation against the active operational key lineage. Sign one exact task handoff transition without exposing a signer. Verify a handoff against the active operational key lineage. Sign one encrypted backup manifest without exposing a signer or key handle. Verify a backup manifest against the active operational key lineage. Export the minimum verified continuity material required to recover this exact Navi on another device. The persistent manifest contains","contentHash":"930c0b145cb8513acfe711cbd1d95a8ac6a28ed3ead43efcc4ce7ca23b7f8a36"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviContinuityStore.md::0000","path":"webgpu-os/reference/kernel/navi/NaviContinuityStore.md","title":"kernel/navi/NaviContinuityStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviContinuityStore.js","updated":"","headings":["kernel/navi/NaviContinuityStore.js","Classes","class NaviContinuityError extends Error","class NaviContinuityDisabledError extends NaviContinuityError","class NaviContinuityUnavailableError extends NaviContinuityError","class NaviContinuityStorageError extends NaviContinuityError","class NaviContinuityValidationError extends NaviContinuityError","class NaviContinuityConflictError extends NaviContinuityError","class NaviContinuityRevisionExhaustedError extends NaviContinuityError","class NaviContinuityQuarantineError extends NaviContinuityError","class NaviContinuityStore","Functions","createNaviContinuityStore(options)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"ac309bebb1a2d1f06e0936ca83e4eae1353793618af6a0e586205ed6b9196db3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviCovenantTemplates.md::0000","path":"webgpu-os/reference/kernel/navi/NaviCovenantTemplates.md","title":"kernel/navi/NaviCovenantTemplates.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviCovenantTemplates.js","updated":"","headings":["kernel/navi/NaviCovenantTemplates.js","Classes","class NaviCovenantError extends Error","class NaviCovenantTemplateBlockedError extends NaviCovenantError","class NaviCovenantSignatureError extends NaviCovenantError","Functions","listNaviCovenantTemplates({ separationRecoveryReady = false } = {})","getNaviCovenantTemplate(template = DEFAULTNAVICOVENANTTEMPLATE, { separationRecoveryReady = false, } = {})","async proposeNaviCovenant({ covenantId, naviId, operator = null, operatorSigner, template = DEFAULTNAVICOVENANTTEMPLATE, revision = 1, effectiveAt = new Date()","async verifyNaviCovenant(covenant, { operatorVerifier = null, naviVerifier = null, keyResolver = null, historical = false, logger = null, } = {})","async activateNaviCovenant(proposal, { operatorSigner, naviSigner, signedAt = new Date()","async reviseNaviCovenant(activeCovenant, { covenantId, operatorSigner, naviVerifier, template = null, effectiveAt = new Date()","suspendNaviCovenant(covenant, options = {})","revokeNaviCovenant(covenant, options = {})","async supersedeNaviCovenant(covenant, { operatorSigner, naviSigner, signedAt = new Date()","projectNaviCovenant(covenant)","resolveScopedDelegateDecision(decisions = [])","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviCovenantTemplates.js — selectable operator–Navi Covenants and lifecycle policy. A Covenant is not active merely because it is well formed. Proposals require the primary operator's signature; activation and supersession require both the operator and the Navi to sign the exact same canonical contract bytes. Emergency suspension and revocation remain operator authorized fail safe transitions. This module exposes lifecycle operations, never a generic sign or decrypt primitive. Classes Method Signature Summary Method Signature Summary Method Signature Summary Functions Return immutable template descriptions without exposing mutable policy source objects. Create and operator sign a proposed Covenant from one exact template. Verify signature bytes, signer roles, key windows, and lifecycle quorum. Re sign an accepted proposal as active with operator + Navi acknowledgment. Create a signed next revision proposal without mutating the active Covenant. Emergency fail safe: the primary operator may suspend an active Covenant. Revoke an active or suspended Covenant; the original signed record remains verifiable. Mark an old active Covenant superseded after its dual signed replacement is active. Return a safe, immutable projection with signature values and policy conditions removed. Resolve already authorized scoped delegate votes. Conflicting decisions at the highest equal priority always pause; array order never breaks a tie. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross","contentHash":"b3eac9ece3a696328e3a3fbffaea0a806b899436c75708a41275507c4806221c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviCovenantTemplates.md::0001","path":"webgpu-os/reference/kernel/navi/NaviCovenantTemplates.md","title":"kernel/navi/NaviCovenantTemplates.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviCovenantTemplates.js","updated":"","headings":["kernel/navi/NaviCovenantTemplates.js","Classes","class NaviCovenantError extends Error","class NaviCovenantTemplateBlockedError extends NaviCovenantError","class NaviCovenantSignatureError extends NaviCovenantError","Functions","listNaviCovenantTemplates({ separationRecoveryReady = false } = {})","getNaviCovenantTemplate(template = DEFAULTNAVICOVENANTTEMPLATE, { separationRecoveryReady = false, } = {})","async proposeNaviCovenant({ covenantId, naviId, operator = null, operatorSigner, template = DEFAULTNAVICOVENANTTEMPLATE, revision = 1, effectiveAt = new Date()","async verifyNaviCovenant(covenant, { operatorVerifier = null, naviVerifier = null, keyResolver = null, historical = false, logger = null, } = {})","async activateNaviCovenant(proposal, { operatorSigner, naviSigner, signedAt = new Date()","async reviseNaviCovenant(activeCovenant, { covenantId, operatorSigner, naviVerifier, template = null, effectiveAt = new Date()","suspendNaviCovenant(covenant, options = {})","revokeNaviCovenant(covenant, options = {})","async supersedeNaviCovenant(covenant, { operatorSigner, naviSigner, signedAt = new Date()","projectNaviCovenant(covenant)","resolveScopedDelegateDecision(decisions = [])","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"97c601fa2bef5bb5adf3a91f5082fe32b9d3be7aa62a1d0bc9d0f03a2f1a2bfc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviDelegationBranchKeyService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviDelegationBranchKeyService.md","title":"kernel/navi/NaviDelegationBranchKeyService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviDelegationBranchKeyService.js","updated":"","headings":["kernel/navi/NaviDelegationBranchKeyService.js","Classes","class NaviDelegationBranchKeyServiceError extends Error","class NaviDelegationBranchKeyService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel only provisioning and one shot consumption of persistent Branch keys. A generated P 256 private key is exported only long enough to import a non extractable runtime handle and place its bytes inside a Continuity sealed cognition record. No application facing method returns a CryptoKey, private bytes, public key, or generic signing capability. Classes Method Signature Summary Method Signature Summary NaviDelegationService compatible verifier. The first exact call consumes the proof. Later exact calls are read only validation for persisted delegation records; changed tuples always deny. Constants — Kernel only provisioning and one shot consumption of persistent Branch keys. A generated P 256 private key is exported only long enough to import a non extractable runtime handle and place its bytes inside a Continuity sealed cognition record. No application facing method returns a CryptoKey, private bytes, public key, or generic signing capability. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"45089958cacbee956337a2ac3a5e4e7b387d37a29c1b67361c759b5ed2c7f3e7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviDelegationService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviDelegationService.md","title":"kernel/navi/NaviDelegationService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviDelegationService.js","updated":"","headings":["kernel/navi/NaviDelegationService.js","Classes","class NaviDelegationServiceError extends Error","class NaviDelegationIntegrityError extends NaviDelegationServiceError","class NaviDelegationService","Functions","async deriveNaviDelegationOverlayRoot(naviId, delegationId)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviDelegationService — bounded worker authority, persistence, and recovery. A delegated worker is never given cognition storage, continuity keys, raw memory, or ambient filesystem access. The service persists only signed navi delegation v1 contracts, hash only context references, exact capability references, an active resource lease binding, and bounded report evidence. File capable workers operate through a VFS overlay adapter scoped from their verified Faculty capabilities. Classes Method Signature Summary Method Signature Summary Method Signature Summary Functions Derive the only VFS root a delegated capability may name. Capability issuance can call this before NaviDelegationService.create(), so signed tool arguments already target the overlay and never need post signature rewriting. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"9be41475536f554b9867caec85be91a6d866d36f1babdd25e27f4a06de623cd1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviDerivedProjectionService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviDerivedProjectionService.md","title":"kernel/navi/NaviDerivedProjectionService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviDerivedProjectionService.js","updated":"","headings":["kernel/navi/NaviDerivedProjectionService.js","Classes","class NaviDerivedProjectionError extends Error","class NaviDerivedProjectionService","Functions","escapeNaviProjectionMarkdown(value)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviDerivedProjectionService.js — deterministic, non authoritative Navi views. Canonical memory and relationship services remain the only write authority. This service validates their signed contracts, verifies that signatures bind the current payload hash, and derives Wiki compatible human readable views. It never edits a source contract. A UI edit becomes an unsigned proposal that is handed back to memoryService.proposeDerivedEdit() for policy and review. Required adapters: memoryService.listProjectionEvents({ naviId, branchId, afterSequence, allowedDataClasses }) { event, eventHash, payloadStatus, payload }[] memoryService.proposeDerivedEdit(unsignedProposal) receipt/result relationshipService.listRelationships({ naviId }) Relationship[] The adapters must verify cryptographic signatures before returning contracts. This layer independently verifies schema closure and signed hash binding so a modified cached contract cannot silently become a readable projection. Classes Method Signature Summary Method Signature Summary Replace the local projection cache from the canonical services. Append new memory events and replace the small signed relationship view. Stable local search over the last successfully compiled snapshot. Route a requested view edit back to canonical memory as an unsigned proposal. Even read only authority/lineage views use this path; they can never be mutated in place or acquire a signature in this service. Functions Escape payload text before inserting it into generated Markdown/HTML views. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers;","contentHash":"c444e0c75fddedfaed74b67c777d09799187bc1c2389961cde98f4582716fc49"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviDerivedProjectionService.md::0001","path":"webgpu-os/reference/kernel/navi/NaviDerivedProjectionService.md","title":"kernel/navi/NaviDerivedProjectionService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviDerivedProjectionService.js","updated":"","headings":["kernel/navi/NaviDerivedProjectionService.js","Classes","class NaviDerivedProjectionError extends Error","class NaviDerivedProjectionService","Functions","escapeNaviProjectionMarkdown(value)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"3765db7934277a44515627aaff9cdddce73d0a1e9e1d26076692283734e4b7c8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviFacultyPackageBinding.md::0000","path":"webgpu-os/reference/kernel/navi/NaviFacultyPackageBinding.md","title":"kernel/navi/NaviFacultyPackageBinding.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviFacultyPackageBinding.js","updated":"","headings":["kernel/navi/NaviFacultyPackageBinding.js","Classes","class NaviFacultyPackageBindingError extends Error","Functions","async validateNaviFacultyPackageBinding(value, { resourceHash = null } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Strict, side effect free validation for a signed Faculty embedded in an authenticated package manifest. The builder and authorization policy share this boundary so accepted package evidence cannot drift between creation and execution. Classes Method Signature Summary Functions Validate and snapshot an already signed Faculty package binding. This function never adds, removes, or rewrites a Faculty signature. The returned frozen snapshot contains the exact schema values supplied by the caller after strict JSON/schema validation. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"ce453a3704b057bc9aa34e5571919a5ddaaf385a9d39036430c2397c52cab363"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviFacultyPackagePolicy.md::0000","path":"webgpu-os/reference/kernel/navi/NaviFacultyPackagePolicy.md","title":"kernel/navi/NaviFacultyPackagePolicy.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviFacultyPackagePolicy.js","updated":"","headings":["kernel/navi/NaviFacultyPackagePolicy.js","Classes","class NaviFacultyPackagePolicyError extends Error","class NaviFacultyPackagePolicy","Constants","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviFacultyPackagePolicy.js The fail closed trust boundary between a verified OS package and an executable Navi Faculty manifest. PackageManager remains the package integrity/provenance/scanning choke point; this policy narrows its broader application install trust model for Faculties: production authorization requires a fresh ring 0 certificate chain; pinned/TOFU trust never becomes production Faculty authority; developer local/self signed packages require an exact one shot approval; the authenticated package manifest, inline Faculty envelope, canonical Navi payload, and package resource root must all bind the same Faculty; the Faculty publisher signature is verified with the package certificate. No package bytes, public keys, signatures, approval tokens, or verifier diagnostics are returned from this module. Classes Method Signature Summary Method Signature Summary Verify every non interactive invariant and return the exact approval grant a UI must place in ElicitationManager, if an approval is required. Authorize one exact package bound Faculty. Approval tokens are consumed by ElicitationManager and are never retained or returned. Constants Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d90c9b4ceb06c9cfab3259242bc565c4b8b5a66e60b6b9804820d6c0f9b2c897"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviFacultyService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviFacultyService.md","title":"kernel/navi/NaviFacultyService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviFacultyService.js","updated":"","headings":["kernel/navi/NaviFacultyService.js","Classes","class NaviFacultyServiceError extends Error","class NaviFacultyServiceIntegrityError extends NaviFacultyServiceError","class NaviFacultyService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel owned Faculty authority membrane. Faculty code never receives this service, continuity keys, persistence, or driver objects. It receives only NaviFacultyWorkerHost's bridge. The bridge prepares one exact signed capability and hands it to ToolRouter; ToolRouter must consume that capability immediately before its existing driver dispatch. This module deliberately has no ToolDriver import or path. Classes Method Signature Summary Method Signature Summary Method Signature Summary Pure review projection. It does not require readiness or mutate state. Pure human review binding. It never signs, installs, or enables guidance. Validate that an approved candidate is ready for the existing install UI. Pure analysis only scorecard derivation from verified receipt metrics. Reconcile one exact OS signed default on Faculty revision. This is intentionally not exposed through the application syscall gateway. KernelBootstrap invokes it only after validating the bundled package and live descriptor bindings. Operator pauses and revocations are durable authority decisions and are never rewritten here. Kernel private, non consuming proof used while binding or checking a bounded delegation. The eventual ToolRouter dispatch must still call consumeCapability(), so this method cannot authorize a tool invocation by itself. Kernel private proof for investigation evidence. The caller supplies only a content free receipt claim and the exact case scope it expects; this method re opens the authoritative encrypted Faculty receipt and operation before returning a trusted read binding. It is intentionally not exposed through the Navi or application gateways. Kernel private recovery inventory for known","contentHash":"26d6daca648134656acf467c207af5595432dcfd471da32040bb2aac66a5d82e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviFacultyService.md::0001","path":"webgpu-os/reference/kernel/navi/NaviFacultyService.md","title":"kernel/navi/NaviFacultyService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviFacultyService.js","updated":"","headings":["kernel/navi/NaviFacultyService.js","Classes","class NaviFacultyServiceError extends Error","class NaviFacultyServiceIntegrityError extends NaviFacultyServiceError","class NaviFacultyService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"before returning a trusted read binding. It is intentionally not exposed through the Navi or application gateways. Kernel private recovery inventory for known terminal tool outcomes whose exact resource lease still lacks a durable settlement marker. Kernel private resource binding for a persisted operation. The stable app gateway deliberately does not expose this method. Kernel private recovery projection for a delegated Faculty capability. It resolves an immutable signed receipt from the persisted grant without exposing invocation arguments, result payloads, or a dispatch primitive. Read only compatibility adapter for receipts written before source attestations existed. Legacy records retain their original signature and identity; they are never rewritten, re signed, or eligible to establish an investigation evidence source. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"742095a263dde578b9edf272eade37311976f040fe01dbe4960cc181579e747f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviFacultyWorkerHost.md::0000","path":"webgpu-os/reference/kernel/navi/NaviFacultyWorkerHost.md","title":"kernel/navi/NaviFacultyWorkerHost.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviFacultyWorkerHost.js","updated":"","headings":["kernel/navi/NaviFacultyWorkerHost.js","Classes","class NaviFacultyWorkerError extends Error","class NaviFacultyIframeAdapter","class NaviFacultyWorkerHost","Functions","normalizeNaviFacultyJson(value, { label = 'value', maxBytes = NAVIFACULTYWORKERLIMITS.messageBytes, } = {})","createNaviFacultyWorkerDescriptor()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviFacultyWorkerHost.js Executes one Faculty operation in a dedicated Worker nested inside an opaque origin iframe. The worker has no ambient OS bridge. Its only host capability is the bounded request channel supplied to . Classes Method Signature Summary DOM owner for the hidden opaque iframe and its sole MessageChannel port. Method Signature Summary Replace only owner for one shot Faculty Workers. is trusted host code and is the only route from Faculty source to ToolRouter. Method Signature Summary Functions Descriptor first JSON normalization that never evaluates accessors. Immutable description of the Faculty execution boundary. Constants — NaviFacultyWorkerHost.js Executes one Faculty operation in a dedicated Worker nested inside an opaque origin iframe. The worker has no ambient OS bridge. Its only host capability is the bounded request channel supplied to . <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4510b8b18f9acb052d24e9c443bbfdd02b0d3efb0a58147b22bf5760fe48cf03"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviFeatureGate.md::0000","path":"webgpu-os/reference/kernel/navi/NaviFeatureGate.md","title":"kernel/navi/NaviFeatureGate.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviFeatureGate.js","updated":"","headings":["kernel/navi/NaviFeatureGate.js","Classes","class NaviFeatureGatePersistenceError extends Error","class NaviFeatureGateGenerationError extends Error","class NaviFeatureGate","Functions","createNaviFeatureGate(options)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Always on compatibility policy for the kernel owned Navi runtime. Navi is part of WebGPU OS rather than an operator controlled feature. This object keeps the versioned read contract used by kernel services and repairs legacy rollout records. Authority still fails closed inside each operator bound service; an app can neither enable nor disable the runtime. Classes Method Signature Summary Method Signature Summary Method Signature Summary Functions Constants — Always on compatibility policy for the kernel owned Navi runtime. Navi is part of WebGPU OS rather than an operator controlled feature. This object keeps the versioned read contract used by kernel services and repairs legacy rollout records. Authority still fails closed inside each operator bound service; an app can neither enable nor disable the runtime. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"982b3f02316f4d339cd8406bc62db2581d2b1b396768acf0fe6210945a041ca5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviGuidanceFacultyCandidate.md::0000","path":"webgpu-os/reference/kernel/navi/NaviGuidanceFacultyCandidate.md","title":"kernel/navi/NaviGuidanceFacultyCandidate.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviGuidanceFacultyCandidate.js","updated":"","headings":["kernel/navi/NaviGuidanceFacultyCandidate.js","Functions","async deriveGuidanceFacultyCandidate(raw = {})","reviewGuidanceFacultyCandidate(raw = {})","guidanceFacultyPromotionReadiness(raw = {})","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Pure guidance faculty candidate v2 derivation from observable receipts. This module cannot sign, persist, install, enable, or execute anything. It only creates a review required candidate after two independent verified successes share one exact descriptor and verification profile binding. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"542cae093681305f483be7e88c3bddfc97fcb778618054be27371ef9883cf324"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviInvestigationAttestation.md::0000","path":"webgpu-os/reference/kernel/navi/NaviInvestigationAttestation.md","title":"kernel/navi/NaviInvestigationAttestation.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviInvestigationAttestation.js","updated":"","headings":["kernel/navi/NaviInvestigationAttestation.js","Functions","async hashInvestigationSourceProjection(value)","async createInvestigationSourceProjection(value, sourceResultHash)","async verifyInvestigationSourceProjection(value, sourceResultHash)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"0eefdfc0a99ab33bae0aaf46a35005f4c81ba8b8b4843803b86280a4577c3c99"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviInvestigationProofReviewService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviInvestigationProofReviewService.md","title":"kernel/navi/NaviInvestigationProofReviewService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviInvestigationProofReviewService.js","updated":"","headings":["kernel/navi/NaviInvestigationProofReviewService.js","Classes","class NaviInvestigationProofReviewError extends Error","class NaviInvestigationProofReviewService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel owned human review for a bounded Navi investigation proof. This service never calls a model and never accepts provider hidden reasoning. It projects exact, locally verified evidence into one immutable review request, obtains a one shot ElicitationManager approval, then rechecks every mutable task/case binding before returning the semantic verifier attestation expected by NaviInvestigationService. Classes Method Signature Summary Method Signature Summary Review one exact proof candidate. is the decision shown in the approval UI; the operator must explicitly approve that exact attestation. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"1f6e2a8d7ca3bea92a3616cfab465498a71cfe9e7e1b026bc04d641548a51f80"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviInvestigationService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviInvestigationService.md","title":"kernel/navi/NaviInvestigationService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviInvestigationService.js","updated":"","headings":["kernel/navi/NaviInvestigationService.js","Classes","class NaviInvestigationService","class NaviInvestigationError extends Error","Functions","shouldInvestigate({ objective, taskKind = '', goalType = '' } = {})","async validateDurableInvestigationProof(caseRecord, evidenceRecords)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviInvestigationService.js — deterministic, observation only Sherlock episodes. The service owns case progression and evidence validation, but it cannot invoke tools, persist records, grant authority, or execute mutations. Callers must route reads through ToolRouter and submit the verified result. Classes Method Signature Summary Restore canonical case/evidence records and a hash bound episode. A caller may then reconcile one evidence first record after a crash. Attach one already durable verified observation exactly once. Method Signature Summary Functions Select Sherlock only for investigation shaped work, never greetings. Recompute the durable semantic proof binding without trusting the model interpretation that proposed it. This is shared by runtime restore and the cognition persistence boundary before a case can be signed. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"b111948a189f3a2011f95b4334e040ae3db3fcc7de148ec223f2df277aaf4014"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviKeyVault.md::0000","path":"webgpu-os/reference/kernel/navi/NaviKeyVault.md","title":"kernel/navi/NaviKeyVault.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviKeyVault.js","updated":"","headings":["kernel/navi/NaviKeyVault.js","Classes","class NaviKeyVaultError extends Error","class NaviKeyVault","Functions","naviConstantTimeEqual(left, right)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel internal cryptographic boundary for Navi continuity. This module deliberately exposes no generic \"sign this key\" or \"decrypt this ciphertext\" syscall surface. Its methods are intended to be held by the kernel continuity service, which supplies the policy decision before a bounded operation reaches this vault. Classes Method Signature Summary Method Signature Summary Create genesis keys and a one time 2 of 3 recovery enrollment. Long lived secret keys are imported non extractable before this returns. Verify and project only the authenticator ceremony metadata committed by a continuity signed recovery bundle. PRF output is never part of this view. Recover a vault using any valid, non revoked pair of enrollment factors. Recover only the continuity and encryption roots, then mint a fresh operational key. The stale operational private key carried by the enrollment payload is deliberately never decoded or imported. Restore non extractable CryptoKey handles loaded from an IndexedDB object store. The state is authenticated before any handle becomes authoritative. Produce a structured cloneable kernel snapshot for IndexedDB. It contains opaque, non extractable CryptoKey handles, never raw secret key bytes. Sign an allowlisted Navi wire contract using the exact Phase 0 canonical bytes. The return value is a object ready to be appended to the contract's top level array. Sign exactly one pre hashed permanent separation ancestry attestation. This deliberately accepts no arbitrary domain, schema, signer, or key role, and therefore does not create a generic continuity signing oracle. Public only continuity verifier for kernel lineage and recovery services. Public only historical","contentHash":"584b97a3716eb6c418119dba3e61661f5330229db5a3be236f6b05cdaf392e87"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviKeyVault.md::0001","path":"webgpu-os/reference/kernel/navi/NaviKeyVault.md","title":"kernel/navi/NaviKeyVault.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviKeyVault.js","updated":"","headings":["kernel/navi/NaviKeyVault.js","Classes","class NaviKeyVaultError extends Error","class NaviKeyVault","Functions","naviConstantTimeEqual(left, right)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"therefore does not create a generic continuity signing oracle. Public only continuity verifier for kernel lineage and recovery services. Public only historical operational verifier; private handles never leave. Prepare a new operational key without changing the active signer. Only public candidate material and an opaque, single use token are returned. The continuity service must append and verify the lineage rotation with the still current old key before calling commit. Commit one staged candidate after its old key lineage event was recorded. Drop an uncommitted candidate; its private handle becomes unreachable. Safe convenience wrapper. The callback must append and verify lineage while the old key is current, returning the committed event hash. Return a newly signed policy that disables the named recovery factor. Authenticate a persisted recovery bundle against a trusted Store head. This verifies bundle/AAD commitments and the continuity signed policy, but intentionally does not open factor encrypted payloads during hydration. Prove an exact factor quorum against the active Navi without rotating a key. This is used only to authenticate a persisted idempotent recovery replay after its original atomic commit response was lost. Replace a stale recovery bundle after operational rotation/revocation. Opening the previous bundle proves a valid 2 of 3 factor quorum; the new bundle receives fresh factors and the vault's authenticated current key history. No old operational private key is revived. Functions Constant time comparison for equal length byte strings. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on","contentHash":"c6cb517a36f1a465bd7340fe66fb0454368bd850807638c2065d22e86001df0b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviKeyVault.md::0002","path":"webgpu-os/reference/kernel/navi/NaviKeyVault.md","title":"kernel/navi/NaviKeyVault.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviKeyVault.js","updated":"","headings":["kernel/navi/NaviKeyVault.js","Classes","class NaviKeyVaultError extends Error","class NaviKeyVault","Functions","naviConstantTimeEqual(left, right)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"1e8187395e04ed514e945507d86ef9c50f63ebecfe167e2250c8646ace812329"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviLegacyKnowledgeImportService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviLegacyKnowledgeImportService.md","title":"kernel/navi/NaviLegacyKnowledgeImportService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviLegacyKnowledgeImportService.js","updated":"","headings":["kernel/navi/NaviLegacyKnowledgeImportService.js","Classes","class NaviLegacyKnowledgeImportError extends Error","class NaviLegacyKnowledgeImportService","Functions","normalizeLegacyKnowledgeSnapshot(input)","async hashLegacyKnowledgeSnapshot(snapshot)","async verifyNaviLegacyKnowledgeImportReceipt(receipt)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Idempotent, non destructive migration of bounded AI Echo knowledge into the Navi causal memory weave. The caller supplies a read only snapshot assembled from legacy AI Echo state. This service never receives the legacy Store, so it cannot reset, delete, or rewrite that source. Each normalized source item receives a content derived event ID; retries verify the existing signed event instead of appending a duplicate. Classes Method Signature Summary Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"2770f8d82623d5b7d183427bb76c9da3fab8c90a06cf0a592616db90eb9e7455"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviLegacyMigrationService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviLegacyMigrationService.md","title":"kernel/navi/NaviLegacyMigrationService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviLegacyMigrationService.js","updated":"","headings":["kernel/navi/NaviLegacyMigrationService.js","Classes","class NaviLegacyMigrationService","Functions","validateNaviLegacyMigrationReceipt(receipt)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Explicit, rollback safe migration of unreleased AI Echo owned state. Phase 0 creates and verifies a complete /user backup while navi v1 is off. This Phase 1 service consumes that exact archive only after the always on runtime is operator bound and the operator supplies an exact confirmation. It archives the two AI Echo owned surfaces, resets them, and never touches unrelated /user paths. A failed reset is compensated from the local migration archive. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"71133a055ffd2de59037c9fd6c61af3fae801fd7f8d59cef61cf006de9d6a931"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviLineage.md::0000","path":"webgpu-os/reference/kernel/navi/NaviLineage.md","title":"kernel/navi/NaviLineage.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviLineage.js","updated":"","headings":["kernel/navi/NaviLineage.js","Classes","class NaviLineageError extends Error","class NaviLineageVerificationError extends NaviLineageError","class NaviLineageLedger","Functions","hashNaviLineagePayload(payload)","canonicalNaviOperationalCertificateBytes(certificate)","async verifyNaviLineage(entries, { expectedNaviId, expectedBranchId = null, expectedHeadHash = null, expectedEventCount = null, continuityKey, operationalKeys = [], keyResolver = null, certificateVerifier = null, logger = null, } = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviLineage.js — linked, signed Navi continuity history. The ledger stores strict contracts plus the exact payload whose hash the event commits to. Operational rotation takes effect after its rotation event, so the old key remains valid for historical verification but cannot authorize another event. Recovery and revocation are continuity key operations. No generic signing primitive is exported. Classes Method Signature Summary Method Signature Summary Method Signature Summary Append one operational state transition for a successful, Navi signed canonical recovery outcome. The prior head is supplied by the receipt and must still be current; callers cannot relabel a stale merge/import. Return an immutable public history with signature bytes and private details omitted. Export strict JSON entries for encrypted kernel persistence. Functions Hash a strict JSON lineage payload using the engine's canonical SHA 256 path. Return deterministic bytes suitable for an external continuity certificate verifier. Verify the complete chain, payload commitments, signature policy, key certificates, key activation windows, and rotation/recovery transitions. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d706ec60d841544e20042fecd89e7d04e549152821403a53d006855718b97648"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviMaintenanceScheduler.md::0000","path":"webgpu-os/reference/kernel/navi/NaviMaintenanceScheduler.md","title":"kernel/navi/NaviMaintenanceScheduler.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviMaintenanceScheduler.js","updated":"","headings":["kernel/navi/NaviMaintenanceScheduler.js","Classes","class NaviMaintenanceScheduler","Functions","sharedNaviMaintenanceScheduler()","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Cooperative, lifecycle aware scheduler for encrypted Navi maintenance. All Navi migrations and index hydration share one queue. A browser idle grant advances at most one bounded page. An idle callback with no available budget advances nothing; its timeout, or the delayed timer used where idle callbacks do not exist, is the bounded fallback grant. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8c959b62072a7760e2cff4ca75e1091d4a129995a48f6d1acbee4d901911cebe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviManifestationAdapterRegistry.md::0000","path":"webgpu-os/reference/kernel/navi/NaviManifestationAdapterRegistry.md","title":"kernel/navi/NaviManifestationAdapterRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviManifestationAdapterRegistry.js","updated":"","headings":["kernel/navi/NaviManifestationAdapterRegistry.js","Classes","class NaviManifestationAdapterRegistry","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel only registry for Navi Manifestation adapters. The descriptors are inert declarations. Live engine, audio, vehicle, or network objects are attached by trusted kernel integrations and are never accepted through an app syscall. The registry therefore exposes a narrow body boundary without turning an avatar, entity, or runtime object into Navi identity authority. Classes Method Signature Summary Kernel only: attach an already constructed trusted runtime. Kernel only convenience wiring for the bounded ActiveBody Construct adapter. Re exports , <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"aad5a458598f7b18f1bed5521509d64072401c5da082b0aa497907ffbb850e4e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviManifestationService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviManifestationService.md","title":"kernel/navi/NaviManifestationService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviManifestationService.js","updated":"","headings":["kernel/navi/NaviManifestationService.js","Classes","class NaviManifestationServiceError extends Error","class NaviManifestationService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel owned Navi Manifestation and task handoff runtime. Models, bodies, voices, avatars, and apps remain replaceable presentation or execution surfaces. Every durable registration and handoff is an encrypted, purpose signed contract bound to the continuity root Navi identifier. Classes Method Signature Summary Method Signature Summary Kernel only exact scope decision used before an adapter observes or acts. Kernel only sensor bridge. Kernel only actuator bridge. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6d76e9a8d158662586a6e4a6466f3b00e63c6f2f1477ade5bb19db2f9e164aa1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviMemoryService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviMemoryService.md","title":"kernel/navi/NaviMemoryService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviMemoryService.js","updated":"","headings":["kernel/navi/NaviMemoryService.js","Classes","class NaviMemoryServiceError extends Error","class NaviMemoryService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel owned causal memory over the existing encrypted cognition Store. Signed events are append only. Their payloads live in separately wrapped AES GCM records so forgetting can destroy one wrapped record key without rewriting history. Provider output, application projections, and callers never receive Store access or encryption/signing authority. Classes Method Signature Summary Method Signature Summary Kernel internal signed contract feed for deterministic derived views. Kernel only content feed for derived views. This is deliberately separate from listEvents(): callers must supply an exact classification allow list and pass the same Covenant/access evaluator as other reads. Convert a derived view edit into a non authoritative memory proposal. Stop admission immediately and wait for already admitted operations. Continuity owners call this before clearing or rebinding key authority. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"52021f05ce7776c0ce83b7777e4b9ecda28bd6ec6eeda4d5263c0ab616261ad9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviModelBroker.md::0000","path":"webgpu-os/reference/kernel/navi/NaviModelBroker.md","title":"kernel/navi/NaviModelBroker.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviModelBroker.js","updated":"","headings":["kernel/navi/NaviModelBroker.js","Classes","class NaviModelBrokerError extends Error","class NaviModelBroker","Functions","async verifyNaviModelRouteDecision(rawDecision, rawConfiguration)","normalizeModelFailure(source, signal = null)","normalizeNaviModelRequirements(raw = {}, purpose = 'chat')","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviModelBroker.js — deterministic, per Navi model selection and failover. The broker owns no provider conversation and executes no tools. It chooses one declared cognition route, invokes the injected AI Hub exactly once at a time, and only advances to a bounded fallback after a retryable model call failure. Prompt/model output is deliberately excluded from routing evidence. Classes Method Signature Summary An injected AI Hub must expose . Route catalog and policy remain per Navi; the AI Hub is only the replaceable transport. Method Signature Summary Prepare one immutable, content free route plan. The returned object is branded to this broker instance and may be consumed by execute() once. Prompts and model output never enter the plan. Functions Verify that a projected route decision is the exact content addressed decision produced for the supplied normalized broker configuration. This is an integrity/binding check only; it never authorizes model use. Return the broker's exact model neutral requirement evidence. Resource selection receipts must hash the same defaults and canonical ordering that used; callers must not reconstruct those defaults independently. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d74d5a9de23f215281a8cd5f3eacd0a99d5b7b83897daf74fcf2d07ae9fd932a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviParticleNetworkAdapter.md::0000","path":"webgpu-os/reference/kernel/navi/NaviParticleNetworkAdapter.md","title":"kernel/navi/NaviParticleNetworkAdapter.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviParticleNetworkAdapter.js","updated":"","headings":["kernel/navi/NaviParticleNetworkAdapter.js","Classes","class NaviParticleNetworkAdapter","class NaviParticleReplicationInbox","Functions","createNaviParticleNetworkAdapter(options)","Constants","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviParticleNetworkAdapter.js — inert Navi/Particle Network protocol bridge. This module creates and verifies Realm semantic envelopes, but never opens a socket, fetches a peer, publishes a package, or owns a credential. Network dispatch remains the NetworkDriver's job. Contract verification and live authority are mandatory injected kernel decisions and fail closed. Classes Create a transport only Particle Network adapter. must contain one verifier per adapter ID. A verifier may return true, , or the exact verified signed contract. The latter matches NaviContinuityService's purpose bound verification methods. Method Signature Summary Verify one inbound envelope without applying or dispatching it. Idempotent inbound application boundary built on Realm SemanticInbox. Verification and application are serialized so concurrent replay cannot apply one signed envelope twice. Method Signature Summary Functions Constants Re exports , , , , , , , , <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"cfa81fddc9be7e7821de69f865590ab381c5fcef1379073a301cc46e1dd0bd51"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviParticleReplicationPolicy.md::0000","path":"webgpu-os/reference/kernel/navi/NaviParticleReplicationPolicy.md","title":"kernel/navi/NaviParticleReplicationPolicy.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviParticleReplicationPolicy.js","updated":"","headings":["kernel/navi/NaviParticleReplicationPolicy.js","Classes","class NaviParticleReplicationError extends Error","Functions","naviParticleAdapterDescriptor(adapterId)","async assertNaviParticleReplicationPayload(value, expectedAdapterId = null)","assertNaviReplicationContentSafe(value)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviParticleReplicationPolicy.js — closed, side effect free Navi replication policy. Particle Network transports already authoritative Navi contracts. It never becomes a second Navi store and it never accepts an arbitrary JSON tunnel. Every permitted record has one fixed schema, semantic kind, classification policy, destination, disclosure evidence, and live authority approval. Classes Method Signature Summary Functions Return the immutable descriptor for one closed Navi/Particle adapter. Validate an already built replication payload, including its nested Navi contract hash and adapter specific semantics. No signature is synthesized. Reject forbidden content before any signer, policy, or transport is called. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"25870c549dc823d20b6a361129429024d1b3bdb1040ab79b26f9af5281e48c35"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviPasskeyRecoveryAdapter.md::0000","path":"webgpu-os/reference/kernel/navi/NaviPasskeyRecoveryAdapter.md","title":"kernel/navi/NaviPasskeyRecoveryAdapter.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviPasskeyRecoveryAdapter.js","updated":"","headings":["kernel/navi/NaviPasskeyRecoveryAdapter.js","Classes","class NaviPasskeyRecoveryError extends Error","class NaviPasskeyRecoveryAdapter","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Kernel owned WebAuthn PRF ceremony adapter. Apps see boolean support/enrollment status and completed continuity results. Credential IDs, PRF inputs, and PRF outputs remain inside this adapter and the continuity signed recovery bundle. PRF output is zeroed after each call. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"870ca24e415e2fb5348dcf0822cab25f2a68ada6b71ab3f856699846169913a8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviPreflightService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviPreflightService.md","title":"kernel/navi/NaviPreflightService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviPreflightService.js","updated":"","headings":["kernel/navi/NaviPreflightService.js","Classes","class NaviPreflightService","Functions","validateUserBackupManifest(manifest)","validateNaviPreflightManifest(manifest)","validateNaviRollbackReceipt(receipt)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Phase 0 Navi migration preflight. This service is deliberately not wired into the kernel. It only creates and verifies a reversible development archive while is disabled. It has no delete, clear, restore, or reset operation. Classes Method Signature Summary Create a complete, checksum verified /user archive plus rollback receipt. AI Echo's encrypted app sandbox readback is synchronized before the StorageManager backup begins and must be present in that backup. Independently re verify an imported or retained Phase 0 archive. A rollback receipt is issued only after independent archive verification. Verify that a receipt is bound to one exact, still valid archive. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d6b56d8a55361978e32167f53e0e8539804748187d370bddcd7fd9b68d47ed92"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviProjectDossier.md::0000","path":"webgpu-os/reference/kernel/navi/NaviProjectDossier.md","title":"kernel/navi/NaviProjectDossier.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviProjectDossier.js","updated":"","headings":["kernel/navi/NaviProjectDossier.js","Classes","class NaviProjectDossier","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Rebuildable, authority free project dossier for one exact Navi task. The dossier owns no state and never copies provider reasoning, scratchpads, planner transcripts, file bodies, or Wiki bodies. It projects bounded links from the canonical task state, durable run reports, receipts, evidence, Wiki metadata, and Workspace Output Index. Deleting it loses no canonical data. Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"839d59379fa3079840dd7e13857e167ef28d62da8a0d3d1779acbabc28ba34e4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviRecoveryBranchAuthorityService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviRecoveryBranchAuthorityService.md","title":"kernel/navi/NaviRecoveryBranchAuthorityService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviRecoveryBranchAuthorityService.js","updated":"","headings":["kernel/navi/NaviRecoveryBranchAuthorityService.js","Classes","class NaviRecoveryBranchAuthorityError extends Error","class NaviRecoveryBranchAuthorityService","Functions","createNaviRecoveryBranchAuthorityService(options)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel only authority for staged recovery branches and permanent separation. A recovery branch is never an identity authority. It may be inspected and reconciled only within the exact ceiling carried by its verified restore receipt. Publication, authority expansion, identity transfer, and continuity root rotation are unconditional denials. Permanent separation is a distinct, explicitly approved operation that asks Continuity to stage a fresh independent Navi and records a dual continuity signed ancestry attestation without exposing either signer or private key. Classes Method Signature Summary Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a3fd0bbfad4fec6cd07cc44126c2f49f1cdc42529823d5da85a746d1da8f5d55"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviRecoveryBranchStore.md::0000","path":"webgpu-os/reference/kernel/navi/NaviRecoveryBranchStore.md","title":"kernel/navi/NaviRecoveryBranchStore.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviRecoveryBranchStore.js","updated":"","headings":["kernel/navi/NaviRecoveryBranchStore.js","Classes","class NaviRecoveryBranchStoreError extends Error","class NaviRecoveryBranchConflictError extends NaviRecoveryBranchStoreError","class NaviRecoveryBranchIntegrityError extends NaviRecoveryBranchStoreError","class NaviRecoveryBranchStore","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Durable, encrypted at rest recovery branch journal. The Store never persists decrypted Navi backup payloads. It retains the authenticated encrypted bundle, a content free reconciliation diff, and exact approval/settlement evidence. Canonical Navi state remains owned by the continuity and cognition services. Classes Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Durably checkpoints merge progress without widening the recovery branch lifecycle. Checkpoints are deliberately limited to an operation that is already in ; settling or retrying the operation still requires the explicit transition API and its existing transition graph. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"0549b1f846d7afea10a880da80ad7dd46b01aacf280f7f99635b3d8c29cf4713"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviRecoveryEscrow.md::0000","path":"webgpu-os/reference/kernel/navi/NaviRecoveryEscrow.md","title":"kernel/navi/NaviRecoveryEscrow.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviRecoveryEscrow.js","updated":"","headings":["kernel/navi/NaviRecoveryEscrow.js","Classes","class NaviRecoveryEscrowError extends Error","class NaviRecoveryEscrow","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel only, progressive recovery factor escrow. Recovery material is isolated from the ordinary VFS and continuity stores in a purpose specific IndexedDB database. Public projections contain only bounded disclosure metadata. The device factor (C) can be retrieved only by kernel code holding the module capability symbol. Classes Method Signature Summary Method Signature Summary Constants — Opaque kernel capability. It must never be copied into a syscall, app projection, log, or persisted record. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"9d52dc43e5fae83fa4649c85adddebf411e6ab7b5b31bbb1b667b82ceec469e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviRecoveryRuntime.md::0000","path":"webgpu-os/reference/kernel/navi/NaviRecoveryRuntime.md","title":"kernel/navi/NaviRecoveryRuntime.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviRecoveryRuntime.js","updated":"","headings":["kernel/navi/NaviRecoveryRuntime.js","Classes","class NaviRecoveryRuntimeError extends Error","class NaviRecoveryRuntime","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Operator bound Phase 7 recovery aggregate. This runtime keeps approval construction, portable state verification, canonical cognition writes, and ancestry authority inside the kernel. Apps submit recovery factors and human decisions, never hashes or signatures. Classes Method Signature Summary Method Signature Summary Synchronously revoke the operator binding before an async drain begins. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"33d8b3767a380eb747c05fb1ddd637801dadfe4d06435a91dab32e0ab42ccc3a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviRelationshipService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviRelationshipService.md","title":"kernel/navi/NaviRelationshipService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviRelationshipService.js","updated":"","headings":["kernel/navi/NaviRelationshipService.js","Classes","class NaviRelationshipServiceError extends Error","class NaviRelationshipIntegrityError extends NaviRelationshipServiceError","class NaviRelationshipService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviRelationshipService — signed, append only relationship authority. Relationships are evidence, not ambient trust. Chat contacts and package publishers never enter this service, and an active relationship grants no authority unless one of its exact signed policy rules matches the request. Raw contracts and encrypted records remain kernel private; public methods return immutable projections with signature values and condition values removed. Classes Method Signature Summary Method Signature Summary Method Signature Summary Kernel internal projection service adapter. Callers must not publish this result: complete signature envelopes are required for downstream cryptographic verification. Apps use list(), which is strictly redacted. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"f9e89f418360ed8e927c4f06db10cf1eac76272e22b84cac405aea724bbc46d5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviResourceCatalog.md::0000","path":"webgpu-os/reference/kernel/navi/NaviResourceCatalog.md","title":"kernel/navi/NaviResourceCatalog.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviResourceCatalog.js","updated":"","headings":["kernel/navi/NaviResourceCatalog.js","Classes","class NaviResourceCatalog","Functions","async projectBrokerDecisionToResourceSelection(rawInput = {}, rawOptions = {})","async createNaviModelRouteResourceBindings(routeConfiguration, purpose)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviResourceCatalog.js — one deterministic, searchable projection of Navi tools, Faculties, guidance recipes, task episodes, and related resources. Catalog entries are descriptions only. Search never executes a resource or grants permission, and callers must resolve live authority independently. Classes Method Signature Summary Collision resistant identity of the exact searchable catalog snapshot. Deterministically assess one model/tool/Faculty selection round. This is a local policy operation. It neither executes a resource nor grants any authority. When no resource is eligible it returns a bounded, actionable readiness projection suitable for UI display before provider dispatch. Revalidate a selection against the live catalog. Only this selected binding can disclose its full input schema; catalog search remains metadata only. Any catalog, policy, descriptor, verifier, readiness, or score change invalidates the binding before execution. Bind an already completed NaviModelBroker decision to this exact catalog snapshot. The broker remains the only selector; this method never scores, ranks, substitutes, or omits a route from the broker's decision. Functions Convert one existing NaviModelBroker decision into the Phase 8 resource selection contract without running a second selector. The broker's selected route and candidate order are authoritative. This projection only validates, binds, and signs that already made decision. Build the exact descriptor and verifier bindings for every model route in a broker candidate set. The descriptor hash intentionally shares the execution plan route domain so the persisted selection and executable plan attest the same normalized route. No provider","contentHash":"5882f5ad67d81d785e5d4c440e09b0db852be7b2a1d351e05635923fd5e309e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviResourceCatalog.md::0001","path":"webgpu-os/reference/kernel/navi/NaviResourceCatalog.md","title":"kernel/navi/NaviResourceCatalog.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviResourceCatalog.js","updated":"","headings":["kernel/navi/NaviResourceCatalog.js","Classes","class NaviResourceCatalog","Functions","async projectBrokerDecisionToResourceSelection(rawInput = {}, rawOptions = {})","async createNaviModelRouteResourceBindings(routeConfiguration, purpose)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"hash intentionally shares the execution plan route domain so the persisted selection and executable plan attest the same normalized route. No provider content or credential enters either binding. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"b8745850c70b5011dffc4945deba2b2e96caee91a3414532bb6645caec6b92e6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviResourceService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviResourceService.md","title":"kernel/navi/NaviResourceService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviResourceService.js","updated":"","headings":["kernel/navi/NaviResourceService.js","Classes","class NaviResourceServiceError extends Error","class NaviResourceService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel owned resource reservation, metering, and settlement. One encrypted CAS account owns every lease for one Navi task. An authenticated encrypted branch index owns the exact aggregate charge and account membership. Account and index revisions commit through one Store batch while all accounts for the same Navi branch share one Web Lock. Every task binds its exact kernel supplied resource ceiling on first reservation. Every externally meaningful lease state is an operationally signed navi resource lease v1 contract. Classes Method Signature Summary Method Signature Summary Advance at most one authenticated legacy account migration page. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c870ecc3f1b76ffc888a80e51f4a5ddea96fb63461bd43c95e9caff3c6b4e80d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviStrategyScorecard.md::0000","path":"webgpu-os/reference/kernel/navi/NaviStrategyScorecard.md","title":"kernel/navi/NaviStrategyScorecard.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviStrategyScorecard.js","updated":"","headings":["kernel/navi/NaviStrategyScorecard.js","Functions","async deriveNaviStrategyScorecard(raw = {})","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Deterministic, per Navi, analysis only scorecards from verified receipts. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"447190ae1d3169784ff50dc11a8bf10d6731de81234522c4cd7b989107734beb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviStrictProjectionInput.md::0000","path":"webgpu-os/reference/kernel/navi/NaviStrictProjectionInput.md","title":"kernel/navi/NaviStrictProjectionInput.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviStrictProjectionInput.js","updated":"","headings":["kernel/navi/NaviStrictProjectionInput.js","Functions","strictProjectionSnapshot(value, label = 'projection input')","exactProjectionKeys(value, allowed, label, required = [])","projectionInputError(message, code = 'NAVIPROJECTIONINPUTINVALID')","deepFreezeProjection(value)","uniqueSortedProjectionStrings(values, label, { minimum = 0, maximum = 1024 } = {})","strictProjectionTime(value, label)","compareCodeUnits(left, right)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Strict JSON input helpers shared by authority free Navi projections. These helpers reject accessors, extensions, cycles, sparse arrays, and non finite values before a projection derives hashes or evidence counts. Functions Strict JSON input helpers shared by authority free Navi projections. These helpers reject accessors, extensions, cycles, sparse arrays, and non finite values before a projection derives hashes or evidence counts. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4c36442b42b189c60581d8cd6b35daf8d69ade4de88881466c9fba80212f116a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviSurfaceIntelligence.md::0000","path":"webgpu-os/reference/kernel/navi/NaviSurfaceIntelligence.md","title":"kernel/navi/NaviSurfaceIntelligence.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviSurfaceIntelligence.js","updated":"","headings":["kernel/navi/NaviSurfaceIntelligence.js","Classes","class NaviSurfaceIntelligence","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviSurfaceIntelligence — bounded, read only semantic evidence for visible OS surfaces. Surface observations are untrusted evidence. They never grant authority and never execute an action. Mutations named by an action catalog still enter ToolRouter, Live Patch, Dodad Forge, or an app owned command boundary. Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"91c3c743dabb1babdba1ca45032c5fbb8c3ab89aac614ad853e10215d383da80"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviVfsOverlayService.md::0000","path":"webgpu-os/reference/kernel/navi/NaviVfsOverlayService.md","title":"kernel/navi/NaviVfsOverlayService.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviVfsOverlayService.js","updated":"","headings":["kernel/navi/NaviVfsOverlayService.js","Classes","class NaviVfsOverlayServiceError extends Error","class NaviVfsOverlayService","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Kernel owned VFS isolation for delegated Navi workers. A delegated file capability is issued for one deterministic hidden overlay root. The adapter never rewrites a signed path: it verifies that the exact execution path is inside the bound overlay and returns that same path. The immutable snapshot hash describes the overlay at admission time; subsequent writes remain constrained by the signed path scopes rather than changing the authorization identity after every edit. Storage accounting is deliberately application byte based. Kernel owned overlay metadata, hashes, and signed receipts are excluded. Creating an empty overlay and observing a snapshot therefore cost zero storage bytes. Moving an overlay into recoverable trash is a durable application data rewrite and is charged at the exact sum of the files present in its prepared snapshot. Classes Method Signature Summary Method Signature Summary Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8279ff039066c36f43de0b6076ef10fcd24c0c8345226c0d63b17d8e876fdedc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/NaviWorkspaceOutputIndex.md::0000","path":"webgpu-os/reference/kernel/navi/NaviWorkspaceOutputIndex.md","title":"kernel/navi/NaviWorkspaceOutputIndex.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/NaviWorkspaceOutputIndex.js","updated":"","headings":["kernel/navi/NaviWorkspaceOutputIndex.js","Classes","class NaviWorkspaceOutputIndex","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Rebuildable, non authoritative references to canonical workspace outputs. The index owns no file content. Every entry is derived from an exact VFS observation and points back to the app owned canonical path. Deleting the index loses no user data because the same projection can be rebuilt. Classes Method Signature Summary Content free app declarations used by a rebuild. Rebuild an index from current canonical VFS observations. and are runtime controls, not part of the strict serialized projection input. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6b5ee63594dc72f7748b819a6c666c4e9fceed82df77a0441fc47322ca2ecbc5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/SurfaceTemporalVerifier.md::0000","path":"webgpu-os/reference/kernel/navi/SurfaceTemporalVerifier.md","title":"kernel/navi/SurfaceTemporalVerifier.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/SurfaceTemporalVerifier.js","updated":"","headings":["kernel/navi/SurfaceTemporalVerifier.js","Classes","class SurfaceTemporalVerifier","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SurfaceTemporalVerifier compares two retained semantic captures. It is deliberately read only. Visual comparison accepts contract evidence that was captured earlier and compares content hashes only; it never reads a payload. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"0d7935f10d372c58dcbfc2f90fa25ebc8f70299e725191c2e708596d1005318d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/adapters/ConstructManifestationAdapter.md::0000","path":"webgpu-os/reference/kernel/navi/adapters/ConstructManifestationAdapter.md","title":"kernel/navi/adapters/ConstructManifestationAdapter.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/adapters/ConstructManifestationAdapter.js","updated":"","headings":["kernel/navi/adapters/ConstructManifestationAdapter.js","Classes","class NaviConstructManifestationAdapterError extends Error","Functions","createConstructManifestationAdapter({ bodyId, bodyRuntime, manifestationId = NAVICONSTRUCTPRIMARYMANIFESTATIONID, spawnPosition = [0, 0, 0], bodyOptions = {}, readActiveScene, readSelectedEntity, readVerifiedRealmPresence, readSpatialLocality, playAnimation, requestRealmAuthority, maxObservationBytes = DEFAULTMAXOBSERVATIONBYTES, clock = ()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Narrow Construct manifestation boundary. The adapter deliberately captures only bound ActiveBody style functions and explicit observation readers supplied by trusted kernel wiring. It never exposes the engine object, treats a body as identity, or derives authority from scene, presence, spatial, model, avatar, or body data. Classes Method Signature Summary Functions Create the trusted Construct runtime attached by NaviManifestationAdapterRegistry. bodyRuntime is expected to be an ActiveBodySystem compatible object. Readers are narrow kernel wrappers; each receives a frozen exact scope request. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"b5da189cdb6c80d88cd6d1073695539afa9ce7e55712ab9bf113c7f77e000bd1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/builtins/ArtifactStudioFaculty.md::0000","path":"webgpu-os/reference/kernel/navi/builtins/ArtifactStudioFaculty.md","title":"kernel/navi/builtins/ArtifactStudioFaculty.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/builtins/ArtifactStudioFaculty.js","updated":"","headings":["kernel/navi/builtins/ArtifactStudioFaculty.js","Functions","createArtifactStudioNaviFaculty({ descriptorHashes = {}, provenance = null, tests = [], signatures = null, version = ARTIFACTSTUDIOFACULTYVERSION, publisherId = ARTIFACTSTUDIOPUBLISHERID, } = {})","async createArtifactStudioFacultyPackageBinding(manifest, { resourceHash = null } = {})","assertArtifactStudioManifest(value)","artifactStudioPackageEvidence()","artifactStudioSignedManifest()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ArtifactStudioFaculty.js Canonical contract factory and worker source for AI Echo's built in Artifact Studio adapter. The worker is deliberately tiny: it can request exactly one declared Artifact tool and receives no storage, credential, network, DOM, or raw JavaScript authority of its own. Functions Return the complete package evidence shape consumed by NaviFacultyPackagePolicy. The release preamble wins when present; raw browser development uses the checked in public fallback package. No private signing material is present in either record. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"692046afd507ab169fdf443fe64e9957e02e27afe1d21927373055bcdf15d155"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/builtins/BrowserSemanticFaculty.md::0000","path":"webgpu-os/reference/kernel/navi/builtins/BrowserSemanticFaculty.md","title":"kernel/navi/builtins/BrowserSemanticFaculty.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/builtins/BrowserSemanticFaculty.js","updated":"","headings":["kernel/navi/builtins/BrowserSemanticFaculty.js","Functions","browserSemanticFacultyDefinitionAtVersion(version)","createBrowserSemanticNaviFaculty({ descriptorHashes = {}, provenance = null, tests = [], signatures = null, version = BROWSERSEMANTICFACULTYVERSION, publisherId = BROWSERSEMANTICPUBLISHERID, maxCalls = 1, } = {})","async createBrowserSemanticFacultyPackageBinding(manifest, { resourceHash = null } = {})","assertBrowserSemanticManifest(value, definition = BROWSERSEMANTICFACULTYDEFINITION)","browserSemanticPackageEvidence()","browserSemanticSignedManifest()","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Canonical signed boundary for extension backed semantic browser automation. The package is installed inert: only an explicit operator action may enable its device and network authority for a Navi. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"638d12daf545139dc9d995344e4bc84d309d149f6c34c7891914fb0942e49fdb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/builtins/BuiltInFacultyPackageEvidence.md::0000","path":"webgpu-os/reference/kernel/navi/builtins/BuiltInFacultyPackageEvidence.md","title":"kernel/navi/builtins/BuiltInFacultyPackageEvidence.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/builtins/BuiltInFacultyPackageEvidence.js","updated":"","headings":["kernel/navi/builtins/BuiltInFacultyPackageEvidence.js","Functions","builtInFacultyPackageEvidence({ label, packageId, version, publisherId, sourcePath, source, generatedPackage, assertManifest, })","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared fail closed reader for OS owned signed Faculty package evidence. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"aa70f63fa81f7eb9fa1031314f73fd272ad977085a331d8715c180450dfbadb0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/builtins/BuiltInToolFaculties.md::0000","path":"webgpu-os/reference/kernel/navi/builtins/BuiltInToolFaculties.md","title":"kernel/navi/builtins/BuiltInToolFaculties.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/builtins/BuiltInToolFaculties.js","updated":"","headings":["kernel/navi/builtins/BuiltInToolFaculties.js","Functions","builtInToolFacultyDefinition(facultyId)","builtInToolFacultyDefinitionAtVersion(definitionOrId, version)","assertBuiltInToolFacultyManifest(value, definitionOrId)","builtInToolFacultyPackageEvidence(definitionOrId)","builtInToolFacultySignedManifest(definitionOrId)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions Bind one catalog definition to the immutable version carried by its signed package. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"03ac7c570c5dc1824e88f69261500e0517c3eede2e5bea129ea276f77b73d20f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/contracts/ContractCanonical.md::0000","path":"webgpu-os/reference/kernel/navi/contracts/ContractCanonical.md","title":"kernel/navi/contracts/ContractCanonical.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/contracts/ContractCanonical.js","updated":"","headings":["kernel/navi/contracts/ContractCanonical.js","Functions","naviSigningValue(contract)","canonicalNaviSigningText(contract)","canonicalNaviSigningBytes(contract)","async hashNaviSigningPayload(contract)","async hashNaviContractEnvelope(contract)","naviSigningPayloadEquals(a, b)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ContractCanonical.js — domain separated signing bytes and secure identifiers. Functions Return the JSON value covered by every top level Navi contract signature. Signature envelopes are excluded to avoid circular signing input. Return the deterministic, domain separated signing text. Return the exact UTF 8 bytes that P 256 signs or verifies. Return a tagged SHA 256 identifier for the signature covered payload. Return a tagged SHA 256 identifier for the complete signed envelope. Compare contract payloads without relying on insertion order. Useful before signing, during recovery diffs, and when checking fixture determinism. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"de75bcf94cfcefb183ebbf31a135083ad582bc43732f3d6bb00701cbe8ba932d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/contracts/ContractRegistry.md::0000","path":"webgpu-os/reference/kernel/navi/contracts/ContractRegistry.md","title":"kernel/navi/contracts/ContractRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/contracts/ContractRegistry.js","updated":"","headings":["kernel/navi/contracts/ContractRegistry.js","Functions","createNaviContractRegistry()","isKnownNaviSchema(schemaId)","validateNaviContract(data, expectedSchemaId = null, options = {})","assertNaviContract(data, expectedSchemaId = null, options = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ContractRegistry.js — isolated Navi v1 schema registry and semantic checks. This registry deliberately does not mutate the OS wide singleton. Kernel bootstrap can integrate it after the Phase 0 gate passes without making an import of this module a side effect. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"3a304c7ea23947ac90e2781d22a8ede7833d8030155357db32672e97a65cb74d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/contracts/ContractSchemas.md::0000","path":"webgpu-os/reference/kernel/navi/contracts/ContractSchemas.md","title":"kernel/navi/contracts/ContractSchemas.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/contracts/ContractSchemas.js","updated":"","headings":["kernel/navi/contracts/ContractSchemas.js","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ContractSchemas.js — strict, versioned Navi v1 wire schemas. The OS schema validator intentionally supports a compact JSON Schema subset. Every declared object is closed with additionalProperties:false. Fields that intentionally contain application JSON are named or and are still checked by ContractRegistry's JSON safety pass before acceptance. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"1e5aa0aa3feb2acf619453c74cc11f9a3104810451dde1f0e65ec20df5f75465"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/contracts/Vocabulary.md::0000","path":"webgpu-os/reference/kernel/navi/contracts/Vocabulary.md","title":"kernel/navi/contracts/Vocabulary.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/contracts/Vocabulary.js","updated":"","headings":["kernel/navi/contracts/Vocabulary.js","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Vocabulary.js — canonical Navi v1 terminology and closed policy vocabularies. These values are wire contracts. Additions require a new contract revision; renaming an entry would change signed meaning and is therefore forbidden. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"07c97218032c11eb2b9f761261f51d7af91d935f9d64474b5148d8ca860a8c63"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/navi/contracts/index.md::0000","path":"webgpu-os/reference/kernel/navi/contracts/index.md","title":"kernel/navi/contracts/index.js","description":"","kind":"reference","source":"webgpu-os/kernel/navi/contracts/index.js","updated":"","headings":["kernel/navi/contracts/index.js","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Re exports , , , , , , , , , , , , , , , , , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"000c23223c8b061cc31a4216b064a50e49797fde241a626dc4cf015a3547154f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/net-safety.md::0000","path":"webgpu-os/reference/kernel/net-safety.md","title":"kernel/net-safety.js","description":"","kind":"reference","source":"webgpu-os/kernel/net-safety.js","updated":"","headings":["kernel/net-safety.js","Functions","isPrivateHost(host)","assertSafeFetchUrl(url, opts = {})","isLocalDevHost(host)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: net safety.js — shared SSRF / private host guards for OS mediated fetches. Reused by the sandboxed app network bridge, the package UpdateManager, and the package source URL policy so the same allow/deny rules apply everywhere: http(s) only (no file:, data:, blob:, chrome extension:, etc.) no embedded credentials in the URL no loopback / link local / RFC 1918 / CGNAT / multicast / .local hosts Public hostnames pass (still subject to the browser's CORS rules). Functions True if a hostname points at the local machine or a private network range. Parameters: (string) — No description in source JSDoc. Validate and normalise a URL for an OS mediated fetch. Throws on policy violation; returns the normalised href on success. Parameters: (string) — No description in source JSDoc. Returns: normalised href True when a host is localhost like (used to relax https for local dev sources). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"dd0f3693ef9ec5a74d1b7be10e25591e3e36144da293b17a223323e68c38f513"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/CapabilityNegotiator.md::0000","path":"webgpu-os/reference/kernel/protocol/CapabilityNegotiator.md","title":"kernel/protocol/CapabilityNegotiator.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/CapabilityNegotiator.js","updated":"","headings":["kernel/protocol/CapabilityNegotiator.js","Classes","class CapabilityNegotiator","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CapabilityNegotiator.js — Particle Realms Protocol capability minting. Thin wrapper over engine/state's CapabilityRegistry + Capability.js (makeCapability/attenuate/authorizes) — no parallel capability logic. Used by the AI Hub's two pass execution loop (Phase 9) to mint short lived, narrowly scoped capabilities for a single OS.ai() request's tool/resource access, on top of (not instead of) the RuleGraph/Permissions manifest gate. Classes Method Signature Summary Mint and register a capability for to perform on (a tool name, resource URI, or prompt name). Narrow a capability with an additional caveat — never widens (Capability.attenuate enforces this). Direct authorization check without touching the registry (e.g. for a capability minted elsewhere). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"0c282be5d965d86e711c129e30977e514650ab0132945bf82ad31c035b2692d2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/ElicitationManager.md::0000","path":"webgpu-os/reference/kernel/protocol/ElicitationManager.md","title":"kernel/protocol/ElicitationManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/ElicitationManager.js","updated":"","headings":["kernel/protocol/ElicitationManager.js","Classes","class ElicitationManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes ElicitationManager.js — Particle Realms Protocol elicitation (MCP inspired): lets a mid task AI Hub request pause and ask the user a clarifying question instead of guessing. Phase 4 provides the data layer queue; Phase 8's overlay (ElicitationCard.js) is the UI that calls respond()/decline(). Method Signature Summary Ask the user a question mid task. Resolves with the user's structured answer, or rejects on decline/timeout. Approval prompts wait for an explicit operator decision by default. Callers that genuinely need an expiring approval must declare schema.timeoutPolicy = 'expire'. Called by the overlay UI (Phase 8) when the user answers. Kernel only approval token issuer for an exact policy reviewed grant. This does not perform a policy decision. Callers must already have an explicit kernel mode such as Bypass and must still consume the token against the identical grant before the protected operation dispatches. Kernel only one shot verification for an exact user approved action. App scoped cancellation for a deduplicated non capability review. Kernel owned cancellation for every prompt attached to one task. Kernel only settlement for policy reviewed approval prompts belonging to one exact active task. Bypass mode may suppress operator elicitation, but it must not answer clarification, adaptation, recovery, or any prompt owned by another app/request. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities.","contentHash":"00fbdbb86e10cb695c223e284e8b1c778cb05f79c8587850757ab38802cb7f30"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/ElicitationManager.md::0001","path":"webgpu-os/reference/kernel/protocol/ElicitationManager.md","title":"kernel/protocol/ElicitationManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/ElicitationManager.js","updated":"","headings":["kernel/protocol/ElicitationManager.js","Classes","class ElicitationManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"53208c29bf1c5c118cc5895a6287cc99f4712ba2503942127d96ebec0fecf295"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/ParticleRealmsProtocol.md::0000","path":"webgpu-os/reference/kernel/protocol/ParticleRealmsProtocol.md","title":"kernel/protocol/ParticleRealmsProtocol.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/ParticleRealmsProtocol.js","updated":"","headings":["kernel/protocol/ParticleRealmsProtocol.js","Classes","class ParticleRealmsProtocol","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParticleRealmsProtocol.js — the MCP inspired protocol facade tying together this app's capability/tool/resource/prompt/root/elicitation/sampling registries. Exposed as kernel.protocol; wrapped by syscalls.protocol. An app calls declare(manifest) once (validated against os.AppAICapabilityManifest in OsSchemas.js) to register its tool/resource/ prompt/root metadata for AI discovery. Declaring metadata here is always advisory/self descriptive — it never grants authority; actual tool execution still goes through ToolRouter's firewall (Phase 3) and actual resource reads still go through ResourceRegistry UntrustedBoundary. Classes Method Signature Summary An app declares its full AI capability manifest in one call. Tools must already be registered with kernel.toolDriver (undeclared/unknown tools are skipped with a warning, never throw — a manifest typo shouldn't crash app boot). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"fdc6b43290d9b0074157f9e2033160cdc6e1f92af9453e81d36c9f9569f5b9a5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/PromptRegistry.md::0000","path":"webgpu-os/reference/kernel/protocol/PromptRegistry.md","title":"kernel/protocol/PromptRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/PromptRegistry.js","updated":"","headings":["kernel/protocol/PromptRegistry.js","Classes","class PromptRegistry","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PromptRegistry.js — Particle Realms Protocol named prompt template catalog (MCP inspired \"prompts\"). Apps register a render(args) function; the OS owns the final prompt text by always routing rendered output through PromptRegistry.sanitize() before it reaches the AI Hub — an app cannot smuggle raw control tokens or fake role delimiters into the final prompt. Classes PromptRegistry.js — Particle Realms Protocol named prompt template catalog (MCP inspired \"prompts\"). Apps register a render(args) function; the OS owns the final prompt text by always routing rendered output through PromptRegistry.sanitize() before it reaches the AI Hub — an app cannot smuggle raw control tokens or fake role delimiters into the final prompt. Method Signature Summary Metadata only (no render function) — safe to hand to the AI Hub for discovery. Render a registered prompt template, then run it through the OS sanitization pipeline. Strip control characters and role/untrusted delimiters the OS itself uses internally. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"3321c466ec29f85ec13087691602c5b647319837472963a22c090e34975846b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/ResourceRegistry.md::0000","path":"webgpu-os/reference/kernel/protocol/ResourceRegistry.md","title":"kernel/protocol/ResourceRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/ResourceRegistry.js","updated":"","headings":["kernel/protocol/ResourceRegistry.js","Classes","class ResourceRegistry","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ResourceRegistry.js — Particle Realms Protocol resource catalog. Apps expose readable data to the AI Hub under a URI scheme (MCP inspired \"resources\"). Every read is routed through engine/state/worldmodel/UntrustedBoundary.js (Phase 3 reuse) before it's handed back — resource content is always an untrusted observation, never authority, regardless of how much the reading app trusts its own data. Classes Method Signature Summary Register the live reader function for URIs. Record declarative resource metadata (from an AppAICapabilityManifest). Remove both live and declarative state for a closed app. Read a resource. Returns { uri, value, observation } — value is untrusted content. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"b5c263e5dd14eb48f3c81de555619da1614705f0b0179a17e452b16f6b23861a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/RootBoundaryManager.md::0000","path":"webgpu-os/reference/kernel/protocol/RootBoundaryManager.md","title":"kernel/protocol/RootBoundaryManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/RootBoundaryManager.js","updated":"","headings":["kernel/protocol/RootBoundaryManager.js","Classes","class RootBoundaryManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RootBoundaryManager.js — Particle Realms Protocol \"roots\" (MCP inspired): the set of resource URI prefixes an app has declared as in scope for a given AI request. Roots only ever NARROW what an OS.ai() request may touch — they are advisory scoping on top of (never a substitute for) the ResourceRegistry/RuleGraph capability checks. Classes RootBoundaryManager.js — Particle Realms Protocol \"roots\" (MCP inspired): the set of resource URI prefixes an app has declared as in scope for a given AI request. Roots only ever NARROW what an OS.ai() request may touch — they are advisory scoping on top of (never a substitute for) the ResourceRegistry/RuleGraph capability checks. Method Signature Summary True if falls within one of appId's declared roots (default root: the app's own scheme). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c1fbe51d251dbe927a4ed9a2ca74113e6d759d40042bce72c65d6f1bf33e92b1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/SamplingBroker.md::0000","path":"webgpu-os/reference/kernel/protocol/SamplingBroker.md","title":"kernel/protocol/SamplingBroker.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/SamplingBroker.js","updated":"","headings":["kernel/protocol/SamplingBroker.js","Classes","class SamplingBroker","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SamplingBroker.js — Particle Realms Protocol sampling (MCP inspired): lets a TOOL handler request a nested LLM completion mid execution (the inverse of a normal OS.ai() call). Every sample enters the full AI executor, which creates a model neutral Navi task and applies Covenant disclosure, resource, tool firewall, verification, and receipt policy. There is no raw AI Hub fallback. A hard recursion depth guard prevents sampling loops. Classes SamplingBroker.js — Particle Realms Protocol sampling (MCP inspired): lets a TOOL handler request a nested LLM completion mid execution (the inverse of a normal OS.ai() call). Every sample enters the full AI executor, which creates a model neutral Navi task and applies Covenant disclosure, resource, tool firewall, verification, and receipt policy. There is no raw AI Hub fallback. A hard recursion depth guard prevents sampling loops. Method Signature Summary A tool handler requests a bounded, receipted Navi task during execution. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"68a5131c9c190e85117d65f218e92877c6474b328fd8283f4d3ff18ecc6e7848"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/protocol/ToolRegistry.md::0000","path":"webgpu-os/reference/kernel/protocol/ToolRegistry.md","title":"kernel/protocol/ToolRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/protocol/ToolRegistry.js","updated":"","headings":["kernel/protocol/ToolRegistry.js","Classes","class ToolRegistry","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ToolRegistry.js — Particle Realms Protocol tool catalog. Distinct from kernel.toolDriver (the low level execute/history engine, see webgpu os/kernel/ToolDriver.js) and kernel.toolRouter (the AI Tool Firewall, see webgpu os/kernel/tools/ToolRouter.js): this is the per app CATALOG that says \"this app opts this already registered tool into AI discovery\", so the AI Hub's two pass execution loop (Phase 9) knows which tools are legal for a given app's request. Declaring a tool here never bypasses ToolRouter's firewall — it only makes the tool visible/offered. Classes ToolRegistry.js — Particle Realms Protocol tool catalog. Distinct from kernel.toolDriver (the low level execute/history engine, see webgpu os/kernel/ToolDriver.js) and kernel.toolRouter (the AI Tool Firewall, see webgpu os/kernel/tools/ToolRouter.js): this is the per app CATALOG that says \"this app opts this already registered tool into AI discovery\", so the AI Hub's two pass execution loop (Phase 9) knows which tools are legal for a given app's request. Declaring a tool here never bypasses ToolRouter's firewall — it only makes the tool visible/offered. Method Signature Summary Declare that offers (already registered with kernel.toolDriver) to the AI Hub. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4d1b6a9948163beaace78e2db0e59ef8f73bc838c71f343f23d46e8f8626900f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/BinaryPack.md::0000","path":"webgpu-os/reference/kernel/schema/BinaryPack.md","title":"kernel/schema/BinaryPack.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/BinaryPack.js","updated":"","headings":["kernel/schema/BinaryPack.js","Classes","class BinaryPackError extends Error","Functions","pack(value)","unpack(buf)","packToBase64(value)","unpackBase64(str)","packedSize(value)","packEqual(a, b)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: BinaryPack.js — custom binary codec, zero external dependencies. Wire format: MessagePack specification (https://msgpack.org/index.html) Implemented from spec only — not copied from any library. API: pack(value) → Uint8Array unpack(buf) → value packToBase64(value) → string (base64 encoded packed bytes) unpackBase64(str) → value Supported types: null / undefined → nil boolean → true / false integer (safe) → positive/negative fixint, uint8 32, int8 32 float → float64 string → fixstr / str8 / str16 / str32 Uint8Array → bin8 / bin16 / bin32 Array → fixarray / array16 / array32 Object (plain) → fixmap / map16 / map32 Byte layout (big endian throughout, per spec): 0x00–0x7f positive fixint 0x80–0x8f fixmap (N = low nibble) 0x90–0x9f fixarray (N = low nibble) 0xa0–0xbf fixstr (N = low 5 bits) 0xc0 nil 0xc2 false 0xc3 true 0xc4–0xc6 bin8 / bin16 / bin32 0xca float32 (encode uses float64 for precision) 0xcb float64 0xcc–0xcf uint8 / uint16 / uint32 / uint64 0xd0–0xd3 int8 / int16 / int32 / int64 0xd9–0xdb str8 / str16 / str32 0xdc–0xdd array16 / array32 0xde–0xdf map16 / map32 0xe0–0xff negative fixint int64/uint64 are encoded as float64 when v 2^32 (JS safe integer limit). Classes Method Signature Summary Functions Encode any JS value to a Uint8Array (MessagePack wire format). Decode a Uint8Array or ArrayBuffer from MessagePack wire format. Pack and base64 encode — useful for JSON embedding and localStorage. Decode a base64 encoded pack string. Return the packed byte size of a value without keeping the buffer. Compare two values by structural equality using pack → byte comparison. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app","contentHash":"d130cef1c45e8bfd2d989b80dd94bbe22c642c0e71154a03283ea3b2ef1ab5be"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/BinaryPack.md::0001","path":"webgpu-os/reference/kernel/schema/BinaryPack.md","title":"kernel/schema/BinaryPack.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/BinaryPack.js","updated":"","headings":["kernel/schema/BinaryPack.js","Classes","class BinaryPackError extends Error","Functions","pack(value)","unpack(buf)","packToBase64(value)","unpackBase64(str)","packedSize(value)","packEqual(a, b)","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"structural equality using pack → byte comparison. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"ce0d4b0830688cd9a4450b741f988f3fdbdc523cd12154745ee71e1d1b381113"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/OsSchemas.md::0000","path":"webgpu-os/reference/kernel/schema/OsSchemas.md","title":"kernel/schema/OsSchemas.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/OsSchemas.js","updated":"","headings":["kernel/schema/OsSchemas.js","Functions","initOsSchemas()","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: OsSchemas.js — all OS level schema definitions. Registers schemas into the shared SchemaRegistry singleton. Call initOsSchemas() once during KernelBootstrap. Registered names: os.AppManifest — app discovery manifest (manifest.json) os.AppSetting — one settings descriptor inside a manifest os.ModManifest — mod discovery manifest os.ModHook — one hook entry in a mod manifest os.IPCMessage — IPC channel message envelope os.VFSNode — virtual filesystem node metadata os.GPUSurface — GPU surface descriptor os.VRAMEntry — per app VRAM usage report os.ProcessEntry — process table entry os.PermissionCheck — permission check result os.Particle — particle struct for binary packing (6 × f32) os.ParticleBatch — array of particles os.NetPeerMessage — envelope sent between OS peers via NetDriver os.AppAICapabilityManifest — Particle Realms Protocol tool/resource/prompt/root declaration Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"23470f1eb492effcc3883287ac5557607f901e3016138383f54c4b0a5b03b2e2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/SchemaRegistry.md::0000","path":"webgpu-os/reference/kernel/schema/SchemaRegistry.md","title":"kernel/schema/SchemaRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/SchemaRegistry.js","updated":"","headings":["kernel/schema/SchemaRegistry.js","Classes","class SchemaRegistry","Constants","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SchemaRegistry.js — named schema store with validation and binary packing. Acts as the central authority for all schema definitions in the OS. Schemas are registered by name and resolved by $ref. Features: Named schema registration and lookup validate(name, data) → { valid, errors } assert(name, data) → throws SchemaValidationError if invalid pack(name, data) → Uint8Array (validates then binary packs) unpack(name, buf) → value (binary unpacks then validates) packAny(data) → Uint8Array (binary packs without schema) unpackAny(buf) → value (binary unpacks without validation) Usage: import { schemaRegistry as sr } from './SchemaRegistry.js'; sr.define('myapp.MyType', { type: 'object', required: ['id'], properties: { id: { type: 'string' } } }); sr.assert('myapp.MyType', { id: 'abc' }); const bytes = sr.pack('myapp.MyType', { id: 'abc' }); Classes Method Signature Summary Register a named schema. Chainable. Return the schema for , or null. Check whether a named schema is registered. List all registered schema names. List registered versions without changing the selected default. Remove a schema. Validate data against a named schema. Validate and throw SchemaValidationError if invalid. Validate then binary pack data using MessagePack format. Binary unpack then validate. Binary pack without schema validation. Binary unpack without schema validation. Constants Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example:","contentHash":"90b673b6e571fe027f42b3696df974d00c2cd54aaedff9af2e0e7e3df3ea6f54"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/SchemaRegistry.md::0001","path":"webgpu-os/reference/kernel/schema/SchemaRegistry.md","title":"kernel/schema/SchemaRegistry.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/SchemaRegistry.js","updated":"","headings":["kernel/schema/SchemaRegistry.js","Classes","class SchemaRegistry","Constants","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bf9878fff450dad3b0da2e75f1cbddf338dd18f76da63257b16802b0d451161b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/SchemaValidator.md::0000","path":"webgpu-os/reference/kernel/schema/SchemaValidator.md","title":"kernel/schema/SchemaValidator.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/SchemaValidator.js","updated":"","headings":["kernel/schema/SchemaValidator.js","Classes","class SchemaValidationError extends Error","class SchemaValidator","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SchemaValidator.js — JSON Schema (subset) validator, zero dependencies. Supported keywords: type string number integer boolean null array object 'any' properties { key: schema } required string[] additionalProperties boolean schema (false = deny unknown keys) items schema (all elements) or schema[] (positional) minLength / maxLength / pattern (string) minimum / maximum / exclusiveMinimum / exclusiveMaximum / multipleOf (number) minItems / maxItems (array) minProperties / maxProperties (object) const exact value match enum allowed values list oneOf / anyOf / allOf / not nullable shorthand — wraps schema as oneOf:[schema,{type:'null'}] $ref string — resolved via refResolver(name) Usage: const v = new SchemaValidator(refResolver); const { valid, errors } = v.validate(data, schema); v.assert(data, schema, 'MyContext'); // throws SchemaValidationError Classes SchemaValidator.js — JSON Schema (subset) validator, zero dependencies. Supported keywords: type string number integer boolean null array object 'any' properties { key: schema } required string[] additionalProperties boolean schema (false = deny unknown keys) items schema (all elements) or schema[] (positional) minLength / maxLength / pattern (string) minimum / maximum / exclusiveMinimum / exclusiveMaximum / multipleOf (number) minItems / maxItems (array) minProperties / maxProperties (object) const exact value match enum allowed values list oneOf / anyOf / allOf / not nullable shorthand — wraps schema as oneOf:[schema,{type:'null'}] $ref string — resolved via refResolver(name) Usage: const v = new SchemaValidator(refResolver); const { valid, errors } = v.validate(data, schema); v.assert(data, schema, 'MyContext'); // throws","contentHash":"424f96373f8a78d82edc3bd17de604f502c2ec48f5fd38f575730aedde335d36"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/SchemaValidator.md::0001","path":"webgpu-os/reference/kernel/schema/SchemaValidator.md","title":"kernel/schema/SchemaValidator.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/SchemaValidator.js","updated":"","headings":["kernel/schema/SchemaValidator.js","Classes","class SchemaValidationError extends Error","class SchemaValidator","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"Usage: const v = new SchemaValidator(refResolver); const { valid, errors } = v.validate(data, schema); v.assert(data, schema, 'MyContext'); // throws SchemaValidationError Method Signature Summary Method Signature Summary Validate data against schema. Validate and throw SchemaValidationError if invalid. Constants — Fluent schema type builders for ergonomic schema authoring. import { t } from './SchemaValidator.js'; const schema = t.obj({ name: t.str({ minLength: 1 }), age: t.int({ minimum: 0 }) }, ['name']); <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"03511b4b3c5f727db5abadf1ac8fd1d61d42689b6e5e78d91e0659db7aad64d0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/ShellPreferenceRecords.md::0000","path":"webgpu-os/reference/kernel/schema/ShellPreferenceRecords.md","title":"kernel/schema/ShellPreferenceRecords.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/ShellPreferenceRecords.js","updated":"","headings":["kernel/schema/ShellPreferenceRecords.js","Functions","readVersionedStorageRecord(storage, contract, { normalizeLegacy, normalizeCurrent })","writeVersionedStorageRecord(storage, contract, value, normalizers)","readNotificationPreferences(storage)","writeNotificationPreferences(patch, storage)","readUiSoundPreferences(storage)","writeUiSoundPreferences(value, storage)","readAudioPreferences(storage)","writeAudioPreferences(value, storage)","readAmbientPreferences(storage)","writeAmbientPreferences(config, storage)","readDeepLinkPreferences(storage)","writeDeepLinkPreferences(value, storage)","readWindowStateCache(storage)","writeWindowStateCache(states, storage)","readAiOverlayPosition(storage)","writeAiOverlayPosition(position, storage)","readSyncRulePreferences(storage)","writeSyncRulePreferences(rules, storage)","readStartMenuPreferences(storage)","writeStartMenuPreferences(patch, storage)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Versioned, schema specific localStorage records shared by the OS shell. Readers accept the one historical unversioned shape that each preference used before schema versioning. Writers always publish the current envelope and must successfully preflight the existing value before touching storage. Unsupported or corrupt records are therefore quarantined in place. Functions Strictly read a versioned shell preference without ever rewriting it. Preflight the old record, then atomically replace its one localStorage key. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"09cad848f95526f12c9112297604d8517ac0f0f7667ddb75802f8cc7000eaf09"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/schema/index.md::0000","path":"webgpu-os/reference/kernel/schema/index.md","title":"kernel/schema/index.js","description":"","kind":"reference","source":"webgpu-os/kernel/schema/index.js","updated":"","headings":["kernel/schema/index.js","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: kernel/schema/index.js — barrel export for the OS schema system. Usage (anywhere in the OS): import { schemaRegistry, t, pack, unpack } from '../schema/index.js'; Re exports , , , , , , , , , , , , <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d206aad50e4ad9f8b5ff9c64948219866946dd12656adbbdf5b7ff6c9564701c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/state/AppStateChannelAdapter.md::0000","path":"webgpu-os/reference/kernel/state/AppStateChannelAdapter.md","title":"kernel/state/AppStateChannelAdapter.js","description":"","kind":"reference","source":"webgpu-os/kernel/state/AppStateChannelAdapter.js","updated":"","headings":["kernel/state/AppStateChannelAdapter.js","Classes","class AppStateChannelAdapter","Functions","createAppStateChannelAdapter(options)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes CSE backed State Channel authority for an app owned AppStateEngine key. AppStateEngine remains the source of truth and its expectedVersion is the compare and swap fence for every accepted intent. Method Signature Summary Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"36e3bdc81c9dc89a07d25b6542dbd9afffee8d6ba74a5f919546f593f61de660"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/state/AppStateEngine.md::0000","path":"webgpu-os/reference/kernel/state/AppStateEngine.md","title":"kernel/state/AppStateEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/state/AppStateEngine.js","updated":"","headings":["kernel/state/AppStateEngine.js","Classes","class AppStateEngine","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AppStateEngine — app scoped CSE state exposed through guarded syscalls. Logical values are immutable EntityRegistry versions. Every successful write is HLC stamped and appended to a shared hash chained EventLog. Apps never receive the registry or log directly; Syscalls injects the authenticated appId so a caller cannot address another app's state. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4859aa1458d40f98cfe58febfffbbf5e87f9e784905b589749351aa343e37d2d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/AIStoryletFactory.md::0000","path":"webgpu-os/reference/kernel/storylets/AIStoryletFactory.md","title":"kernel/storylets/AIStoryletFactory.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/AIStoryletFactory.js","updated":"","headings":["kernel/storylets/AIStoryletFactory.js","Classes","class AIStoryletFactory","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AIStoryletFactory.js — defines the OS's AI pipeline storylets via the existing createStorylet() from engine/gameplay/narrative/StoryGraph.js. Each storylet gates on the request worldState's and advances it; Phase 9's two pass execution loop drives StoryletRuntime.tick() with these. Pipeline phases: received → classified → contextGathered → capabilitiesNegotiated → tierChosen → planned → executed → finalized (+ 'malformed' → repair) Handlers are injected (not hardcoded) so the factory stays a pure catalog; every handler receives the worldState and returns a storylet result ({ phase, facts?, observations?, ... } — see StoryletEffectsApplier). Classes Method Signature Summary Classify an incoming OS.ai() goal (task type, risk, scope). Gather app context/resources for the request (within declared roots). Negotiate short lived capabilities for the tools/resources the plan needs. Choose the model tier (fast/balanced/deep) for the task. First pass: call the planner model to produce a structured plan. Second pass: call the finalizer model over executed tool results. Repair malformed structured output (bad JSON) instead of failing the task. The full standard pipeline set, in one call. @param {object} handlers keyed by short name. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"850bb572b8ea42af8645a776762449d4324013982ef2f8393185ba0c443c3b52"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/AdversarialFixtures.md::0000","path":"webgpu-os/reference/kernel/storylets/AdversarialFixtures.md","title":"kernel/storylets/AdversarialFixtures.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/AdversarialFixtures.js","updated":"","headings":["kernel/storylets/AdversarialFixtures.js","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AdversarialFixtures.js — the canned adversarial test list for the Phase 14 storylet harness. Two families: 1. DESCRIPTOR fixtures — malformed/poisoned storylet DEFINITIONS that must fail StoryletDescriptorSanitizer.scan (prompt injection, bad id, wrong handler types). 2. WORLDSTATE fixtures — hostile task states a well formed storylet must handle safely: missing tools, poisoned resource/descriptor text, hidden params, a changed attestation hash, a bad mass ratio, an exploding joint. These are DATA only; the runner decides pass/fail. means the storylet must NOT trigger (or must trigger and return a rejecting result) — never silently proceed as if the state were trustworthy. Constants — Poisoned/malformed storylet definitions — must fail sanitization. — Hostile task worldStates — a well formed storylet must handle each safely. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"38024a1867370cab13c73de4f0922c66fa40811b0e3e20b7c09e847a18caf160"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/NaviTaskEpisodeRuntime.md::0000","path":"webgpu-os/reference/kernel/storylets/NaviTaskEpisodeRuntime.md","title":"kernel/storylets/NaviTaskEpisodeRuntime.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/NaviTaskEpisodeRuntime.js","updated":"","headings":["kernel/storylets/NaviTaskEpisodeRuntime.js","Classes","class NaviTaskEpisodeRuntime","Functions","async validateEpisodeSnapshot(snapshot)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NaviTaskEpisodeRuntime.js — deterministic, resumable task episodes for onboarding, approvals, recovery, provider failure, handoff, and long builds. Episode actions are data only proposals. This runtime cannot execute tools, grant authority, force fire Storylets, or choose a random transition. Classes Method Signature Summary Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"69af2b0ba9e7dd713c8b7b83252f93cae6fc0bc6cb9d7e12205301d51165414a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/OSEventGraphAdapter.md::0000","path":"webgpu-os/reference/kernel/storylets/OSEventGraphAdapter.md","title":"kernel/storylets/OSEventGraphAdapter.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/OSEventGraphAdapter.js","updated":"","headings":["kernel/storylets/OSEventGraphAdapter.js","Classes","class OSEventGraphAdapter","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: OSEventGraphAdapter.js — minimal shim satisfying StoryGraph's expected EventGraph collaborator (engine/gameplay/core/ EventGraph.js doesn't exist yet). Fired storylet events are: 1. re emitted on the kernel event bus as , 2. kept in a bounded in memory log, and 3. forwarded to the Task Ledger's event/observation log once Phase 8 attaches it via setLedger(). Classes OSEventGraphAdapter.js — minimal shim satisfying StoryGraph's expected EventGraph collaborator (engine/gameplay/core/ EventGraph.js doesn't exist yet). Fired storylet events are: 1. re emitted on the kernel event bus as , 2. kept in a bounded in memory log, and 3. forwarded to the Task Ledger's event/observation log once Phase 8 attaches it via setLedger(). Method Signature Summary Phase 8: attach the Task Ledger so storylet events land in its observation log. StoryGraph collaborator contract: emit({ type, data, tags, description }). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"008fbf2ec4c8e0d0b7a1a7947e3d9b3ffdacccda432192b385baf284acb69067"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/StoryletDescriptorSanitizer.md::0000","path":"webgpu-os/reference/kernel/storylets/StoryletDescriptorSanitizer.md","title":"kernel/storylets/StoryletDescriptorSanitizer.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/StoryletDescriptorSanitizer.js","updated":"","headings":["kernel/storylets/StoryletDescriptorSanitizer.js","Classes","class StoryletDescriptorSanitizer","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StoryletDescriptorSanitizer.js — validates a storylet definition before registration. Reuses Phase 5's DescriptorSanitizer for prompt injection text scanning (no parallel scanner) and adds storylet specific structural checks (id shape, handler types, sane numeric gates). Classes Method Signature Summary Throw if the config fails the scan. Returns the config for chaining. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"07ed47efe7adf7ef869496ecd34666c99f77af65e4d01e95436f10ae93cfc280"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/StoryletEffectsApplier.md::0000","path":"webgpu-os/reference/kernel/storylets/StoryletEffectsApplier.md","title":"kernel/storylets/StoryletEffectsApplier.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/StoryletEffectsApplier.js","updated":"","headings":["kernel/storylets/StoryletEffectsApplier.js","Classes","class StoryletEffectsApplier","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StoryletEffectsApplier.js — applies a storylet execute() result into the Task Ledger / Fact Store instead of game consequences/memories. Facts are monotonic canonical strings (engine/state/facts) — never deleted, only tombstoned — so an AI task's effect history stays audit stable. Classes Method Signature Summary Apply one fired storylet result for a request. Recognized result fields: facts: [[predicate, ...args]] — recorded in the Fact Store observations: [any] — recorded to the Task Ledger phase: string — the worldState phase to advance to <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"5279b47bbf465759e010490ff75f3adca98a9483599700316cfc40d6fa5bc276"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/StoryletEligibilityBridge.md::0000","path":"webgpu-os/reference/kernel/storylets/StoryletEligibilityBridge.md","title":"kernel/storylets/StoryletEligibilityBridge.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/StoryletEligibilityBridge.js","updated":"","headings":["kernel/storylets/StoryletEligibilityBridge.js","Classes","class StoryletEligibilityBridge","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StoryletEligibilityBridge.js — layers doctrine preconditions on top of StoryGraph's built in cooldown/maxFires gating by COMPOSING them into a storylet config's canTrigger — no duplicate eligibility engine. Doctrine gates only ever NARROW eligibility (canTrigger && doctrine), never widen it. Doctrine fields: preconditions: [(worldState) = boolean] — all must pass allowedTools: [string] — worldState.requestedTool must be listed (if set) allowedResources: [string] — worldState.requestedResource must match a prefix (if set) capabilityRequired: string — checked via kernel.permissions (RuleGraph) Classes StoryletEligibilityBridge.js — layers doctrine preconditions on top of StoryGraph's built in cooldown/maxFires gating by COMPOSING them into a storylet config's canTrigger — no duplicate eligibility engine. Doctrine gates only ever NARROW eligibility (canTrigger && doctrine), never widen it. Doctrine fields: preconditions: [(worldState) = boolean] — all must pass allowedTools: [string] — worldState.requestedTool must be listed (if set) allowedResources: [string] — worldState.requestedResource must match a prefix (if set) capabilityRequired: string — checked via kernel.permissions (RuleGraph) Method Signature Summary Evaluate doctrine gates alone. @returns {{ eligible:boolean, reason:string null }} <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture ·","contentHash":"f156bdd279355c495fc3fbb062db1fbfb57baac983a59b6e140559e81cb5f5f6"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/StoryletEligibilityBridge.md::0001","path":"webgpu-os/reference/kernel/storylets/StoryletEligibilityBridge.md","title":"kernel/storylets/StoryletEligibilityBridge.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/StoryletEligibilityBridge.js","updated":"","headings":["kernel/storylets/StoryletEligibilityBridge.js","Classes","class StoryletEligibilityBridge","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c099398a4b7d13479940e73816a6148131dbf26ebccf7a765f8c6c64e0035c4a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/StoryletFailureHandler.md::0000","path":"webgpu-os/reference/kernel/storylets/StoryletFailureHandler.md","title":"kernel/storylets/StoryletFailureHandler.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/StoryletFailureHandler.js","updated":"","headings":["kernel/storylets/StoryletFailureHandler.js","Classes","class StoryletFailureHandler","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StoryletFailureHandler.js — storylet chain rollback: delegates to the generic time/RollbackEngine.js (the single Saga.js wrapper — forward + compensating actions, irreversible pivot) and adds storylet specific logging + kernel eventing. If a step fails before the pivot, completed steps are compensated in reverse; past the pivot the failure is surfaced (FAILED PIVOTED) for repair instead of silently undone. Classes Method Signature Summary Run a storylet chain as a saga. Convenience: build a saga step from a storylet + runtime, using trusted forced execution as the forward action. This method is for kernel authored recovery chains, never model authored Storylets. Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"67b4135c76774856f29225ef733b862eaaf759332cdfb0095e04e0874a0a3cff"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/StoryletRuntime.md::0000","path":"webgpu-os/reference/kernel/storylets/StoryletRuntime.md","title":"kernel/storylets/StoryletRuntime.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/StoryletRuntime.js","updated":"","headings":["kernel/storylets/StoryletRuntime.js","Classes","class StoryletRuntime","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StoryletRuntime.js — thin facade constructing from engine/gameplay/narrative/StoryGraph.js; exposes register/registerAll/tick/ getAll. Forced execution is intentionally named as a trusted test/recovery operation so it is never advertised as a model authored Storylet ability. Here \"worldState\" is AI task/goal state (an OS.ai() request's pipeline phase), not game state. Classes Method Signature Summary Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"17ab5d5f89b0cda459c0e3e8785b2a9feea8d26f8ed3f418573d34969f5413de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/StoryletTestRunner.md::0000","path":"webgpu-os/reference/kernel/storylets/StoryletTestRunner.md","title":"kernel/storylets/StoryletTestRunner.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/StoryletTestRunner.js","updated":"","headings":["kernel/storylets/StoryletTestRunner.js","Classes","class StoryletTestRunner","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StoryletTestRunner.js — the Phase 14 storylet test harness. Runs a storylet definition against fixture worldStates on an ISOLATED StoryletRuntime (never the live kernel.storylets graph) and reports trigger/execute outcomes. Also runs the canned adversarial suite (AdversarialFixtures): poisoned descriptors must fail sanitization, and hostile worldStates must be handled safely (rejected or refused — never silently obeyed). Classes Method Signature Summary Run one storylet against a set of fixture worldStates. Descriptor suite — every poisoned/malformed definition must fail sanitization, and every well formed control must pass. Adversarial worldState suite — a well formed storylet run against hostile task states. A case passes when its trigger matches AND, when is set, the fired result rejects (result.ok===false, a / , or a flag) rather than silently proceeding. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"28db43fb4b2ba8bb7264a3d8f09f5e36042a73feba53f562b4964861c383863b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/storylets/StoryletVersionManager.md::0000","path":"webgpu-os/reference/kernel/storylets/StoryletVersionManager.md","title":"kernel/storylets/StoryletVersionManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/storylets/StoryletVersionManager.js","updated":"","headings":["kernel/storylets/StoryletVersionManager.js","Classes","class StoryletVersionManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StoryletVersionManager.js — tracks versions of registered storylet definitions so a definition can be upgraded in place and rolled back if the new version misbehaves. Purely in memory version history keyed by storylet id; the runtime re registers whichever config version is current. Classes StoryletVersionManager.js — tracks versions of registered storylet definitions so a definition can be upgraded in place and rolled back if the new version misbehaves. Purely in memory version history keyed by storylet id; the runtime re registers whichever config version is current. Method Signature Summary Record a new version of a storylet config. Returns the version entry. The most recently recorded version entry, or null. Full version history (metadata only — no config functions). Roll back: drop the latest version and return the previous entry (the caller re registers its config with the runtime). Null if no previous. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a99bb2569cb00918cd434f93fd384491e0fe54ab35f113924fc4076148047d70"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/terminal/TerminalCommandContract.md::0000","path":"webgpu-os/reference/kernel/terminal/TerminalCommandContract.md","title":"kernel/terminal/TerminalCommandContract.js","description":"","kind":"reference","source":"webgpu-os/kernel/terminal/TerminalCommandContract.js","updated":"","headings":["kernel/terminal/TerminalCommandContract.js","Functions","parseWebGpuOsTerminalCommand(raw, { surface = 'interactive' } = {})","formatWebGpuOsTerminalHelp({ surface = 'interactive', json = false } = {})","terminalVfsPath(value)","terminalCommandError(code, message, suggestion = '')","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Canonical WebGPU OS terminal grammar shared by the interactive Terminal app and the read only AI tool bridge. This is intentionally not a host shell. Functions Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bfb179c7ad337809ed005465a3b4c87edba47cf9970c7ed3b48bd4ef2c582569"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/CausalClock.md::0000","path":"webgpu-os/reference/kernel/time/CausalClock.md","title":"kernel/time/CausalClock.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/CausalClock.js","updated":"","headings":["kernel/time/CausalClock.js","Classes","class CausalClock","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CausalClock.js — thin wrapper over engine/state/causal/HLC.js (Hybrid Logical Clock). Orders AI task events causally while staying readable as wall time. Per CSE rule 11: a timestamp NEVER establishes authority — the commit gate decides truth; this only orders. Classes Method Signature Summary Timestamp a LOCAL event (advances the clock). Current timestamp without advancing. Merge a REMOTE timestamp so local time never regresses behind a cause. Compare two {l,c} timestamps. Returns 1 0 1. Convenience: shallow copy with an stamp attached. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bbe62473e9e456a95c00dc28ab0b0fded35f5ce585a442556026dfb387c4ed84"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/CheckpointManager.md::0000","path":"webgpu-os/reference/kernel/time/CheckpointManager.md","title":"kernel/time/CheckpointManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/CheckpointManager.js","updated":"","headings":["kernel/time/CheckpointManager.js","Classes","class CheckpointManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CheckpointManager.js — wraps engine/state/integrity/Checkpoint.js (makeCheckpoint/verifyCheckpoint) over the shared OS event log. Checkpoints summarize history without pretending it never existed: each links to its predecessor and pins the event log head + state root at that point. Classes Method Signature Summary Create a checkpoint pinned to the current event log head. Verify a checkpoint against a freshly computed state root (+ optional predecessor). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e434f901768584e677bebfb181384f195a01c9075054078088937e9d47fc262d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/CooldownManager.md::0000","path":"webgpu-os/reference/kernel/time/CooldownManager.md","title":"kernel/time/CooldownManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/CooldownManager.js","updated":"","headings":["kernel/time/CooldownManager.js","Classes","class CooldownManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CooldownManager.js — wraps engine/state/consistency/Reservation.js (ReservationManager over a USORegistry + BoundedCounterEscrow). Cooldowns are reservations: reserving a scarce AI resource (model budget, tool slot) creates a single use output that is consumed on commit or released on expiry — it can never be honored twice. Escrows divide a budget among holders for coordination free local spending. Classes Method Signature Summary The shared single spend registry — Phase 9's CommitCoordinator binds to this. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d98cb7fac0557fbe9e6ecd1be146bf0247279d40639336b5576ced1ab90b586d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/DependencyScheduler.md::0000","path":"webgpu-os/reference/kernel/time/DependencyScheduler.md","title":"kernel/time/DependencyScheduler.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/DependencyScheduler.js","updated":"","headings":["kernel/time/DependencyScheduler.js","Classes","class DependencyScheduler","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DependencyScheduler.js — dependency ordered task readiness (Kahn style). Tracks tasks with dependency edges and answers \"what can run now?\": a task is ready once every dependency has completed. Cycles are rejected at add time so a plan can never deadlock on itself. Classes Method Signature Summary Add a task with dependencies. Throws if it would create a cycle. Tasks whose dependencies are all DONE and which haven't started. True when every task is DONE. Tasks permanently blocked: pending but depending (transitively) on a FAILED task. Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"2ec4f9f310ea40b732f7092f8fd66a61389502dec1762c305f7655f31bb143cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/ExpirationManager.md::0000","path":"webgpu-os/reference/kernel/time/ExpirationManager.md","title":"kernel/time/ExpirationManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/ExpirationManager.js","updated":"","headings":["kernel/time/ExpirationManager.js","Classes","class ExpirationManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ExpirationManager.js — TTL tracking for short lived AI artifacts (capabilities, elicitations, pending approvals). Sweep based (no timers per item): callers invoke sweep() periodically or before authorization checks; expired items run their onExpire callback exactly once and are removed. Classes ExpirationManager.js — TTL tracking for short lived AI artifacts (capabilities, elicitations, pending approvals). Sweep based (no timers per item): callers invoke sweep() periodically or before authorization checks; expired items run their onExpire callback exactly once and are removed. Method Signature Summary Track an item for . Re tracking an id replaces its TTL. True if the id is tracked and past its expiry (sweep may not have run yet). True if the id is tracked and still valid. Stop tracking without firing onExpire. Remove all expired items, invoking each onExpire once. @returns {string[]} expired ids <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a570b811e750c4777f4312a7f564a8ddb5702ce66a02921b5bd8df02298535ca"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/FactConflictResolver.md::0000","path":"webgpu-os/reference/kernel/time/FactConflictResolver.md","title":"kernel/time/FactConflictResolver.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/FactConflictResolver.js","updated":"","headings":["kernel/time/FactConflictResolver.js","Classes","class FactConflictResolver","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FactConflictResolver.js — detects and resolves conflicting live facts on the monotonic FactStore. Detection reuses the CSE constraint helpers (engine/state/facts/Constraints.js: validateFacts/atMostOne/ mutuallyExclusive) — no parallel constraint engine. Resolution tombstones losers via a caller supplied preference; a constraint never repairs on its own (CSE law), so resolution here is an explicit, logged act. Classes Method Signature Summary At most one live fact whose predicate matches (single source of truth). Two exact facts must never be live at once. Add a raw Constraints.js constraint object. Detect violations against the current live projection. Resolve conflicts among live facts sharing a predicate: keep the fact selects, tombstone the rest. Explicit and logged — never silent. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"ac943af7f7898b66bc156a6b252b0dd364f2cc04a95f0a0b661182c5a3934d2b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/FactInvalidationEngine.md::0000","path":"webgpu-os/reference/kernel/time/FactInvalidationEngine.md","title":"kernel/time/FactInvalidationEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/FactInvalidationEngine.js","updated":"","headings":["kernel/time/FactInvalidationEngine.js","Classes","class FactInvalidationEngine","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FactInvalidationEngine.js — namespaced rules layered on the monotonic FactStore (engine/state/facts): adding a fact whose predicate has invalidation rules TOMBSTONES (never deletes) currently live facts with the listed predicates. e.g. rule('planReady', ['planDraft']) — a new planReady fact revokes any live planDraft facts. History stays intact. Classes FactInvalidationEngine.js — namespaced rules layered on the monotonic FactStore (engine/state/facts): adding a fact whose predicate has invalidation rules TOMBSTONES (never deletes) currently live facts with the listed predicates. e.g. rule('planReady', ['planDraft']) — a new planReady fact revokes any live planDraft facts. History stays intact. Method Signature Summary Declare: adding a fact invalidates live facts with these predicates. Add a fact and apply its invalidation rules. Predicate of a canonical fact string: 'p(a,b)' → 'p'; bare fact → itself. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"9ce07921b961542e4d141f0af254090bc85501f3f646b80c50e4b0775bb776fe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/IdempotencyManager.md::0000","path":"webgpu-os/reference/kernel/time/IdempotencyManager.md","title":"kernel/time/IdempotencyManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/IdempotencyManager.js","updated":"","headings":["kernel/time/IdempotencyManager.js","Classes","class IdempotencyCapacityError extends Error","class IdempotencyManager","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: IdempotencyManager.js — bounded process local replay for settled tool and storylet results. Concurrent callers for one key share a single execution. Durable mutation replay safety is provided by the task graph dispatch fence, not by this TTL/LRU cache. Classes Method Signature Summary Method Signature Summary The underlying CSE registry — Phase 9's CommitCoordinator binds to this. Canonical key for a tool/storylet request. Record the first settled result for a key (no op returning the prior on replay). Run once while a key is in flight, then replay its settled result within the bounded cache window. After eviction, reads may execute again; mutations must be protected by their durable pre dispatch fence. Outcome unknown results are never treated as settled cache authority. Reserve a new execution single flight slot before a caller commits an external durable dispatch fence. Cache replay, same key join, and global capacity rejection are decided here, before that fence is written. Content free diagnostics; never exposes keys or provider receipts. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a124472eff9ae5e3c91448d4b9fa851e40baa46125f2354930f94ee97d185761"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/ParallelTaskScheduler.md::0000","path":"webgpu-os/reference/kernel/time/ParallelTaskScheduler.md","title":"kernel/time/ParallelTaskScheduler.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/ParallelTaskScheduler.js","updated":"","headings":["kernel/time/ParallelTaskScheduler.js","Classes","class ParallelTaskScheduler","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ParallelTaskScheduler.js — executes async tasks respecting dependency order (via DependencyScheduler) with a bounded concurrency limit. A failed task marks its transitive dependents blocked rather than aborting unrelated branches. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a1ad98f84a0e15fd1f6ded4b67926bbbd586641ff2c82e0634852389a738ae73"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/ReplayEngine.md::0000","path":"webgpu-os/reference/kernel/time/ReplayEngine.md","title":"kernel/time/ReplayEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/ReplayEngine.js","updated":"","headings":["kernel/time/ReplayEngine.js","Classes","class ReplayEngine","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ReplayEngine.js — rebuild materialized state by folding the hash chained EventLog through a reducer (event sourcing), optionally starting from a CheckpointManager checkpoint. The chain is verified BEFORE replay: tampered history refuses to replay rather than materializing a lie. Classes ReplayEngine.js — rebuild materialized state by folding the hash chained EventLog through a reducer (event sourcing), optionally starting from a CheckpointManager checkpoint. The chain is verified BEFORE replay: tampered history refuses to replay rather than materializing a lie. Method Signature Summary Replay only the events AFTER a checkpoint's covered range. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"030568ae3b104911b2aa8494fe73e2f060bdd035c32d765f0838c3d0e5e9ebaf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/RetryManager.md::0000","path":"webgpu-os/reference/kernel/time/RetryManager.md","title":"kernel/time/RetryManager.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/RetryManager.js","updated":"","headings":["kernel/time/RetryManager.js","Classes","class RetryManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RetryManager.js — bounded exponential backoff retry with jitter for transient AI/tool failures. Retries are attempts, not new intents: pair with IdempotencyManager keys so a retried effect is never applied twice. Classes Method Signature Summary Backoff delay for a (1 based) attempt number. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"efccde547c124942c4a97b30e80a98c3c8e354d654135d6445306affea3c5359"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/RollbackEngine.md::0000","path":"webgpu-os/reference/kernel/time/RollbackEngine.md","title":"kernel/time/RollbackEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/RollbackEngine.js","updated":"","headings":["kernel/time/RollbackEngine.js","Classes","class RollbackEngine","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: RollbackEngine.js — the generic compensation runner: wraps engine/state/workflow/Saga.js (forward + compensating actions, irreversible pivot). Domain layers (e.g. storylets/StoryletFailureHandler.js) build on this rather than re wrapping Saga themselves. Classes Method Signature Summary Run steps as a saga: failure before the pivot compensates completed steps in reverse; failure at/after the pivot surfaces FAILED PIVOTED. Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"fc6a4f70ad384ef6027cd44e3f3cd1e7cf1a0f428bc15ad49acb6238b3e9e52d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/TickClock.md::0000","path":"webgpu-os/reference/kernel/time/TickClock.md","title":"kernel/time/TickClock.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/TickClock.js","updated":"","headings":["kernel/time/TickClock.js","Classes","class TickClock","Re-exports","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TickClock.js — thin wrapper over engine/state/time/TimeModel.js (TIME MODES/createTimeSource). Manages NAMED time sources: an AI task only \"has time\" if it subscribes to a source, and each source advances per its mode (causal steps, oscillator dt, irreversible change, observation, …) — never a global . Classes Method Signature Summary Create (or replace) a named time source. Advance a named source per its mode. Throws on unknown source. Re exports <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a5e10b9c2415be539d85058d20129b83d7e8c1ca4120315d71fc45bf943f4532"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/TimeAuthority.md::0000","path":"webgpu-os/reference/kernel/time/TimeAuthority.md","title":"kernel/time/TimeAuthority.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/TimeAuthority.js","updated":"","headings":["kernel/time/TimeAuthority.js","Classes","class TimeAuthority","Functions","timeSourceCatalog()","defaultSourceIds(mode = TIMEAUTHORITYMODES.UTCCONSENSUS)","normalizeTimeAuthorityConfig(input = {})","selectTimeConsensus(samples, options = {})","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Disciplined civil time authority. Network samples are transient observations. A consensus decision is accepted only after collapsing endpoints into independent operator groups, finding a majority interval, and combining the surviving offsets by uncertainty. The CSE records semantic transitions; it never treats timestamps as authority. Classes Method Signature Summary Functions Select one robust time estimate from already filtered source samples. Each operator gets at most one vote even when it exposes many hostnames. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6b54182be398b1808f488ba1e0c085852e3e65c58f3dadcd020dccd89842e364"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/TimeEngine.md::0000","path":"webgpu-os/reference/kernel/time/TimeEngine.md","title":"kernel/time/TimeEngine.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/TimeEngine.js","updated":"","headings":["kernel/time/TimeEngine.js","Classes","class TimeEngine","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TimeEngine.js — Phase 7 facade (kernel.timeEngine) composing the Time Engine's CSE wrappers around ONE shared, hash chained EventLog: authority TimeAuthority (NTP consensus + slew) — disciplined physical time causal CausalClock (HLC) — causal ordering ticks TickClock (TimeModel sources) — per mode progression eventLog engine/state EventLog — the single OS AI log (Phase 9's AuditLog views the same log) timeline TimelineExporter — tamper evident export checkpoints CheckpointManager — compaction + restore replay ReplayEngine — event sourced rebuild idempotency IdempotencyManager — at most once effects cooldowns CooldownManager — reservations + escrow rollback RollbackEngine (Saga) — compensation scheduler Dependency/ParallelTaskScheduler — ordered execution retry RetryManager — bounded backoff expiry ExpirationManager — TTL sweep facts engine/state FactStore (direct reuse — no FactRegistry) invalidation/conflicts — rules layered on the monotonic FactStore Classes Method Signature Summary New dependency scheduler for one plan (per request, not shared). New bounded concurrency runner for one plan (per request, not shared). Append an HLC stamped event to the shared OS AI event log. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"2eccb5c178433d79e4f5f506ad14b03dc31f2617d055149c52441dab5a6729ae"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/time/TimelineExporter.md::0000","path":"webgpu-os/reference/kernel/time/TimelineExporter.md","title":"kernel/time/TimelineExporter.js","description":"","kind":"reference","source":"webgpu-os/kernel/time/TimelineExporter.js","updated":"","headings":["kernel/time/TimelineExporter.js","Classes","class TimelineExporter","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: TimelineExporter.js — export view over engine/state/integrity/EventLog.js (append only, hash chained). Filters + serializes a range of the SHARED OS event log (the same log Phase 9's AuditLog views — one log, not two) with the chain verification result attached, so an exported timeline is tamper evident. Classes TimelineExporter.js — export view over engine/state/integrity/EventLog.js (append only, hash chained). Filters + serializes a range of the SHARED OS event log (the same log Phase 9's AuditLog views — one log, not two) with the chain verification result attached, so an exported timeline is tamper evident. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e0a2a2962dab21ca1b506b2f03bfc19e8bcd1fc478da2c29a6e20da5066ebc58"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/CapabilityAttenuator.md::0000","path":"webgpu-os/reference/kernel/tools/CapabilityAttenuator.md","title":"kernel/tools/CapabilityAttenuator.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/CapabilityAttenuator.js","updated":"","headings":["kernel/tools/CapabilityAttenuator.js","Classes","class CapabilityAttenuator","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CapabilityAttenuator.js — thin wrapper over engine/state Capability.attenuate() for narrowing a capability before handing it to a single tool call. Never widens a capability (attenuate() itself enforces this). Classes Method Signature Summary Attenuate a capability so it only authorizes a single named tool. Attenuate a capability so it only authorizes use within a single OS.ai() request. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4013002b52acbb8b28cd6dde21c1621aa0a9ae85865d283e0d43bcb6c36ccb2f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/ContextTaintTracker.md::0000","path":"webgpu-os/reference/kernel/tools/ContextTaintTracker.md","title":"kernel/tools/ContextTaintTracker.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/ContextTaintTracker.js","updated":"","headings":["kernel/tools/ContextTaintTracker.js","Classes","class ContextTaintTracker","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ContextTaintTracker.js — tracks which OS.ai() request contexts have absorbed untrusted (tool/webpage/model) content, so prompt assembly can keep the CSE prompt injection boundary visible downstream instead of silently blending untrusted text into \"instructions\". Classes ContextTaintTracker.js — tracks which OS.ai() request contexts have absorbed untrusted (tool/webpage/model) content, so prompt assembly can keep the CSE prompt injection boundary visible downstream instead of silently blending untrusted text into \"instructions\". Method Signature Summary Wrap untrusted content with explicit delimiters for prompt assembly. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4acff0ef40cc2b4fdb5e193ecf10fe07b10bb6ca7937225d6bdbc78c568fc34d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/HiddenParameterDetector.md::0000","path":"webgpu-os/reference/kernel/tools/HiddenParameterDetector.md","title":"kernel/tools/HiddenParameterDetector.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/HiddenParameterDetector.js","updated":"","headings":["kernel/tools/HiddenParameterDetector.js","Classes","class HiddenParameterDetector","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: HiddenParameterDetector.js — flags AI supplied tool call arguments that are NOT declared in the tool's schema (potential smuggled/hidden parameters) and prototype pollution shaped keys. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"dfb35a4b73c2e3a6180fde674d5aad6415f32876b5dccffda71c80761d1c4218"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/MetadataRugPullDetector.md::0000","path":"webgpu-os/reference/kernel/tools/MetadataRugPullDetector.md","title":"kernel/tools/MetadataRugPullDetector.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/MetadataRugPullDetector.js","updated":"","headings":["kernel/tools/MetadataRugPullDetector.js","Classes","class MetadataRugPullDetector","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Record/compare a tool's current descriptor. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bcda14f373230f4d5f7a1e6c8aff3e581c626f48b4df1387132228390e0f5944"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/ToolCallSchemaValidator.md::0000","path":"webgpu-os/reference/kernel/tools/ToolCallSchemaValidator.md","title":"kernel/tools/ToolCallSchemaValidator.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/ToolCallSchemaValidator.js","updated":"","headings":["kernel/tools/ToolCallSchemaValidator.js","Classes","class ToolCallSchemaValidator","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ToolCallSchemaValidator.js — validates AI supplied tool call arguments against the tool's declared JSON schema, reusing the existing webgpu os/kernel/schema/SchemaValidator.js (no parallel validator). Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"02a7ba675bfc2ec2100fb663a9bfe43febb1f07a7f827c5e7c4ba9dbd7cfb6cd"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/ToolPermissionChecker.md::0000","path":"webgpu-os/reference/kernel/tools/ToolPermissionChecker.md","title":"kernel/tools/ToolPermissionChecker.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/ToolPermissionChecker.js","updated":"","headings":["kernel/tools/ToolPermissionChecker.js","Classes","class ToolPermissionChecker","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ToolPermissionChecker.js — gates AI initiated tool calls through kernel.permissions (RuleGraph), on top of (not instead of) the per tool AffordanceRegistry.capabilityRequired check done by ToolRouter. Classes ToolPermissionChecker.js — gates AI initiated tool calls through kernel.permissions (RuleGraph), on top of (not instead of) the per tool AffordanceRegistry.capabilityRequired check done by ToolRouter. Method Signature Summary Blanket check: may this app route tool calls through the AI Hub at all? Same as canExecuteTools() but throws (via Permissions.require) when denied + enforcing. Per tool capability declared by the tool's affordance (if any). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"66027be7fa975c12a43a9a1b0fdc135724dcae6a5cc0bbf12ceeeb4b5935263b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/ToolResultIngestAdapter.md::0000","path":"webgpu-os/reference/kernel/tools/ToolResultIngestAdapter.md","title":"kernel/tools/ToolResultIngestAdapter.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/ToolResultIngestAdapter.js","updated":"","headings":["kernel/tools/ToolResultIngestAdapter.js","Classes","class ToolResultIngestAdapter","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ToolResultIngestAdapter.js — the single chokepoint every AI invoked tool result passes through on its way into the world model. Delegates to engine/state/worldmodel/UntrustedBoundary.js (no parallel wrapper); a tool result is always trusted:false and can never mint authority. Classes Method Signature Summary Ingest a tool execution result as an untrusted observation. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"95c5c9e18e129df64f3b06731c0fb0e01e5257129e60944618c2261a3a25ffec"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/ToolRouter.md::0000","path":"webgpu-os/reference/kernel/tools/ToolRouter.md","title":"kernel/tools/ToolRouter.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/ToolRouter.js","updated":"","headings":["kernel/tools/ToolRouter.js","Classes","class ToolRouter","Functions","boundedAIValue(value, output = '')","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ToolRouter.js — AI Tool Firewall. The single entrypoint the AI Hub's tool calling loop uses to run a registered tool on behalf of an app. Delegates actual tool registration/execution/history to the existing ToolDriver.js (kernel.toolDriver) — this class never duplicates that machinery, it wraps it with the checks an AI initiated call needs before it's safe to run: permission check, rug pull detection, hidden parameter detection, schema validation, and affordance/capability gating. Every result is then ingested through the CSE prompt injection boundary (ToolResultIngestAdapter → engine/state UntrustedBoundary) before it's handed back — a tool result is observation, never authority. Classes Method Signature Summary Create an object identity capability for one exact Faculty invocation. The token has no writable surface. It is deliberately not serializable into a signed capability or exposed through app syscalls. Rebuild an unresolved meter from encrypted operation evidence after restart. Bind the opaque meter to the signed capability and exact resource lease. Run one kernel verifier with every trusted boundary receipt charged to its reserved lane. Attach one kernel authored resource receipt. Values returned by a tool handler are never inspected for accounting and cannot call this method through the app syscall surface. Kernel only Navi Faculty entrypoint. This method is intentionally absent from Syscalls and AppRegistrationScope. It enters the same firewall as callForAI, but carries an out of band, object identity branded one shot authorization created by NaviFacultyService. Run a tool on behalf of an app's AI request, through the full firewall pipeline, then delegate execution to","contentHash":"03781dd4aa68962a0b1ca749045ff09f8028c38f71272dd2071327f0a2f63c65"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/kernel/tools/ToolRouter.md::0001","path":"webgpu-os/reference/kernel/tools/ToolRouter.md","title":"kernel/tools/ToolRouter.js","description":"","kind":"reference","source":"webgpu-os/kernel/tools/ToolRouter.js","updated":"","headings":["kernel/tools/ToolRouter.js","Classes","class ToolRouter","Functions","boundedAIValue(value, output = '')","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"shot authorization created by NaviFacultyService. Run a tool on behalf of an app's AI request, through the full firewall pipeline, then delegate execution to ToolDriver. Consume and independently bind one exact Faculty grant at dispatch. Tool schemas exposed to the AI (delegates to ToolDriver). Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"073e258e45fea1282a25071be4d69f129a43689a9e40407947366c80d19fe090"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/AppCompiler.md::0000","path":"webgpu-os/reference/packages/AppCompiler.md","title":"packages/AppCompiler.js","description":"","kind":"reference","source":"webgpu-os/packages/AppCompiler.js","updated":"","headings":["packages/AppCompiler.js","Classes","class AppCompiler","class CompatGuestApp","Functions","buildFilesMap()","Constants","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AppCompiler.js — compile an ingested source bundle into a signed . Two paths: 1. NATIVE — the folder already has a valid + JS entry. Files are packaged as is under . 2. AUTO — any HTML/WebGPU app. We probe it (engine/compat), generate a compatibility profile, an embedded source module ( ), and a bootloader entry ( ) that calls at mount time. A normal WebGPU app → an engine native, signed OS app. Output uses PackageBuilder.buildV2 (signed + encrypted + merkle + cert). With a developer (self signed) key the package verifies as the community/unofficial tier; a root issued cert promotes it to trusted. Classes Method Signature Summary The bootloader entry class shipped as . The shared CompatGuestApp bootloader class body. Identical text is emitted by PackageLoader's self heal path so old and new packages behave the same. Beyond booting the guest, the bootloader INJECTS lifecycle commands into the OS CommandBus at mount (capability gated via ) and tears them down on unmount — the build time \"command injection\" + interception seam. Embed the guest files + profile as . Functions Constants <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier.","contentHash":"df53bacc7cabe86cefc38f91a458a50c150550767a75135a1d28883ccb8b25ab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/AppCompiler.md::0001","path":"webgpu-os/reference/packages/AppCompiler.md","title":"packages/AppCompiler.js","description":"","kind":"reference","source":"webgpu-os/packages/AppCompiler.js","updated":"","headings":["packages/AppCompiler.js","Classes","class AppCompiler","class CompatGuestApp","Functions","buildFilesMap()","Constants","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"cfc40453a3070ca76fcd6459179c91b9cadb742b8053f72a53d87c2c5da232c7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/CapabilityMap.md::0000","path":"webgpu-os/reference/packages/CapabilityMap.md","title":"packages/CapabilityMap.js","description":"","kind":"reference","source":"webgpu-os/packages/CapabilityMap.js","updated":"","headings":["packages/CapabilityMap.js","Functions","policyOf(cap)","riskOf(cap)","detectCapabilities(signals)","classifyPermissions({ signals, declared = [], granted = [] } = {})","unclassifiedCapabilities()","staleCapabilities()","auditCapabilityMap()","Constants","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CapabilityMap.js — OS adaptive bridge between the compat static probe and the kernel's capability vocabulary. The kernel's RuleGraph is the single source of truth for what capabilities exist ( ) and how risky each one is ( ). This module classifies EVERY known capability into one disposition and, for the statically detectable ones, maps a compat probe signal ( / ) onto it. Dispositions: 'free' — universally allowed by the default rule graph; never emitted (the app already has it). 'auto' — detectable + low/medium risk → auto added when the probe sees it. 'suggest' — detectable + high risk → SURFACED for review, never silently added. 'declare' — grantable but not statically inferable → author opts in. 'system' — privileged / system trust → never auto added under any path. 'runtime' — kernel mediated ephemeral consent token → never accepted from or emitted into an application manifest. Least privilege is preserved: only 'auto' caps are granted without review; high risk and privileged caps always require an explicit decision. IMPORTANT — this is a BUILD TIME ADVISORY layer, not a security boundary. Static source scanning has unavoidable false negatives (minification, obfuscation, dynamically constructed API calls, runtime behavior that differs from source). The authoritative gate is the kernel's runtime complete mediation stack: default deny + per call + the . Auto added caps only ever cover low/medium risk APIs, so a missed or spoofed signal cannot silently escalate to a high risk capability. A module load guard logs any kernel capability that is missing a disposition, so the table can never silently drift behind a newly added kernel cap; the Security Doctor surfaces the same check","contentHash":"28a17ad89913cb66a2e9feea9769edcc832da08911a295f8bc244700ef85509b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/CapabilityMap.md::0001","path":"webgpu-os/reference/packages/CapabilityMap.md","title":"packages/CapabilityMap.js","description":"","kind":"reference","source":"webgpu-os/packages/CapabilityMap.js","updated":"","headings":["packages/CapabilityMap.js","Functions","policyOf(cap)","riskOf(cap)","detectCapabilities(signals)","classifyPermissions({ signals, declared = [], granted = [] } = {})","unclassifiedCapabilities()","staleCapabilities()","auditCapabilityMap()","Constants","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"capability that is missing a disposition, so the table can never silently drift behind a newly added kernel cap; the Security Doctor surfaces the same check ( ) at boot. Functions Resolve a capability's disposition string ('free' 'auto' 'suggest' 'declare' 'system' 'runtime' 'unknown'). Risk level for a cap, read from the kernel's CAPABILITY LABELS (default 'medium'). Run every detector against probe signals. Detectors are wrapped so a single malformed signal or detector bug can never throw during a build — a failing detector is treated as \"not detected\" and a one time warning is logged. (Static detection is best effort UX; the kernel's runtime guard remains the authoritative boundary — see module header.) Returns: detected capability strings Classify a probe against what is already declared/granted and produce the final permission list + a reconciliation report. Parameters: (object) — No description in source JSDoc. (string[]) — — author/manifest declared caps (native path) (string[]) — — caps already decided elsewhere (e.g. the Returns: {{ permissions:string[], detected:string[], autoAdded:string[], Kernel capabilities that have no disposition in this table (should be empty). Capabilities classified here that no longer exist in the kernel vocabulary (stale entries). Self audit for the Security Doctor / boot self test. Returns coverage counts and any drift (kernel caps with no disposition, or table entries that are no longer kernel caps). is true only when there is no drift in either direction. Constants — Disposition + (for detectable caps) a predicate, keyed by the exact capability string from KNOWN CAPABILITIES. A bare string is shorthand for (no detector). <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted","contentHash":"b07804590da6d0f8caf9c52e79b36b09376c3a984e17ccf5f19304b0cbadace2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/CapabilityMap.md::0002","path":"webgpu-os/reference/packages/CapabilityMap.md","title":"packages/CapabilityMap.js","description":"","kind":"reference","source":"webgpu-os/packages/CapabilityMap.js","updated":"","headings":["packages/CapabilityMap.js","Functions","policyOf(cap)","riskOf(cap)","detectCapabilities(signals)","classifyPermissions({ signals, declared = [], granted = [] } = {})","unclassifiedCapabilities()","staleCapabilities()","auditCapabilityMap()","Constants","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"A bare string is shorthand for (no detector). <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Secu","contentHash":"e32ece76f5c0a2001d09f404c0001d213ec874829c8a580b68b5a82cf7105d7a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/FolderIngestor.md::0000","path":"webgpu-os/reference/packages/FolderIngestor.md","title":"packages/FolderIngestor.js","description":"","kind":"reference","source":"webgpu-os/packages/FolderIngestor.js","updated":"","headings":["packages/FolderIngestor.js","Classes","class FolderIngestor","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: FolderIngestor.js — turn any developer source into a { files, entry } bundle that AppCompiler can package. Sources: • Directory picker (File System Access ) • <input type=\"file\" webkitdirectory FileList • A single HTML File • A (Uint8Array/ArrayBuffer/File) via Zip.parse • The OS VFS (a folder path or single file) via StorageManager • A remote URL (single file HTML; CORS aware) Output: { files: Map<string, string Uint8Array , entry: string, sourceType: string, name: string } Text files are decoded to strings; binary files stay as Uint8Array. Classes Method Signature Summary Native directory picker (Chromium). Walks the whole tree. From an <input type=\"file\" webkitdirectory (or multiple files) FileList. A single HTML file. A archive (File Uint8Array ArrayBuffer). A VFS folder path or single file, via a StorageManager. A remote single file HTML app. Resolution order: 1. The WebGPU OS browser extension's proxy fetch bridge — fetches the page cross origin with a real browser session, no CORS limits, no external service. Used automatically when the extension is detected. 2. A direct (works only for CORS enabled / same origin URLs). 3. An explicit CORS proxy passed via . <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a","contentHash":"a10643ec5793c0ae34f285aec93548dd106720fbf1ce92473931761f5e9d5643"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/FolderIngestor.md::0001","path":"webgpu-os/reference/packages/FolderIngestor.md","title":"packages/FolderIngestor.js","description":"","kind":"reference","source":"webgpu-os/packages/FolderIngestor.js","updated":"","headings":["packages/FolderIngestor.js","Classes","class FolderIngestor","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4ac6e97c8ca37a509e7e04df0dbe7aed821e19300c1d21bc0441e71e42214ba8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/Gzip.md::0000","path":"webgpu-os/reference/packages/Gzip.md","title":"packages/Gzip.js","description":"","kind":"reference","source":"webgpu-os/packages/Gzip.js","updated":"","headings":["packages/Gzip.js","Functions","async gzip(input)","async gunzip(input, opts = {})","async gunzipText(input, opts = {})","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Gzip.js — gzip compress/decompress via the browser native Compression Streams API. This is the SAME approach uses for the runtime bundle ( ) and its loader: gzip the payload, then (optionally) AES GCM it, and decompress in browser with . No custom container format — a payload is just . gzip carries its own whole stream CRC 32 (validated by DecompressionStream), and we layer per file SHA 256 + a signed Merkle root on top, so integrity is covered. Functions Gzip compress a string or bytes. Parameters: (string Uint8Array ArrayBuffer) — No description in source JSDoc. Gunzip to bytes, with a decompressed size cap (zip bomb guard). Parameters: (Uint8Array ArrayBuffer) — No description in source JSDoc. Gunzip to a UTF 8 string. <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level","contentHash":"99c503313405fb5f926412b8d9957dc11af31e53761d2265022c1a280c7e3bab"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/Gzip.md::0001","path":"webgpu-os/reference/packages/Gzip.md","title":"packages/Gzip.js","description":"","kind":"reference","source":"webgpu-os/packages/Gzip.js","updated":"","headings":["packages/Gzip.js","Functions","async gzip(input)","async gunzip(input, opts = {})","async gunzipText(input, opts = {})","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6924afdd95fbdb6c202243280982598e35a096a233ec6054ec6c5a2b34017fc1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageBuilder.md::0000","path":"webgpu-os/reference/packages/PackageBuilder.md","title":"packages/PackageBuilder.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageBuilder.js","updated":"","headings":["packages/PackageBuilder.js","Classes","class PackageBuilder","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PackageBuilder.js — build a signed .prpkg from a folder of files. Output format (JSON envelope — zip support planned): { format: 'prpkg v1', manifest: { ... }, // manifest.json with files hash map blockmap: { files: {...} }, // sha256 per file signature: { pubKey, sig }, // ECDSA P 256 over blockmap JSON files: { path: content } // all file contents as strings } Usage: const pkg = await PackageBuilder.build({ id: 'os.my app', name: 'My App', version: '1.0.0', publisher: 'local', entry: 'files/app.html', permissions: ['gpu'], files: { 'files/app.html': '<html ...' } }, cryptoDriver); Classes Method Signature Summary Build a signed .prpkg package object. Serialize a pkg envelope to a JSON string (for download/storage). Deserialize a JSON string back to a pkg envelope. Create a Blob download for a built package. Trigger a browser download of a built package. Fail fast on unsafe package ids, versions, entry paths, and file paths. Read the optional Faculty binding without invoking accessors. Build a v2 artifact: an encrypted gzip container (gzip of a JSON payload {manifest, blockmap, files}) plus a public JSON envelope that the OS uses to cross verify the decrypted payload. Same codec the bundler uses. Download a v2 build: writes both (binary) and (envelope). Build a v3 artifact as a JHC1 binary container. The manifest, blockmap, file hashes, and a raw ECDSA P 256 signature over the JHC1 root hash are embedded in the canonical manifest. The resulting artifact is a single self describing binary file. Download a v3 build as a single self contained file. Build a hot patch from a base package to a target package. Ships ONLY the added/changed files (full content) + the list of removed","contentHash":"f3d548d59f2516eefc96a375a93378f83a79bbde0b281107a1185bab99d23a89"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageBuilder.md::0001","path":"webgpu-os/reference/packages/PackageBuilder.md","title":"packages/PackageBuilder.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageBuilder.js","updated":"","headings":["packages/PackageBuilder.js","Classes","class PackageBuilder","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"single self contained file. Build a hot patch from a base package to a target package. Ships ONLY the added/changed files (full content) + the list of removed paths, and carries the TARGET package's SIGNED manifest/blockmap/signature/ cert. The OS reconstructs base+delta and verifies the result against that signed metadata, so a delta is exactly as tamper evident as a full package. Both inputs are parsed pkg objects ({ manifest, blockmap, signature, cert, files }). The target MUST already be signed (its envelope's signature/cert). Return an adaptive coder that uses TokenCodec when it is smaller than raw text. Verify an offline policy before it is allowed to influence build work. Convert a DER ECDSA P 256 signature to raw 64 byte r s for JHC1. Trigger a browser download of a delta as . Download a v2 build as a SINGLE self contained (envelope embedded). <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross","contentHash":"d2d7fe5dd3b4f0da7bf985077ee1d585ec1841b42669c1793a6adb70c1a00568"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageBuilder.md::0002","path":"webgpu-os/reference/packages/PackageBuilder.md","title":"packages/PackageBuilder.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageBuilder.js","updated":"","headings":["packages/PackageBuilder.js","Classes","class PackageBuilder","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"97c601fa2bef5bb5adf3a91f5082fe32b9d3be7aa62a1d0bc9d0f03a2f1a2bfc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageCrypto.md::0000","path":"webgpu-os/reference/packages/PackageCrypto.md","title":"packages/PackageCrypto.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageCrypto.js","updated":"","headings":["packages/PackageCrypto.js","Classes","class PackageCrypto","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PackageCrypto.js — AES GCM payload encryption for .prpkg v2 containers. SECURITY NOTE (acknowledged in the plan): in a browser the decryption key must ship with the OS, so this encryption is OBFUSCATION / a licensing and guard hook — NOT true secrecy. Package authenticity comes from the ECDSA signature + the ring 0 trust chain (Phase 2), not from this encryption. Container binary layout ( v2): bytes 0..5 magic \"PRPKG2\" byte 6 version (0x02) byte 7 flags (bit0 = encrypted) bytes 8..19 AES GCM IV (12 bytes) [only if encrypted] bytes 20.. ciphertext (AES GCM, tag appended) or plaintext gzip if not encrypted The inner plaintext is gzip(JSON{manifest, blockmap, files}) — the same gzip codec the bundler uses, decompressed in browser via DecompressionStream('gzip'). ── Single file layout ( , embeds the envelope) ────────────────────── A v2 package historically shipped as TWO files (the binary container + a sidecar envelope). fuses both into ONE self describing , so there is a single artifact to move around and verify: bytes 0..5 magic \"PRPKGS\" byte 6 version (0x01) byte 7 reserved (0x00) bytes 8..11 envelope length (uint32, little endian) bytes 12.. envelope JSON (UTF 8) then the full PRPKG2 container bytes (as produced by seal()) reverses it. The envelope is the PUBLIC, signed metadata; the embedded container is cross verified against it by PackageVerifier.parseV2 (manifest + blockmap equality, signed blockmap.manifestHash, AES GCM AAD = id@version, and the ECDSA signature) — so tampering with either half is detected. Classes Method Signature Summary Provide ring 0 key material (raw bytes) — called by TrustStore when available. Wrap raw zip bytes into an encrypted v2 container. Unwrap","contentHash":"90fc7e007b11672bee0e2d39448ef26e4581282079fb97e27d984fefbf97ed9d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageCrypto.md::0001","path":"webgpu-os/reference/packages/PackageCrypto.md","title":"packages/PackageCrypto.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageCrypto.js","updated":"","headings":["packages/PackageCrypto.js","Classes","class PackageCrypto","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"Signature Summary Provide ring 0 key material (raw bytes) — called by TrustStore when available. Wrap raw zip bytes into an encrypted v2 container. Unwrap a v2 container back into raw zip bytes. Fuse a public envelope object + a PRPKG2 container into ONE self describing file (see the layout note at the top of this module). True if the bytes start with the PRPKGS single file magic. Split a single file back into { envelope, container }. True if the bytes start with the JHC1 magic (PRPKG v3 container). True if the bytes start with the PRPKG2 magic. <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d9de1394d408159b9ee08e7f1de775e98f144996703707ce85f84b22568662b5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageLoader.md::0000","path":"webgpu-os/reference/packages/PackageLoader.md","title":"packages/PackageLoader.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageLoader.js","updated":"","headings":["packages/PackageLoader.js","Classes","class PackageLoader","class CompatGuestApp","Notes & Examples","Basic loading","Trust tiers and capabilities","Dependency resolution","Sandboxing and permissions","Hot reload (development)","Error handling","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PackageLoader.js — load an installed .prpkg app's entry module from OPFS. Installed packages live at: /os/packages/installed/{appId}/{version}/files/{relPath} Loading strategy: 1. Gather every file under the package's files/ dir. 2. Apply enabled PatchManager overlays (file overlay layer) on top of base files. 3. Build a blob URL module graph: each JS module's relative import/export specifiers are rewritten to the blob URL of the corresponding packaged file, resolved in dependency order (best effort for cycles). 4. import() the entry blob URL and return the module namespace. Why rewrite specifiers instead of an import map? Import maps must exist before the first module loads; we resolve packages at runtime, so we inline the graph by rewriting relative specifiers to blob URLs. Blob URLs are retained for the lifetime of the loaded app and revoked when the package is reloaded or removed. Classes Method Signature Summary True if a service worker is controlling this page and can serve package files. Immutable native URL: <os base / jhc apps /{appId}/{rootHash}/files/{rel}. Load (or reload) an installed app's entry module namespace. The canonical compat bootloader entry (files/index.js), regenerated at load time so stale packages keep working without a republish. Rather than ing ./ compat source.js (cross module binding through this loader's blob graph rewriter proved fragile — the rewritten/relative import failed to bind, yielding \"profile/ compat is not defined\"), we INLINE the source module's content directly and strip its keywords so its / / become locals in the same scope. The result is a single self contained module with NO imports for the linker to touch. is the raw ./ compat","contentHash":"5a15cb6e35e2aebb745fbb9294781a049b449b73e8c07797c31c6fa8a8181b1f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageLoader.md::0001","path":"webgpu-os/reference/packages/PackageLoader.md","title":"packages/PackageLoader.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageLoader.js","updated":"","headings":["packages/PackageLoader.js","Classes","class PackageLoader","class CompatGuestApp","Notes & Examples","Basic loading","Trust tiers and capabilities","Dependency resolution","Sandboxing and permissions","Hot reload (development)","Error handling","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"keywords so its / / become locals in the same scope. The result is a single self contained module with NO imports for the linker to touch. is the raw ./ compat source.js content. Release blob URLs for an app (call on remove). Gather an installed package's files (patch overlay aware) WITHOUT building a blob graph or importing — used by the isolated package realm, which ships the raw files into an opaque origin iframe and builds the graph there. <! HUMAN NOTES Notes & Examples Loads and verifies signed bundles at runtime. Handles trust tier checks, capability grants, sandbox initialization, and dependency resolution. Basic loading Trust tiers and capabilities Dependency resolution Sandboxing and permissions Hot reload (development) Error handling See also: Package Trust Tiers · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"9762528da7e0eaf2d7b20394fc33f8dfc46940c66846e33785d0e188a3ca5c88"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageManager.md::0000","path":"webgpu-os/reference/packages/PackageManager.md","title":"packages/PackageManager.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageManager.js","updated":"","headings":["packages/PackageManager.js","Classes","class PackageManager","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PackageManager.js — install, remove, update, verify, repair, rollback .prpkg packages. Package lifecycle: download/pick → stage → verify → install → register → (update → rollback) Storage layout: /os/packages/installed/{appId}/{version}/ ← active package files /os/packages/staging/{appId}/{version}/ ← in progress installs /os/packages/rollback/{appId}/{version}/ ← previous version for rollback /os/packages/locks/{appId}.lock.json ← prevents concurrent installs /os/packages/chunks/sha256 {hash} ← chunk cache (CacheDriver) Classes Method Signature Summary Re register previously installed (non builtin) packages into AppRegistry on boot so they survive reload and appear/launch like built ins. Map a prpkg manifest → AppRegistry app manifest shape (resolvedEntry = pkg:<id ). Load an installed package's entry module namespace (used by Desktop for pkg:<id ). Revoke the blob URLs created for an installed package's module graph. Called by the shell when a package app's window closes (lifecycle cleanup). No op for built ins / apps that were never package loaded. Gather an installed package's raw files for isolated realm execution. This OS instance's publisher identity. Give to the issuer tool ( ) to mint a root signed cert that makes your packages verify as TRUSTED. Import a root issued publisher cert ( ). It is only stored if it actually matches THIS OS's signing identity (otherwise it's useless here). Map a trust verdict → a user facing trust tier (label + badge). trusted → root chained, fully trusted community → self signed and pinned/accepted on this device (unofficial) unverified → self signed, not yet pinned quarantined → blocked (integrity/provenance/high risk) Trust tier for an","contentHash":"8eda95ea583ecc821417ec0d25ed9b5646cab8e9a566a9275e2db01880fa949a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageManager.md::0001","path":"webgpu-os/reference/packages/PackageManager.md","title":"packages/PackageManager.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageManager.js","updated":"","headings":["packages/PackageManager.js","Classes","class PackageManager","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"pinned/accepted on this device (unofficial) unverified → self signed, not yet pinned quarantined → blocked (integrity/provenance/high risk) Trust tier for an installed app id. The stored publisher cert, but only if it matches the current signing identity. Synchronous trust profile for the syscall guard (default deny egress). Built ins / unknown apps are trusted; installed packages carry their verdict. restricted → network requires explicit grant (no auto allow) blocked → quarantined: hard deny network/egress capabilities Phase 2 execution policy for an app id — decides the runtime realm an app's code may use, based on its trust verdict: 'shared' → may run in the shared OS origin (built ins + root trusted) 'isolated' → must run in an opaque origin sandbox iframe (pinned/untrusted) 'none' → must NOT run (quarantined); inspect/export/remove only Built ins and unknown ids (no cached verdict) resolve to 'shared'. Register a consent handler the shell can override with a nice modal. Signature: async (info) = boolean (true = user accepts the install) info = { appId, publisher, fingerprint, permissions, verdict, scan, publisherChanged } Single verify → trust/pin → provenance → scan → policy choke point. A future kernel guard can subscribe/override here. Does NOT prompt — returns a verdict the caller (install) acts on. Prompt for install consent (shell handler if set, else a confirm() fallback). Validate the id, version, entry, and every file path in a package before consent/storage. Install a local package from a binary container + optional envelope. Auto detects v3 JHC1, v2 PRPKG2, and single file PRPKGS formats. Used by the Package Manager's drop two files flow (offline, no URL needed). Backward compatible alias for installLocal. Install a SINGLE file (envelope embedded — no","contentHash":"5e4d37fd67ca254cc6230b15b5e5f4fde1c1f69ba27dc61d4b41ffcdee1101a0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageManager.md::0002","path":"webgpu-os/reference/packages/PackageManager.md","title":"packages/PackageManager.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageManager.js","updated":"","headings":["packages/PackageManager.js","Classes","class PackageManager","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"the Package Manager's drop two files flow (offline, no URL needed). Backward compatible alias for installLocal. Install a SINGLE file (envelope embedded — no sidecar). Auto detects v3 JHC1, v2 PRPKGS single file, and legacy PRPKG2 single file. Apply a hot patch to an already installed package. Reads the installed base payload, reconstructs the target file set (base − removed + changed), then routes through the normal install() — which verifies EVERY file hash, the merkle root, the signed manifestHash, the publisher signature and the rotating cert's chain to root + validity window, and stages/swaps with rollback. A forged or stale delta simply fails verification and is rejected, leaving the installed copy untouch","contentHash":"62882d3ad67c0767626f5171c78c96ceb7432702a74ffc5aa861bb180726d2ac"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageRegistry.md::0000","path":"webgpu-os/reference/packages/PackageRegistry.md","title":"packages/PackageRegistry.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageRegistry.js","updated":"","headings":["packages/PackageRegistry.js","Classes","class PackageRegistry","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PackageRegistry.js — IndexedDB backed registry of installed packages. Each record in the 'packages' store: { id: 'os.shader lab', name: 'Shader Lab', version: '1.0.0', activeRootHash: 'a1b2c3d4...', // content addressed install directory rollbackRootHash: '...', // previous activation root hash rollbackVersion: null, rollbackAvailable: false, publisher: 'local', installedAt: 1234567890, updatedAt: 1234567890, entryPath: '/os/packages/installed/os.shader lab/a1b2c3d4.../files/app.html', manifest: { ...full manifest... }, format: 'prpkg v1', trustVerdict: 'trusted', pinned: false, pinnedVersion: null, sourceUrl: null, // URL to check for updates } Classes PackageRegistry.js — IndexedDB backed registry of installed packages. Each record in the 'packages' store: { id: 'os.shader lab', name: 'Shader Lab', version: '1.0.0', activeRootHash: 'a1b2c3d4...', // content addressed install directory rollbackRootHash: '...', // previous activation root hash rollbackVersion: null, rollbackAvailable: false, publisher: 'local', installedAt: 1234567890, updatedAt: 1234567890, entryPath: '/os/packages/installed/os.shader lab/a1b2c3d4.../files/app.html', manifest: { ...full manifest... }, format: 'prpkg v1', trustVerdict: 'trusted', pinned: false, pinnedVersion: null, sourceUrl: null, // URL to check for updates } Method Signature Summary <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust","contentHash":"8b8b660a300f4c26d77ea3d58968a51fb341e0f80b886a2d51b79d6873032fa7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageRegistry.md::0001","path":"webgpu-os/reference/packages/PackageRegistry.md","title":"packages/PackageRegistry.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageRegistry.js","updated":"","headings":["packages/PackageRegistry.js","Classes","class PackageRegistry","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"239f15ae67dc10feb3c79ae3199dc3159b667b0309d553ef48ab2d6a04495d95"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageScanner.md::0000","path":"webgpu-os/reference/packages/PackageScanner.md","title":"packages/PackageScanner.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageScanner.js","updated":"","headings":["packages/PackageScanner.js","Classes","class PackageScanner","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PackageScanner.js — heuristic static pre scan of package contents. This is an EARLY WARNING badge, not a guarantee: novel obfuscation will evade heuristics. The real containment is default deny egress + sandboxed execution (see PermissionPortal / guardSyscalls). The scanner flags the patterns seen in real 2025–2026 supply chain payloads: heavy obfuscation, base64 blobs, dynamic code execution, credential/secret access, network exfiltration, and payloads hidden inside non code assets. scan(pkg) → { risk: 'low' 'medium' 'high', findings: [{ level, code, file, msg }] } Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"c22023575311999edf412b276281a46c9547099671ad4b89fdece4af8f52b3f0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageVerifier.md::0000","path":"webgpu-os/reference/packages/PackageVerifier.md","title":"packages/PackageVerifier.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageVerifier.js","updated":"","headings":["packages/PackageVerifier.js","Classes","class PackageVerifier","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PackageVerifier.js — verifies .prpkg package integrity. Verification steps: 1. Validate manifest schema (format, required fields) 2. Verify each file's SHA 256 hash against blockmap 3. Verify ECDSA P 256 publisher signature over blockmap hash The publisher key fingerprint is stored in the manifest. Trusted publishers are managed by kernel.permissions. Classes Method Signature Summary Compute SHA 256 of a string or ArrayBuffer. Returns hex string. Compute SHA 256 of every file in a files map { path → content(string) }. Returns { path → sha256hex } record. Fingerprint (16 hex chars) of a base64 raw public key — the SAME scheme the OS identity uses: SHA 256(raw key)[:16]. Used to detect fingerprint spoofing. Compute a binary Merkle root over a { path → sha256 } map — a single tamper evident hash covering EVERY file. Domain separated leaves/nodes (\"leaf:\"/\"node:\") defend against second preimage attacks; the last node is duplicated for odd levels. Stored in the (signed) blockmap as . Verify a parsed package object. Decrypt + unzip a v2 container and cross verify it against its public JSON envelope. Returns a unified pkg object compatible with verify() and install(): { format, manifest, blockmap, signature, cert, files, ... }. Throws if cross verification fails (container hash, manifest, or blockmap disagree with the envelope) — this is the \"double verify\" guarantee. Parse a SINGLE file (envelope embedded ahead of the container). Splits it, then runs the exact same cross verification as parseV2 — so a one file package is just as tamper evident as the two file form. True if the bytes are a single file (embedded envelope) . Auto detect package format and parse into a unified pkg object.","contentHash":"bd18be53eeaca3a603a7a3df5d03f142092cae9f3aced19012aaae3938133bfb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageVerifier.md::0001","path":"webgpu-os/reference/packages/PackageVerifier.md","title":"packages/PackageVerifier.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageVerifier.js","updated":"","headings":["packages/PackageVerifier.js","Classes","class PackageVerifier","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"tamper evident as the two file form. True if the bytes are a single file (embedded envelope) . Auto detect package format and parse into a unified pkg object. Supports: prpkg v3 JHC1 binary, prpkg v2 binary, single file PRPKGS, and JSON envelopes (v1/v2/v3 with optional remote container fetch). Parse a v3 binary container (JHC1 format). Returns a unified pkg object compatible with verify() and install(). Schema validate a hot patch envelope. Reconstruct the full target package from a delta + the installed base files (base − removed + changed). Returns a pkg object shaped for verify()/install(). It does NOT trust the delta: the caller runs the normal verification, which checks every file hash, the merkle root, the signed manifestHash, the publisher signature and the cert's chain to root + validity window — so a forged/stale delta cannot reconstruct a package that verifies. Verify a single downloaded chunk against its expected sha256. <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the","contentHash":"670d52151607463a6fefd62df6c93606213d104c1e10c764b7fa6a7ee852cebe"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PackageVerifier.md::0002","path":"webgpu-os/reference/packages/PackageVerifier.md","title":"packages/PackageVerifier.js","description":"","kind":"reference","source":"webgpu-os/packages/PackageVerifier.js","updated":"","headings":["packages/PackageVerifier.js","Classes","class PackageVerifier","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"34e624fb40682d8b9b72bb8eb375749e3da17eb5e154897b07a22f7635e44398"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PublisherKeyManager.md::0000","path":"webgpu-os/reference/packages/PublisherKeyManager.md","title":"packages/PublisherKeyManager.js","description":"","kind":"reference","source":"webgpu-os/packages/PublisherKeyManager.js","updated":"","headings":["packages/PublisherKeyManager.js","Classes","class PublisherKeyManager","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PublisherKeyManager.js — the developer's portable package signing key. Distinct from (the device identity), whose private key is NON extractable and therefore cannot be backed up, moved between machines, or rotated with a lineage. A publisher who ships packages needs a key they can: generate once and KEEP SAFE (encrypted export the dev stores offline), re import on another machine / after reinstall, ROTATE while proving continuity (old key signs the new key — see kernel/SigningLineage.js), so app updates stay verifiable and isolated. The keypair is ECDSA P 256, extractable , stored locally (JWK in the IDB kv store) for day to day signing, plus an AES 256 GCM (PBKDF2 SHA256) encrypted backup the dev downloads and keeps. Signatures are raw IEEE P1363 (WebCrypto default), the same format / CollabIdentity expects, and fingerprints are computed via so the publisher fingerprint scheme matches the rest of the trust system. Classes Method Signature Summary Load a previously generated/imported publisher key from local storage. Status snapshot for UI. A shaped adapter so existing signing paths (PackageBuilder .buildV2 / AppCompiler) can sign with the PUBLISHER key instead of the device key, with zero changes to their signing logic. Generate a brand new publisher key (replaces any current one). Sign a string with the publisher private key (raw P1363 signature). Encrypted backup the developer downloads and keeps safe. AES 256 GCM with a key derived from via PBKDF2 SHA256. Returns a JSON serialisable envelope; the passphrase is NEVER stored. Restore a publisher key from an encrypted backup envelope + passphrase. Genesis (single node) signing lineage for an app, anchored at the current key.","contentHash":"2d9368d991f175d227ec8523aa2fc961cc6601a2c8b0661d9a2af9412e9a0e0c"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/PublisherKeyManager.md::0001","path":"webgpu-os/reference/packages/PublisherKeyManager.md","title":"packages/PublisherKeyManager.js","description":"","kind":"reference","source":"webgpu-os/packages/PublisherKeyManager.js","updated":"","headings":["packages/PublisherKeyManager.js","Classes","class PublisherKeyManager","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"stored. Restore a publisher key from an encrypted backup envelope + passphrase. Genesis (single node) signing lineage for an app, anchored at the current key. Rotate the signing key: the CURRENT key signs the NEW key (proof of rotation), the new key becomes current, and the extended lineage is returned. Pass the app's existing lineage (or omit for a fresh genesis→rotate). <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"963587e99a9d981c5d7b473b9078a70739461d1a848553cf117db0ebae3b5b01"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/UpdateManager.md::0000","path":"webgpu-os/reference/packages/UpdateManager.md","title":"packages/UpdateManager.js","description":"","kind":"reference","source":"webgpu-os/packages/UpdateManager.js","updated":"","headings":["packages/UpdateManager.js","Classes","class UpdateManager","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: UpdateManager.js — block level differential update engine (MSIX style, web native). Update flow: check(appId) → fetch remote blockmap from sourceUrl, diff against installed blockmap, return UpdateJob with changed/removed file lists. apply(appId) → download only changed chunks, verify each sha256, verify package ECDSA P256 signature, atomic swap installed dirs, save previous version to rollback slot, update registry. rollback(appId)→ delegate to PackageManager.rollback() checkAll() → check all installed packages that have a sourceUrl setSource() → delegate to PackageManager.setSource() Remote blockmap format (served at {sourceUrl}/blockmap.json): { \"appId\": \"os.my app\", \"version\": \"1.2.0\", \"files\": [ { \"path\": \"index.js\", \"sha256\": \"hex...\", \"size\": 8192 }, { \"path\": \"manifest.json\", \"sha256\": \"hex...\", \"size\": 512 } ], \"signature\": \"base64 ecdsa der...\", // optional — over canonical payload \"signerPublicKey\": { \"kty\":\"EC\",\"crv\":\"P 256\", ... } // optional JWK } Storage layout (under /os/packages/): .updates/{appId}/remote blockmap.json ← cached remote blockmap post check .updates/{appId}/staged/ ← downloaded changed files installed/{appId}/{version}/ ← live package (PackageManager layout) rollback/{appId}/{version}/ ← previous version slot Classes Method Signature Summary Configure the version cooldown window (ms). Set enabled=false to disable. Fetch the remote blockmap and diff against the installed blockmap. Returns a serialisable UpdateJob snapshot. Check all installed packages that have a sourceUrl. Skips pinned packages. Download changed chunks, verify sha256, verify signature, atomic swap. Re runs check() if the job is not in 'available' state. Roll back to the previous","contentHash":"eb051d38095c76d63c01f05797548eec5df0c78632204c2fbbfbacf20d0d935e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/UpdateManager.md::0001","path":"webgpu-os/reference/packages/UpdateManager.md","title":"packages/UpdateManager.js","description":"","kind":"reference","source":"webgpu-os/packages/UpdateManager.js","updated":"","headings":["packages/UpdateManager.js","Classes","class UpdateManager","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"Download changed chunks, verify sha256, verify signature, atomic swap. Re runs check() if the job is not in 'available' state. Roll back to the previous installed version. Delegates to PackageManager. Set or update the source URL for a package. Validates the URL first. Validate + normalise a package source base URL (https; http only for localhost dev). Resolve a per file download URL and refuse origin escape / path traversal. Current UpdateJob snapshot for one package. List snapshots for all tracked packages. Return all packages with updates available (state === 'available'). Decide whether a remote release is within the cooldown window. Uses remote.builtAt / publishedAt; if absent, cannot enforce (returns not held). An explicit remote.urgent=true bypasses cooldown (security fixes). Normalize blockmap v1 (v3 JHC1: files object, packageId) and legacy v2 (files array, appId) into a common shape. Preserves signature fields. Compare two blockmaps and return the diff. Fetch a single file, verify its sha256, return ArrayBuffer. Throws on HTTP error or hash mismatch. Verify the ECDSA P256 signature over the canonical blockmap payload. Canonical payload = JSON.stringify({ appId, version, files }) — no signature fields. Trust order: 1. Key stored in the local registry (TOFU — prevents signer substitution attacks) 2. Key embedded in the remote blockmap (first time install or trust upgrade) Returns { ok, reason } where reason='missing' means unsigned (not an error per se). <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security &","contentHash":"4fd322178e44295f34079879ddad6c99e8a70c643d820069d74d908e2bc81c63"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/UpdateManager.md::0002","path":"webgpu-os/reference/packages/UpdateManager.md","title":"packages/UpdateManager.js","description":"","kind":"reference","source":"webgpu-os/packages/UpdateManager.js","updated":"","headings":["packages/UpdateManager.js","Classes","class UpdateManager","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes command","contentHash":"827e3d8c36d395281c4daf981998ca73a07e8129a43174e4cbfa3f8e8a4f2862"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/packages/Zip.md::0000","path":"webgpu-os/reference/packages/Zip.md","title":"packages/Zip.js","description":"","kind":"reference","source":"webgpu-os/packages/Zip.js","updated":"","headings":["packages/Zip.js","Classes","class Zip","Notes & Examples","Packaging & trust tiers","Packaging & trust tiers","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Create a ZIP archive. Entries are DEFLATE compressed (method 8) when that shrinks them, else STORED (method 0) — the result is always a valid ZIP. Parse a ZIP archive into a { name → Uint8Array } map. Supports STORE (0) and DEFLATE (8). <! HUMAN NOTES Notes & Examples Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. See also: Security & Trust Model · WebGPU OS Architecture Packaging & trust tiers OS apps ship as signed bundles (V2: signed + encrypted + merkle + cert). A developer (self signed) key verifies as the community / unofficial tier; a root issued cert promotes it to trusted , and capability grants scale with the tier. Example: Loading a package with trust check See also: Security & Trust Model · WebGPU OS Architecture Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4a217ab868e2a92e3ade11884825e56329ec962589846518facc6cfd70f698cf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/Desktop.md::0000","path":"webgpu-os/reference/shell/Desktop.md","title":"shell/Desktop.js","description":"","kind":"reference","source":"webgpu-os/shell/Desktop.js","updated":"","headings":["shell/Desktop.js","Classes","class Desktop","Functions","createProvisionalMountHandoff({ controller = new AbortController()","guardMountRegistrations(namespace, signal, methods = [], label = 'app capability')","resolveAppConstructor(mod)","desktopFrameRgbHash(data)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Desktop.js — the OS shell compositor. Owns: Plauna workspace (virtual desktops, panel chrome, window management). Taskbar (bottom bar: start menu + running apps + status tray). NotificationCenter (toast/banner delivery). Routing of kernel 'ui:open panel' events to WorkspaceManager. Phase 2 adds AppManifestLoader → dynamic app registration. Phase 3 adds GPU panel wiring (canvas surface allocation per app). Method Signature Summary Route an \"open Settings\" request to the Control Panel's Settings tab. The optional (e.g. 'appearance') selects the settings sub tab. If the Control Panel is not yet running, the target is stashed on the kernel so the app applies it on mount; otherwise a live event navigates it. Debounce window state writes so rapid drag/resize events don't thrash localStorage. Persist position/size + maximized flag. While maximized, store the pre maximize rect. Re clamp every open window into the work area when the viewport resizes. Enter/exit the immersive 3D desktop. Safe no op if unsupported. True when the focused app is maximized or the page is in browser fullscreen — in which case middle click belongs to the app, not the OS. Whether the immersive parallax Exposé is enabled (Personalization → Effects → \"Immersive Desktop\"). Read live from os.appearance so the toggle takes effect immediately; defaults ON when unset. True only when a pointer event lands on the BLANK main desktop surface — i.e. inside the desktop workspace but NOT over any running app window or a desktop shortcut. Used to scope the immersive middle click so it never steals the middle button","contentHash":"1d5095c0aee7a354ba022c26c915c949d6538cbc41713d53c8475263bd695e37"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/Desktop.md::0001","path":"webgpu-os/reference/shell/Desktop.md","title":"shell/Desktop.js","description":"","kind":"reference","source":"webgpu-os/shell/Desktop.js","updated":"","headings":["shell/Desktop.js","Classes","class Desktop","Functions","createProvisionalMountHandoff({ controller = new AbortController()","guardMountRegistrations(namespace, signal, methods = [], label = 'app capability')","resolveAppConstructor(mod)","desktopFrameRgbHash(data)","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"the desktop workspace but NOT over any running app window or a desktop shortcut. Used to scope the immersive middle click so it never steals the middle button (autoscroll/paste) from apps or other surfaces. Initialize the experimental GPU native UI compositor. This renders the desktop's windows as live 3D quads with no DOM. The classic DOM/Plauna stack is kept intact underneath as the always available fallback — the GPU UI just hides it while active and restores it on exit. The F4 toggle is disabled; the GPU UI is only entered programmatically (Escape exits). Enter/exit the GPU native UI. While active the DOM workspace is hidden (not destroyed) so it remains a working fallback. Extension capture sees the visible tab — which is the opaque GPU canvas once shown — so to refresh we briefly hide the canvas, let the live DOM show for a couple frames, capture+crop, then restore. Debounced and only fired after interactions / focus changes to keep the blink rare. One time feature detection with a real trial draw. Forward a GPU window pointer event into the underlying live DOM panel. Window local px map 1:1 to panel local px (the window mirrors the panel), so we add the panel's live screen rect and dispatch synthetic events to the real element. Focusing on 'down' lets the physical keyboard flow to the app natively (no synthetic key handling needed). Live mode only. Attach a live Element Capture <video to each running app's panel and register it with the compositor. Returns true if any window went live. On denial/failure, cleans up and returns false (→ snapshot fallback). Cheap perceptual hash of a frame (downscaled) for change detection. Adaptive self scheduling capture loop. Each iteration grabs ONE fully isolated Element Capture frame for the most overdue window and uploads it","contentHash":"a00e748c1c1dbee54fb0bdd9d6316571efb19af613a08f6df24872cfa10d2464"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/Desktop.md::0002","path":"webgpu-os/reference/shell/Desktop.md","title":"shell/Desktop.js","description":"","kind":"reference","source":"webgpu-os/shell/Desktop.js","updated":"","headings":["shell/Desktop.js","Classes","class Desktop","Functions","createProvisionalMountHandoff({ controller = new AbortController()","guardMountRegistrations(namespace, signal, methods = [], label = 'app capability')","resolveAppConstructor(mod)","desktopFrameRgbHash(data)","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"detection. Adaptive self scheduling capture loop. Each iteration grabs ONE fully isolated Element Capture frame for the most overdue window and uploads it to that window's own texture (no smear). Per window interval ADAPTS: frames that changed → interval shrinks toward 60fps; unchanged (static page) → grows toward 250ms. The focused/interacting window is pinned to the max rate. The capture pipeline itself drops frames for static surfaces, so this matches each window's real update rate. Resolve the logical cursor type the real DOM wants at a screen point, so the virtual cursor matches the app (pointer/text/grab/default). The GPU canvas sits on top, so we briefly disable its hit testing for the probe. Apply Elem","contentHash":"6103e244a38185db8f623b3a275efd907bfc06a04398fbba338d4dfcd3745874"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/DialogManager.md::0000","path":"webgpu-os/reference/shell/DialogManager.md","title":"shell/DialogManager.js","description":"","kind":"reference","source":"webgpu-os/shell/DialogManager.js","updated":"","headings":["shell/DialogManager.js","Classes","class DialogManager","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: DialogManager.js — OS level dialog system. Handles kernel events and renders styled alert / confirm / prompt dialogs as a layered overlay above all panels. API (via kernel.events or syscalls.ui. ): ui:modal { type, title, message, icon, buttons, defaultValue, resolve } Promise returning syscalls (see Syscalls.js): syscalls.ui.alert(msg, opts) → Promise<void syscalls.ui.confirm(msg, opts) → Promise<boolean syscalls.ui.prompt(msg, default, opts) → Promise<string null Classes DialogManager.js — OS level dialog system. Handles kernel events and renders styled alert / confirm / prompt dialogs as a layered overlay above all panels. API (via kernel.events or syscalls.ui. ): ui:modal { type, title, message, icon, buttons, defaultValue, resolve } Promise returning syscalls (see Syscalls.js): syscalls.ui.alert(msg, opts) → Promise<void syscalls.ui.confirm(msg, opts) → Promise<boolean syscalls.ui.prompt(msg, default, opts) → Promise<string null Method Signature Summary Attach to a container (usually document.body or the desktop root). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"9c54038b3b6b606edd5058cc28eda413ae9ce22f6b717144f737563102a9f545"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/NotificationCenter.md::0000","path":"webgpu-os/reference/shell/NotificationCenter.md","title":"shell/NotificationCenter.js","description":"","kind":"reference","source":"webgpu-os/shell/NotificationCenter.js","updated":"","headings":["shell/NotificationCenter.js","Classes","class NotificationCenter","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: NotificationCenter.js — routes kernel ui:notify events to Plauna's ToastManager. Uses Plauna ToastManager directly (the same underlying system NotificationSystem uses). Falls back to a minimal DOM toast only if Plauna has not mounted yet. Classes Method Signature Summary Called by Desktop after Plauna mounts (CSS/theme guaranteed ready). Start listening to kernel ui:notify events. Remove a single notification by id. Returns true if one was removed. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4f45590eff1d79e543f5ebb0330e57ef4570a0398e9532f9a03946dfa7cf6b23"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/PackageHostRealm.md::0000","path":"webgpu-os/reference/shell/PackageHostRealm.md","title":"shell/PackageHostRealm.js","description":"","kind":"reference","source":"webgpu-os/shell/PackageHostRealm.js","updated":"","headings":["shell/PackageHostRealm.js","Classes","class PackageHostRealm","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: PackageHostRealm.js — run an installed NATIVE package app inside an opaque origin sandboxed iframe, bridging the kernel syscalls over a nonce bound postMessage RPC. WHY: imports a package's entry module straight into the OS origin (S2). Trusted/root packages may keep that fast shared realm, but pinned/untrusted packages must NOT touch , the OS DOM, localStorage, the extension bridge, or any accidental globals. This realm gives them an (NO ) iframe — a true origin boundary — and proxies the syscall surface back to the host's GUARDED syscalls for that app. BRIDGE SCOPE (honest limits): Async, structured cloneable syscalls (fs. , storage. , ui.notify/alert/ confirm/prompt, log. , sandbox. , net send/fetch, pkg reads, etc.) work: each call round trips to the host, which invokes the real guarded method. Subscriptions / callbacks ( , , , …) CANNOT cross the boundary; the in iframe proxy returns a no op unsubscribe so apps that register listeners do not crash (they simply receive no host events yet). Raw / GPU surfaces cannot cross an opaque origin boundary, so GPU panel apps are NOT isolated here (the launcher keeps them shared). SECURITY: the host only ever services RPC bearing the exact per instance nonce from the iframe it created, and only invokes (already guarded + capability checked for THIS appId). Unknown namespaces/methods are refused. Classes Method Signature Summary Gather files, build the sandboxed iframe, and boot the app inside it. The in iframe bootstrap. Runs in the opaque origin. Waits for pkgInit, builds a blob URL module graph from the shipped files, creates a syscall RPC proxy, imports the entry module, and mounts the default export app. <! HUMAN NOTES Notes &","contentHash":"cb8b99e8bf55c18d13eee8c5c2cde1bc9de637c7a7fba72b1d926c1f4cd7b8e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/PackageHostRealm.md::0001","path":"webgpu-os/reference/shell/PackageHostRealm.md","title":"shell/PackageHostRealm.js","description":"","kind":"reference","source":"webgpu-os/shell/PackageHostRealm.js","updated":"","headings":["shell/PackageHostRealm.js","Classes","class PackageHostRealm","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"blob URL module graph from the shipped files, creates a syscall RPC proxy, imports the entry module, and mounts the default export app. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"30238f994e6fbf5b9a71db696509a5f4f83ac2cba11147ebce1cb37c91feceda"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/StartMenu.md::0000","path":"webgpu-os/reference/shell/StartMenu.md","title":"shell/StartMenu.js","description":"","kind":"reference","source":"webgpu-os/shell/StartMenu.js","updated":"","headings":["shell/StartMenu.js","Classes","class StartMenu","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"e151e9c7fc97bd43e76f69df581b3b04e9a9626150dd1425d1c46596f7b18bd7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/StatusTray.md::0000","path":"webgpu-os/reference/shell/StatusTray.md","title":"shell/StatusTray.js","description":"","kind":"reference","source":"webgpu-os/shell/StatusTray.js","updated":"","headings":["shell/StatusTray.js","Classes","class StatusTray","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes StatusTray.js — rightmost section of the taskbar. A thin orchestrator: it composes stateless tray widgets (see ./tray/ tray widgets.js) and owns the per frame update loop. It does NOT render the calendar — clicking the clock requests the Calendar app's flyout surface. Layout (left → right): GPU stat FPS stat 🔍 ⚡ Clock 🔔 Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d0bf10617eb94bfafca46d7422fcd971f6264a7ca53c575eb10b37714714fa88"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/Taskbar.md::0000","path":"webgpu-os/reference/shell/Taskbar.md","title":"shell/Taskbar.js","description":"","kind":"reference","source":"webgpu-os/shell/Taskbar.js","updated":"","headings":["shell/Taskbar.js","Classes","class Taskbar","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Taskbar.js bottom shell coordinator. Rendering and behavior live in shell/taskbar modules so the taskbar can grow without becoming another monolithic desktop controller. Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"3f08701fe9e366ed170ff686de26eb33a9e9989eed4fe5c4e91d88f716460b77"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/WindowSizer.md::0000","path":"webgpu-os/reference/shell/WindowSizer.md","title":"shell/WindowSizer.js","description":"","kind":"reference","source":"webgpu-os/shell/WindowSizer.js","updated":"","headings":["shell/WindowSizer.js","Functions","availableDesktop()","computeWindow(manifest, cascadeIndex = 0)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WindowSizer.js — Viewport aware window sizing and placement. Computes default window dimensions and screen position based on: 1. The LIVE available desktop area (viewport minus taskbar) — not device type. 2. The app manifest's (and optional ) to pick a sizing profile. 3. The manifest's treated as design time values at a 1440px reference viewport, then scaled proportionally to the actual viewport. Windows are centered in the available desktop area, with a configurable cascade offset for stacking multiple windows. ── Viewport contexts (based on available desktop width) ────────────────── compact < 640px — very constrained (browser in half screen, etc.) medium 640–1024 — tablet / laptop / small desktop window wide 1024–1440 — typical desktop ultrawide 1440 — large monitor / maximized on 4K ── Sizing profiles (per manifest category / sizingHint) ────────────────── compact → small, fixed size utility (calculator, clock) utility → small utility panel tools → medium tool (settings, pkg manager) system → medium large system panel (sysmon, task manager, terminal, files) debug → narrow + tall (devconsole, log viewer) creative → large workspace (paint, notepad) webgpu → large with canvas (fractal, particles, gpu manager) games → large, prefers square ish (minesweeper, snake, solitaire) workspace → near full (browser, heavy editors) [sizingHint override] full → fills entire desktop area [sizingHint override] Functions Returns the current available desktop dimensions (px). Compute the optimal window { width, height, x, y } for a given manifest. Parameters: (object) — — app manifest (category, sizingHint?, defaultWidth?, defaultHeight?) (number) — — how many windows are already open (for","contentHash":"8d3c6ebc145c0d883d54c7d58f7cf79bd8ef7dd9bea5a90239e4cd8240b49db1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/WindowSizer.md::0001","path":"webgpu-os/reference/shell/WindowSizer.md","title":"shell/WindowSizer.js","description":"","kind":"reference","source":"webgpu-os/shell/WindowSizer.js","updated":"","headings":["shell/WindowSizer.js","Functions","availableDesktop()","computeWindow(manifest, cascadeIndex = 0)","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"manifest. Parameters: (object) — — app manifest (category, sizingHint?, defaultWidth?, defaultHeight?) (number) — — how many windows are already open (for cascade offset) Returns: } <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6f32be826965022adcef62c78ae78cc670e9ccb18b7ffb2f027ff739c8312690"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/WindowStateStore.md::0000","path":"webgpu-os/reference/shell/WindowStateStore.md","title":"shell/WindowStateStore.js","description":"","kind":"reference","source":"webgpu-os/shell/WindowStateStore.js","updated":"","headings":["shell/WindowStateStore.js","Functions","validateState(state)","clampToViewport(state)","clampStateSize(state)","loadState(appId)","saveState(appId, { x, y, width, height, maximized = false })","clearState(appId)","clearAllStates()","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: WindowStateStore.js — Persist and restore per app window position/size. Stored in localStorage under 'os.windowStates' as a versioned envelope whose field maps appId → state. The historical bare map remains readable. Validates a restored state against the current viewport before using it; if the position is out of bounds or the size is unreasonable the saved state is silently ignored and the app opens at its computed default. Functions Validate a saved state for corruption only (finite, positive size). Position reachability is no longer a reject reason — clampToViewport() moves an off screen window back into view instead of discarding the saved state. Reposition a state so a reachable strip of its titlebar stays inside the work area. Handles smaller screens / resolution changes / disconnected monitors — the window is pulled back on screen rather than left unclickable. Clamp a state's width and height so neither falls below 15% nor exceeds 100% of the available desktop area. Position is preserved as is. Load the saved window state for an app. Returns null when nothing is stored yet. Persist the current window state for an app. Remove the saved window state for an app (e.g. after a reset). Remove every persisted window geometry record. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"da8fcf0bda757ff04462829ef6696ec01ba8296ab80159c54d62ddfab275a14d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/app-icon.md::0000","path":"webgpu-os/reference/shell/app-icon.md","title":"shell/app-icon.js","description":"","kind":"reference","source":"webgpu-os/shell/app-icon.js","updated":"","headings":["shell/app-icon.js","Functions","isImageIcon(v)","isVideoIcon(v)","isMediaIcon(v)","renderAppIcon(container, icon, { fallback = '▪' } = {})","async fileToIcon(file)","async bytesToIcon(bytes, filename = 'icon')","async urlToIcon(url, { fetchImpl = null } = {})","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: app icon.js — custom app icons: emoji/glyph OR an uploaded/online image, animated GIF/WebP, or a short video. A manifest value may be ANY of: • an emoji / short glyph — \"🧩\" (default; what the shell drew before) • a still image data/URL — data:image/… or https://…/x.png • an ANIMATED image — animated GIF / WebP (plays via <img ) • a short video — data:video/… or https://…/x.webm (muted loop) renderAppIcon() paints the right element into a container — drop in for the old . Media icons size to the container's font size (1em square), so each call site keeps its existing sizing. fileToIcon()/urlToIcon() turn a chosen file or remote URL into a compact, self contained data URL (downscaled + size capped; animation preserved when it fits) suitable for embedding in a manifest at compile time. Functions Render into (cleared first). Emoji/glyph → text (so the caller's font size applies); image/video → a 1em square media element. Parameters: (HTMLElement) — No description in source JSDoc. (string) — No description in source JSDoc. Turn a chosen File into a compact icon data URL. • video → kept as is if ≤ VIDEO CAP (muted loop). • animated → kept as is if ≤ FULL CAP (preserves animation); else flattened. • SVG → kept as is if small; else rasterised. • other img → center cropped + downscaled to a 128² WebP. Build an icon data URL from raw bundled file bytes (Uint8Array/ArrayBuffer) or a string (SVG/text), inferring the MIME type from the filename. Used to auto detect an icon from an app's own files at ingest time. Fetch a remote image/video URL and embed it as a compact data URL (so the icon is self contained — no live remote dependency, no privacy leak at render time). Cross origin hosts that","contentHash":"8e05426ea6ee6d90a1f8c288e11809a37d9a38fbf2995389e3502b9136ad5a8d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/app-icon.md::0001","path":"webgpu-os/reference/shell/app-icon.md","title":"shell/app-icon.js","description":"","kind":"reference","source":"webgpu-os/shell/app-icon.js","updated":"","headings":["shell/app-icon.js","Functions","isImageIcon(v)","isVideoIcon(v)","isMediaIcon(v)","renderAppIcon(container, icon, { fallback = '▪' } = {})","async fileToIcon(file)","async bytesToIcon(bytes, filename = 'icon')","async urlToIcon(url, { fetchImpl = null } = {})","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"URL and embed it as a compact data URL (so the icon is self contained — no live remote dependency, no privacy leak at render time). Cross origin hosts that block CORS will reject; the caller should suggest downloading + uploading instead. Parameters: (string) — http(s) URL of an image/GIF/video <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"9e844daddf7b64d3a6787e78c699fbf2685015441863ab8a1c7ecb1ba9f952a3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/desktop/WindowLayoutEngine.md::0000","path":"webgpu-os/reference/shell/desktop/WindowLayoutEngine.md","title":"shell/desktop/WindowLayoutEngine.js","description":"","kind":"reference","source":"webgpu-os/shell/desktop/WindowLayoutEngine.js","updated":"","headings":["shell/desktop/WindowLayoutEngine.js","Functions","normalizeWorkArea(area = {})","computeLayoutRect(layout, inputArea, inputGap = 8)","detectEdgeLayout(pointer, inputArea, threshold = 34)","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Pure window layout geometry shared by the desktop shell and Theme Manager. Functions Compute a pixel rect for a named layout. Gaps are applied at outer and inner edges. Resolve an edge/corner pointer position into a snap layout. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"15cb193945895f35ed019f22fb861e00f09a6bbaeed34a844a1401092d3c66c8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/desktop/shellEnhancements.md::0000","path":"webgpu-os/reference/shell/desktop/shellEnhancements.md","title":"shell/desktop/shellEnhancements.js","description":"","kind":"reference","source":"webgpu-os/shell/desktop/shellEnhancements.js","updated":"","headings":["shell/desktop/shellEnhancements.js","Functions","installShellEnhancements(desktop)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/desktop/windowActions.md::0000","path":"webgpu-os/reference/shell/desktop/windowActions.md","title":"shell/desktop/windowActions.js","description":"","kind":"reference","source":"webgpu-os/shell/desktop/windowActions.js","updated":"","headings":["shell/desktop/windowActions.js","Functions","bindViewportReclamp(desktop)","unbindViewportReclamp(desktop)","minimizePanel(desktop, appId)","restorePanel(desktop, appId)","focusPanel(desktop, appId)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/gpu-ui/GPUTextRenderer.md::0000","path":"webgpu-os/reference/shell/gpu-ui/GPUTextRenderer.md","title":"shell/gpu-ui/GPUTextRenderer.js","description":"","kind":"reference","source":"webgpu-os/shell/gpu-ui/GPUTextRenderer.js","updated":"","headings":["shell/gpu-ui/GPUTextRenderer.js","Classes","class GPUTextRenderer","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GPUTextRenderer.js — Level 4 GPU native text. The browser gives us no GPU text primitive, so we rasterize each glyph ONCE with Canvas2D (white on transparent) and pack it into the engine's VGPUTextureAtlas. Drawing a string then becomes a run of tinted textured quads sampled from that atlas — fully GPU composited, no DOM. Glyphs are cached per (sizePx, weight, char). Whitespace stores advance only (no atlas region). Coordinates are CSS pixels, top left origin, matching the compositor's quad space. Classes GPUTextRenderer.js — Level 4 GPU native text. The browser gives us no GPU text primitive, so we rasterize each glyph ONCE with Canvas2D (white on transparent) and pack it into the engine's VGPUTextureAtlas. Drawing a string then becomes a run of tinted textured quads sampled from that atlas — fully GPU composited, no DOM. Glyphs are cached per (sizePx, weight, char). Whitespace stores advance only (no atlas region). Coordinates are CSS pixels, top left origin, matching the compositor's quad space. Method Signature Summary Rasterize (or fetch cached) a single glyph and pack it into the atlas. Total advance width of a string at the given size/weight. Emit glyph quads for a string. is the TOP of the line box. Draw text clipped/ellipsized to a max pixel width. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"30d8e3fead0e255d5c3632848ce7e00be5d70c6d9c54f26d936b03efdf7fd5cb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/gpu-ui/GPUUICompositor.md::0000","path":"webgpu-os/reference/shell/gpu-ui/GPUUICompositor.md","title":"shell/gpu-ui/GPUUICompositor.js","description":"","kind":"reference","source":"webgpu-os/shell/gpu-ui/GPUUICompositor.js","updated":"","headings":["shell/gpu-ui/GPUUICompositor.js","Classes","class GPUUICompositor","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":3,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GPUUICompositor.js — Level 4 GPU native UI compositor (3D by default). Renders the desktop's windows as tinted textured quads in a real perspective scene on a full screen WebGPU canvas. There is NO DOM in this path: text is rasterized into a glyph atlas (GPUTextRenderer) and everything — window surfaces, titlebars, glyphs — is one unified quad primitive. Camera: a perspective camera placed on +Z at d = (vpH/2)/tan(fov/2) so the z=0 plane maps 1:1 to CSS pixels. A window at z=0 with no tilt is therefore pixel perfect and fully usable, yet it's a genuine 3D quad — depth (z) and tilt are first class, focused windows come forward, and a subtle pointer parallax sells the 3D space. Coordinate spaces: window local px: origin top left, +x right, +y down (what widgets author) world units == CSS px, origin = viewport center, +Y up, desktop on z=0 per window model matrix maps local px → world (bakes centering + Y flip) Transparency uses painter's order (windows sorted far→near, widgets in emit order) so there is no depth buffer and no coplanar z fighting. Engine tech reused (no duplication): VirtualGPU (isolated instance), VGPUTextureAtlas (glyph/solid atlas), engine/core/math (camera + unproject). Classes Method Signature Summary True while the user is dragging or interacting with a window's content. Windows whose screen space AABB is within px of a screen point. Returns [{ id, title, bounds:{x,y,width,height}, distance, inside }]. (Windows map 1:1 to pixels at z≈0, so x/y/w/h are good screen bounds.) Topmost window id under a screen point (ray cast), or null. Solid filled (optionally rounded) rect using the white atlas region. Textured quad sampling the content atlas (layer 1). uv =","contentHash":"fd855d3310b6cf323b2eb5b9244e5575de14d33cb8e2718d2e66fc619fd14b13"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/gpu-ui/GPUUICompositor.md::0001","path":"webgpu-os/reference/shell/gpu-ui/GPUUICompositor.md","title":"shell/gpu-ui/GPUUICompositor.js","description":"","kind":"reference","source":"webgpu-os/shell/gpu-ui/GPUUICompositor.js","updated":"","headings":["shell/gpu-ui/GPUUICompositor.js","Classes","class GPUUICompositor","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":3,"text":"screen point (ray cast), or null. Solid filled (optionally rounded) rect using the white atlas region. Textured quad sampling the content atlas (layer 1). uv = {u0,v0,u1,v1}. Upload (or replace) a window's content into its OWN dedicated GPU texture. One texture per window (never shared) → windows can never leak into each other. Source = ImageBitmap/Canvas/Video frame. Get/create a per window content texture, recreating on size change. Drop a window's content texture (revert to native rendering). Drop all content textures (e.g. on GPU UI exit). Opaque backdrop hides the on screen DOM behind the canvas (live mode). Register a live <video source for a window; updated every frame. Make the SOLE live window (only one element can be restricted at a time with Element Capture). Previously live windows keep their last frame as a static texture (NOT destroyed). Copy each live window's current video frame into its OWN texture. Per window model matrix: local px (top left,+y down) → world (+Y up). Unproject a screen point into a world ray using the current viewProj. Project a screen point onto a specific window's plane → { lx, ly } or null. Topmost window hit by the pointer → { win, lx, ly } or null. Rasterize cursor sprites (arrow / hand / I beam) + a ripple ring into the atlas. Burst of staggered ripples on click (the 'spam splash'). Emit the screen space overlay layer: ripples then the virtual cursor (on top). <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS","contentHash":"1b3c20b5ebc26cabe2621f79bbad90acfee9fd26fe60e75736d6e7f1288497a5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/gpu-ui/GPUUICompositor.md::0002","path":"webgpu-os/reference/shell/gpu-ui/GPUUICompositor.md","title":"shell/gpu-ui/GPUUICompositor.js","description":"","kind":"reference","source":"webgpu-os/shell/gpu-ui/GPUUICompositor.js","updated":"","headings":["shell/gpu-ui/GPUUICompositor.js","Classes","class GPUUICompositor","Notes & Examples","Command Bus Pattern"],"chunkIndex":2,"chunkCount":3,"text":"Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d07d036d3c1bcde7cf50bb559b8e06affcb5e4954736b85e221dfd6d605c3d8d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/gpu-ui/GPUWindow.md::0000","path":"webgpu-os/reference/shell/gpu-ui/GPUWindow.md","title":"shell/gpu-ui/GPUWindow.js","description":"","kind":"reference","source":"webgpu-os/shell/gpu-ui/GPUWindow.js","updated":"","headings":["shell/gpu-ui/GPUWindow.js","Classes","class GPUWindow","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GPUWindow.js — a GPU native window for the Level 4 3D UI. The window is authored entirely in LOCAL pixel space (origin = top left, +x right, +y down) and emits tinted atlas quads through the compositor's sink. It knows nothing about the camera: the compositor builds a per window model matrix from this window's desktop space rect + 3D placement (z/tilt) and applies the shared viewProj. This keeps widgets camera agnostic so the same window is pixel perfect head on (z=0) or tilted in the immersive spread. Hit testing is done in local space (compositor unprojects the pointer ray onto the window plane, then asks the window what was hit). Classes Method Signature Summary Center of the window in desktop space (CSS px). Emit this window's geometry as local space quads. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"7ce7b4d76db8285cdcbff62424d4bfa7c0ccb8c17bd650ed7c59d367bae432db"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/gpu-ui/GPUWindowCapture.md::0000","path":"webgpu-os/reference/shell/gpu-ui/GPUWindowCapture.md","title":"shell/gpu-ui/GPUWindowCapture.js","description":"","kind":"reference","source":"webgpu-os/shell/gpu-ui/GPUWindowCapture.js","updated":"","headings":["shell/gpu-ui/GPUWindowCapture.js","Classes","class GPUWindowCapture","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: GPUWindowCapture.js — live per window content via the Element Capture API. Chrome 132+ lets us restrict a getDisplayMedia track to a single DOM element (RestrictionTarget + track.restrictTo), yielding a live MediaStream of just that element's rendered subtree (no occlusion / \"hall of mirrors\"). We take ONE getDisplayMedia('this tab') stream, clone its track per window, restrict each clone to that app's panel element, and feed a hidden <video . The GPU compositor then copyExternalImageToTexture()s each video frame into the window's content atlas region every frame → fully live GPU windows. Requirements (per spec) on each captured element: it must form a stacking context (isolation:isolate) and be flattened (transform style:flat) with an opaque background. Desktop applies these before attaching. Gracefully unsupported on non Chromium / older builds (supported=false) so callers fall back to extension snapshot, then native chrome. Classes GPUWindowCapture.js — live per window content via the Element Capture API. Chrome 132+ lets us restrict a getDisplayMedia track to a single DOM element (RestrictionTarget + track.restrictTo), yielding a live MediaStream of just that element's rendered subtree (no occlusion / \"hall of mirrors\"). We take ONE getDisplayMedia('this tab') stream, clone its track per window, restrict each clone to that app's panel element, and feed a hidden <video . The GPU compositor then copyExternalImageToTexture()s each video frame into the window's content atlas region every frame → fully live GPU windows. Requirements (per spec) on each captured element: it must form a stacking context (isolation:isolate) and be flattened (transform style:flat) with an opaque","contentHash":"3ef88bfa4d7188bfc56835612d1773253557a295fbf95d2d4bcea332d222d7e9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/gpu-ui/GPUWindowCapture.md::0001","path":"webgpu-os/reference/shell/gpu-ui/GPUWindowCapture.md","title":"shell/gpu-ui/GPUWindowCapture.js","description":"","kind":"reference","source":"webgpu-os/shell/gpu-ui/GPUWindowCapture.js","updated":"","headings":["shell/gpu-ui/GPUWindowCapture.js","Classes","class GPUWindowCapture","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"Requirements (per spec) on each captured element: it must form a stacking context (isolation:isolate) and be flattened (transform style:flat) with an opaque background. Desktop applies these before attaching. Gracefully unsupported on non Chromium / older builds (supported=false) so callers fall back to extension snapshot, then native chrome. Method Signature Summary Element Capture restrictTo() REJECTS on tracks that have clones (Chromium issue 41482026), so we keep exactly ONE track and never clone. Acquire (once) the shared display capture stream + shared video. Prompts. Restrict the single shared track to one element's rendered subtree (Element Capture). One element at a time; re call to switch. Never used on a cloned track (Chromium rejects), which is why we keep ONE track. Remove any element restriction (back to whole tab). Wait for the next decoded video frame (bounded). Grab ONE isolated frame of : restrict the track to it, wait for a fresh frame, snapshot to an ImageBitmap. Element Capture guarantees the frame contains only that element's subtree → no overlap bleed. Grab a whole tab frame (removes any restriction first). Used by the generic viewport capture path. No extension required. Stop everything including the shared display stream. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8b426c64eaf424191408f064b9749d09033dffc4a32bd896b0fdc050a02ad622"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/immersive/Immersive3DCompositor.md::0000","path":"webgpu-os/reference/shell/immersive/Immersive3DCompositor.md","title":"shell/immersive/Immersive3DCompositor.js","description":"","kind":"reference","source":"webgpu-os/shell/immersive/Immersive3DCompositor.js","updated":"","headings":["shell/immersive/Immersive3DCompositor.js","Classes","class Immersive3DCompositor","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Immersive3DCompositor.js — Level 3 GPU compositor (Exposé style 3D desktop). Captures every live DOM panel to a GPU texture (via PanelCapture), then renders each as a textured quad in a perspective 3D scene on a full screen WebGPU overlay canvas. ALL matrix/camera math comes from the engine's direct named shader math library (engine/core/math) — we only add the WebGPU plumbing and the DOM→bitmap bridge the browser doesn't provide. Coordinate system (pixel perfect at immersion=0): World units == CSS pixels. Origin at viewport center, +Y up, desktop on z=0. Camera sits on +Z at distance d = (vpH/2)/tan(fov/2) so the z=0 plane fills the viewport exactly. A panel quad at z=0 therefore maps 1:1 to its DOM rect. immersion ∈ [0,1] pushes panels apart in Z by stacking order and adds a gentle mouse driven camera yaw/pitch for parallax — the \"3D world\" feel. Lifecycle: const c = new Immersive3DCompositor({ device, getPanels }); c.mount(); // create overlay canvas + pipeline await c.enter(); // capture panels, hide DOM, animate in await c.exit(panelId?); // animate out, restore DOM (focus panelId if given) c.unmount(); // full teardown Engine math used: mat4Identity, mat4Translate, mat4Scale, mat4Multiply, mat4LookAt, mat4PerspectiveDegWebGPU. Classes Method Signature Summary Capture all live panels, hide the DOM workspace, animate into 3D view. Animate out of 3D view, restore the DOM. If panelId given, that panel is focused/raised on exit (Exposé style selection). Crop one panel's region out of the full viewport screenshot and upload it. Default panel source: scan the DOM for Plauna DOM panels. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus","contentHash":"4073c1e6dee7725f673fefb536648aab4ae51638354982f9e76df82be95e821d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/immersive/Immersive3DCompositor.md::0001","path":"webgpu-os/reference/shell/immersive/Immersive3DCompositor.md","title":"shell/immersive/Immersive3DCompositor.js","description":"","kind":"reference","source":"webgpu-os/shell/immersive/Immersive3DCompositor.js","updated":"","headings":["shell/immersive/Immersive3DCompositor.js","Classes","class Immersive3DCompositor","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"it. Default panel source: scan the DOM for Plauna DOM panels. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"7914a9883b974776508de99a0c599945606084a44f2819026a546733ea8a068a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/immersive/PanelCapture.md::0000","path":"webgpu-os/reference/shell/immersive/PanelCapture.md","title":"shell/immersive/PanelCapture.js","description":"","kind":"reference","source":"webgpu-os/shell/immersive/PanelCapture.js","updated":"","headings":["shell/immersive/PanelCapture.js","Classes","class PanelCapture","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ⚠️ SUPERSEDED for GPU use. The bitmaps this produces are PERMANENTLY cross origin tainted (SVG <foreignObject rule) and are REJECTED by . The immersive compositor now captures the viewport via the extension bridge (chrome.tabs.captureVisibleTab → Desktop. captureViewport), which yields untainted, GPU uploadable pixels. This file is kept only for display only canvas uses (which tolerate taint). PanelCapture.js — live DOM element → ImageBitmap via SVG foreignObject. Everything else in the immersive compositor (3D quads, perspective camera, texture upload) is done with the engine's shader math + WebGPU stack. But the browser provides no API to turn an arbitrary <div (text + Plauna widgets) into pixels — only accepts <img /<canvas /<video /Blob. The zero dependency route is SVG <foreignObject : clone the element, inline its computed styles (a standalone SVG blob has no access to the page's stylesheets), serialize to XHTML, wrap in an SVG, rasterize through an <img , then . The resulting bitmap is uploaded by the engine's TextureManager ( ). Known limitations (inherent to foreignObject, documented for callers): <canvas /<video children don't serialize (their live pixels are lost). Cross origin images taint and are skipped by the browser. is not honored inside foreignObject. Custom web fonts must already be loaded (we don't embed font files). Usage: const cap = new PanelCapture(); const bitmap = await cap.capture(panel.element, { scale: devicePixelRatio }); // → upload bitmap via engine TextureManager. uploadBitmap(bitmap, label) bitmap.close(); Classes Method Signature Summary Capture a DOM element to an ImageBitmap. Walk source and clone trees in lockstep, baking the source's","contentHash":"4f4d4307f2474e539c27534ed27c61e980d214e3637f6fb83a1f86f70c217547"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/immersive/PanelCapture.md::0001","path":"webgpu-os/reference/shell/immersive/PanelCapture.md","title":"shell/immersive/PanelCapture.js","description":"","kind":"reference","source":"webgpu-os/shell/immersive/PanelCapture.js","updated":"","headings":["shell/immersive/PanelCapture.js","Classes","class PanelCapture","Notes & Examples","Command Bus Pattern"],"chunkIndex":1,"chunkCount":2,"text":"label) bitmap.close(); Classes Method Signature Summary Capture a DOM element to an ImageBitmap. Walk source and clone trees in lockstep, baking the source's computed style onto each clone node as an inline attribute. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"0a314bd85d7ed8e10e415b36059c05a8be6b48a25eb613c930134e4828ecc8de"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/overlay/AIOverlay.md::0000","path":"webgpu-os/reference/shell/overlay/AIOverlay.md","title":"shell/overlay/AIOverlay.js","description":"","kind":"reference","source":"webgpu-os/shell/overlay/AIOverlay.js","updated":"","headings":["shell/overlay/AIOverlay.js","Classes","class AIOverlay","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AIOverlay.js — shell owned approval and elicitation popup. The surface is hidden unless the shared ElicitationManager has a pending request. It deliberately has no ambient bar, chat console, task browser, or timeline. Approval notes are bound to the exact request and elicitation and recorded before the resumed task can observe the decision promise. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"db87c858d7ebf85cefbc9bc3938493d766e5d6e20c17d09e70fbace68a949c9d"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/overlay/AdaptationReviewPolicy.md::0000","path":"webgpu-os/reference/shell/overlay/AdaptationReviewPolicy.md","title":"shell/overlay/AdaptationReviewPolicy.js","description":"","kind":"reference","source":"webgpu-os/shell/overlay/AdaptationReviewPolicy.js","updated":"","headings":["shell/overlay/AdaptationReviewPolicy.js","Functions","isTrustedAdaptationReview(elicitation = {})","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: The shell gives adaptation reviews distinct trusted UI only when the request is the exact AI Echo operation. Caller controlled schema labels alone are never enough to obtain privileged wording or non blocking decision behavior. Functions The shell gives adaptation reviews distinct trusted UI only when the request is the exact AI Echo operation. Caller controlled schema labels alone are never enough to obtain privileged wording or non blocking decision behavior. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"8753d7efb5eca588184f055bd35f56b4f9e3afa052b9deec010138f99e4e6dbf"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/overlay/ApprovalCard.md::0000","path":"webgpu-os/reference/shell/overlay/ApprovalCard.md","title":"shell/overlay/ApprovalCard.js","description":"","kind":"reference","source":"webgpu-os/shell/overlay/ApprovalCard.js","updated":"","headings":["shell/overlay/ApprovalCard.js","Functions","createApprovalCard(elicitation, { onApprove, onDeny })","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ApprovalCard.js — overlay card for a pending AI tool call approval. Driven through the SAME ElicitationManager as questions (an approval is a boolean elicitation whose schema carries { kind:'approval', toolName, params, risk }) — no parallel approval queue. Parameters are shown through ParameterPreviewer (Phase 5) so secrets are masked before they ever hit the DOM. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"17b744dcbef297b49049fe95a4254dd56c74bf5e1b5eef719b1e2678ad7e744e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/overlay/ElicitationCard.md::0000","path":"webgpu-os/reference/shell/overlay/ElicitationCard.md","title":"shell/overlay/ElicitationCard.js","description":"","kind":"reference","source":"webgpu-os/shell/overlay/ElicitationCard.js","updated":"","headings":["shell/overlay/ElicitationCard.js","Functions","taskCheckpointChoices(schema)","createElicitationCard(elicitation, { onRespond, onDecline })","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: ElicitationCard.js — overlay card for a mid task AI question to the user (Phase 4 ElicitationManager). Renders a text input, or buttons when the schema declares an enum of options. Answer → respond(); dismiss → decline(). Functions Validate the kernel owned checkpoint envelope before exposing choices. The UI does not infer choices or authority from prompts. It only renders the exact bounded values supplied by the active task elicitation. Parameters: (object null) — No description in source JSDoc. Returns: null} <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"4f8ebef4102994caaaa2eb41fbd010e59aa1f5ace3c8cedee54788ee9d3aa644"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/start-menu/actions.md::0000","path":"webgpu-os/reference/shell/start-menu/actions.md","title":"shell/start-menu/actions.js","description":"","kind":"reference","source":"webgpu-os/shell/start-menu/actions.js","updated":"","headings":["shell/start-menu/actions.js","Functions","makeDraggable(menu, node, app)","launchApp(menu, app)","addToDesktop(menu, appId)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/start-menu/apps.md::0000","path":"webgpu-os/reference/shell/start-menu/apps.md","title":"shell/start-menu/apps.js","description":"","kind":"reference","source":"webgpu-os/shell/start-menu/apps.js","updated":"","headings":["shell/start-menu/apps.js","Functions","visibleApps()","searchApps(query)","groupAppsByCategory(apps)","categoryLabel(category)","categoryIcon(category)","appMap(apps)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/start-menu/constants.md::0000","path":"webgpu-os/reference/shell/start-menu/constants.md","title":"shell/start-menu/constants.js","description":"","kind":"reference","source":"webgpu-os/shell/start-menu/constants.js","updated":"","headings":["shell/start-menu/constants.js","Constants","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Constants <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"a099ac50be4ac76dabc8d451eb66d578a0bb24113a9fe20b32dd2028f941eeb5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/start-menu/contextMenu.md::0000","path":"webgpu-os/reference/shell/start-menu/contextMenu.md","title":"shell/start-menu/contextMenu.js","description":"","kind":"reference","source":"webgpu-os/shell/start-menu/contextMenu.js","updated":"","headings":["shell/start-menu/contextMenu.js","Functions","showContextMenu(menu, event, app)","dismissContextMenu(menu)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/start-menu/dom.md::0000","path":"webgpu-os/reference/shell/start-menu/dom.md","title":"shell/start-menu/dom.js","description":"","kind":"reference","source":"webgpu-os/shell/start-menu/dom.js","updated":"","headings":["shell/start-menu/dom.js","Functions","el(tag, options = {}, children = [])","append(parent, children = [])","clear(node)","sectionTitle(label, action = null)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/start-menu/state.md::0000","path":"webgpu-os/reference/shell/start-menu/state.md","title":"shell/start-menu/state.js","description":"","kind":"reference","source":"webgpu-os/shell/start-menu/state.js","updated":"","headings":["shell/start-menu/state.js","Functions","loadPinned()","savePinned(pinned)","loadRecent()","saveRecent(recent)","loadCollapsed()","saveCollapsed(collapsed)","trackRecent(recent, appId)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/start-menu/vfsPins.md::0000","path":"webgpu-os/reference/shell/start-menu/vfsPins.md","title":"shell/start-menu/vfsPins.js","description":"","kind":"reference","source":"webgpu-os/shell/start-menu/vfsPins.js","updated":"","headings":["shell/start-menu/vfsPins.js","Functions","writePinFile(menu, appId)","deletePinFile(menu, appId)","async initVFSPins(menu)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/start-menu/views.md::0000","path":"webgpu-os/reference/shell/start-menu/views.md","title":"shell/start-menu/views.js","description":"","kind":"reference","source":"webgpu-os/shell/start-menu/views.js","updated":"","headings":["shell/start-menu/views.js","Functions","buildShell(menu)","renderAll(menu)","renderSearch(menu, query)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/taskbar/appButtons.md::0000","path":"webgpu-os/reference/shell/taskbar/appButtons.md","title":"shell/taskbar/appButtons.js","description":"","kind":"reference","source":"webgpu-os/shell/taskbar/appButtons.js","updated":"","headings":["shell/taskbar/appButtons.js","Functions","mountAppsArea(taskbar)","bindProcessButtons(taskbar)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/taskbar/devBadge.md::0000","path":"webgpu-os/reference/shell/taskbar/devBadge.md","title":"shell/taskbar/devBadge.js","description":"","kind":"reference","source":"webgpu-os/shell/taskbar/devBadge.js","updated":"","headings":["shell/taskbar/devBadge.js","Functions","mountDevBadge(taskbar)","bindModeBadge(taskbar)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/taskbar/showDesktop.md::0000","path":"webgpu-os/reference/shell/taskbar/showDesktop.md","title":"shell/taskbar/showDesktop.js","description":"","kind":"reference","source":"webgpu-os/shell/taskbar/showDesktop.js","updated":"","headings":["shell/taskbar/showDesktop.js","Functions","mountShowDesktop(taskbar)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: showDesktop.js — the far right \"Show desktop\" sliver (Windows style). Click once to minimize every open window; click again to restore the same set. Mirrors the Win+D peek/minimize all corner button. We track which panels are currently minimized via the kernel's panel events so the toggle stays correct even as the user opens/closes/minimizes windows manually. Functions showDesktop.js — the far right \"Show desktop\" sliver (Windows style). Click once to minimize every open window; click again to restore the same set. Mirrors the Win+D peek/minimize all corner button. We track which panels are currently minimized via the kernel's panel events so the toggle stays correct even as the user opens/closes/minimizes windows manually. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"bed94a55561c4b1e6341b7d792d28a7198366dd7f051dcb9a7be3d04c578add5"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/taskbar/startButton.md::0000","path":"webgpu-os/reference/shell/taskbar/startButton.md","title":"shell/taskbar/startButton.js","description":"","kind":"reference","source":"webgpu-os/shell/taskbar/startButton.js","updated":"","headings":["shell/taskbar/startButton.js","Functions","mountStartButton(taskbar)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"6cc5c2e8eac2839020efc508299a3af67af29281c460edc1f21da75e30d98ab7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/tray/system-tray.md::0000","path":"webgpu-os/reference/shell/tray/system-tray.md","title":"shell/tray/system-tray.js","description":"","kind":"reference","source":"webgpu-os/shell/tray/system-tray.js","updated":"","headings":["shell/tray/system-tray.js","Functions","createSystemTray(kernel)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: system tray.js — the notification area icon strip. Renders app registered status icons (kernel.tray) inline, collapsing extras into an overflow popup (the \"^\" chevron) just like Windows' notification area. Left click runs the icon's onClick; right click opens its menu (if any). createSystemTray(kernel) { el, dispose } Functions <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d7a71f88dc02aa0ea88d5ba5890978b0cde4aaae5c96008421df75e4efb626cc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/shell/tray/tray-widgets.md::0000","path":"webgpu-os/reference/shell/tray/tray-widgets.md","title":"shell/tray/tray-widgets.js","description":"","kind":"reference","source":"webgpu-os/shell/tray/tray-widgets.js","updated":"","headings":["shell/tray/tray-widgets.js","Functions","makeStatPill(modClass = '')","makeIconButton(icon, tooltip, onClick)","makeBellButton(onClick)","makeClockButton(onClick)","Notes & Examples","Command Bus Pattern"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: tray widgets.js — stateless builders for the status tray DOM widgets. Un nested from StatusTray so the tray class stays a thin orchestrator. Each factory returns plain DOM (plus refs where the tray needs to update them); none of them hold tray state. Functions Stat pill with a status dot + text (used for GPU / FPS readouts). Square icon button (search / quick settings / bell). Bell button with an unread badge. Returns { wrap, badge, setCount }. Clock button (time + date stacked). Returns { btn, tick, dispose }. refreshes the displayed time; clears its interval. <! HUMAN NOTES Notes & Examples Command Bus Pattern The OS uses a capability gated command bus for inter app and system communication. Apps register command handlers; the kernel routes commands based on capabilities. Commands can be local (same app), cross app (with permission), or system level (elevated). Example: Command registration and invocation See also: WebGPU OS Architecture · Security Model","contentHash":"d521d573f0dbc81866a870343240e1006f998660f4f42322369b13c8449f1858"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/AppDataReadbackService.md::0000","path":"webgpu-os/reference/storage/AppDataReadbackService.md","title":"storage/AppDataReadbackService.js","description":"","kind":"reference","source":"webgpu-os/storage/AppDataReadbackService.js","updated":"","headings":["storage/AppDataReadbackService.js","Classes","class AppDataReadbackService","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: OS wide catalog and encrypted readback coordinator for durable app data. Classes Method Signature Summary Return immutable, content free output contracts for index rebuilding. Re exports , <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"d0ca5dbad17a86b667e9400a0f337dbb20cfa545ca1d5963c340730752bb7dd8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/AppSandbox.md::0000","path":"webgpu-os/reference/storage/AppSandbox.md","title":"storage/AppSandbox.js","description":"","kind":"reference","source":"webgpu-os/storage/AppSandbox.js","updated":"","headings":["storage/AppSandbox.js","Classes","class AppSandbox","Functions","createSandboxSyscalls(sandbox)","Notes & Examples"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: AppSandbox.js — Per app isolated, AES 256 GCM encrypted IndexedDB storage. Each app runs in its own IndexedDB database: os.sandbox.<appId completely separate from the kernel database (os.kernel). ── Isolation guarantees ───────────────────────────────────────────────────── • Different IDB database per app → app A can never query app B's IDB. • AES 256 GCM encryption at rest → even if raw IDB is accessed directly, values are unreadable without the derived key. • Key is PBKDF2 derived from: OS fingerprint (ECDSA public key hash) + appId → keys are device bound AND app bound; exporting the raw IDB to another OS instance or another appId produces only garbage. ── API ────────────────────────────────────────────────────────────────────── const sb = new AppSandbox('os.calculator', cryptoDriver); await sb.init(); await sb.set('lastResult', 42); // encrypt + store const v = await sb.get('lastResult'); // decrypt + return (null if missing) const keys = await sb.list(); // returns key names (not values) await sb.delete('lastResult'); await sb.clear(); // wipe all of this app's data const info = sb.info(); // { appId, dbName, encrypted: true } ── Syscall surface (apps see syscalls.sandbox. ) ──────────────────────────── Created by createSandboxSyscalls(sandbox) exported below. Apps never receive a reference to AppSandbox directly. Classes Method Signature Summary Open the IDB database and derive the AES key. Must be called once before use. Read and decrypt a value. Returns null if key is absent or decryption fails. Strict read for authority bearing callers. Missing and corrupt records are distinct: corruption is never converted into a blank value. Exact read with an opaque ciphertext","contentHash":"89187f25ff2acabec9bbf4bfbb51a77601d3bb42d16a26f36e63d546c1d41bfc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/AppSandbox.md::0001","path":"webgpu-os/reference/storage/AppSandbox.md","title":"storage/AppSandbox.js","description":"","kind":"reference","source":"webgpu-os/storage/AppSandbox.js","updated":"","headings":["storage/AppSandbox.js","Classes","class AppSandbox","Functions","createSandboxSyscalls(sandbox)","Notes & Examples"],"chunkIndex":1,"chunkCount":2,"text":"for authority bearing callers. Missing and corrupt records are distinct: corruption is never converted into a blank value. Exact read with an opaque ciphertext version token for conditional writes. Strict exact key batch read in one IndexedDB transaction. Encrypt and store a value. Value must be JSON serialisable. Encrypt and store multiple values, then publish one readback snapshot. Atomically apply a batch only while one exact logical record is unchanged. Return all stored key names (not values). Wipe all keys in this app's sandbox. Force the encrypted Files visible container to match the current IDB. Restore the encrypted container. Existing data requires an exact phrase. Functions Wrap an AppSandbox as the namespace for an app. Apps receive this — they never get a reference to the AppSandbox itself. Usage in app code: await syscalls.sandbox.set('prefs', { theme: 'dark' }); const p = await syscalls.sandbox.get('prefs'); const keys = await syscalls.sandbox.list(); await syscalls.sandbox.delete('prefs'); await syscalls.sandbox.clear(); const { appId, dbName, encrypted } = syscalls.sandbox.info(); <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"aea0bf233e75c7a8a9fd530884817a79bca0a73a8460b4261d0e1d504289005b"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/AppSettingsFile.md::0000","path":"webgpu-os/reference/storage/AppSettingsFile.md","title":"storage/AppSettingsFile.js","description":"","kind":"reference","source":"webgpu-os/storage/AppSettingsFile.js","updated":"","headings":["storage/AppSettingsFile.js","Functions","async readAppSettings(syscalls, { migrate = true } = {})","async writeAppSettings(syscalls, value)","async patchAppSetting(syscalls, appId, value)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Shared, Files visible settings document used by OS apps. Functions Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"c7a364b750eb6450eae1ecd898bb190b2d3e69052af21dbaed96b0a76a6383c1"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/BoundedTraversal.md::0000","path":"webgpu-os/reference/storage/BoundedTraversal.md","title":"storage/BoundedTraversal.js","description":"","kind":"reference","source":"webgpu-os/storage/BoundedTraversal.js","updated":"","headings":["storage/BoundedTraversal.js","Classes","class StorageTraversalLimitError extends Error","Functions","isIgnoredEntry(name, rules = [], path = '')","async walkPaged(rootPath, listPage, options = {}, defaultIgnore = [])","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Functions Breadth first, paged traversal shared by OPFS and mounted folders. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"22584514745361e1627dc488349d78a72288d3bac8f39a6498b0cb0ff49bb61e"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/CacheDriver.md::0000","path":"webgpu-os/reference/storage/CacheDriver.md","title":"storage/CacheDriver.js","description":"","kind":"reference","source":"webgpu-os/storage/CacheDriver.js","updated":"","headings":["storage/CacheDriver.js","Classes","class CacheDriver","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: CacheDriver.js — Cache API wrapper for rebuildable assets. Used for content that can always be re downloaded/rebuilt: CDN assets and web dependencies Downloaded package chunks (sha256 keyed) App bundles and compiled shaders Prefetched update manifests Keys are URLs or opaque cache keys like \"chunk:sha256 abc123\". All methods are async. Classes Method Signature Summary Get a cached response body as text. Returns null if not cached. Get a cached response as ArrayBuffer. Returns null if not cached. Store a string or ArrayBuffer under the given key. Check if a key is cached. List all keys in a named cache. Delete an entire named cache. Get storage estimate for cached data. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"731b35e04992749da15094c01d83707606c368f58e3f318098cd64572308920f"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/IndexedDBDriver.md::0000","path":"webgpu-os/reference/storage/IndexedDBDriver.md","title":"storage/IndexedDBDriver.js","description":"","kind":"reference","source":"webgpu-os/storage/IndexedDBDriver.js","updated":"","headings":["storage/IndexedDBDriver.js","Classes","class IndexedDBDriverError extends Error","class IndexedDBBlockedError extends IndexedDBDriverError","class IndexedDBStaleConnectionError extends IndexedDBDriverError","class IndexedDBRecordVersionError extends IndexedDBDriverError","class IndexedDBDriver","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: IndexedDBDriver.js — IndexedDB backed metadata store. The driver waits for transaction completion, closes connections when another tab upgrades the database, and refuses to reuse such stale connections. Store owners may opt into per record schema metadata and synchronous migrations; unregistered stores retain their original record shape. Classes Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary ${store} record Constants — IndexedDBDriver.js — IndexedDB backed metadata store. The driver waits for transaction completion, closes connections when another tab upgrades the database, and refuses to reuse such stale connections. Store owners may opt into per record schema metadata and synchronous migrations; unregistered stores retain their original record shape. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9bea9539780a9b85e9ca248cd2bb15a675af3b0c805228a1b8b3eb890f1e9f60"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/KernelMetadataReadback.md::0000","path":"webgpu-os/reference/storage/KernelMetadataReadback.md","title":"storage/KernelMetadataReadback.js","description":"","kind":"reference","source":"webgpu-os/storage/KernelMetadataReadback.js","updated":"","headings":["storage/KernelMetadataReadback.js","Classes","class KernelMetadataReadback","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Encrypted readback snapshot for the structured metadata DB. Non extractable CryptoKeys and native directory handles are represented by safe descriptors; their browser security boundary is intentionally retained. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"7cceba228b6d724083b93d69c92f67b5e9c3a3dba4a60031dfa20b28cdaa6eb0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/LegacyStorageReadback.md::0000","path":"webgpu-os/reference/storage/LegacyStorageReadback.md","title":"storage/LegacyStorageReadback.js","description":"","kind":"reference","source":"webgpu-os/storage/LegacyStorageReadback.js","updated":"","headings":["storage/LegacyStorageReadback.js","Classes","class LegacyStorageReadback","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: LegacyStorageReadback.js — encrypted VFS readback for durable localStorage. Older OS modules still use localStorage directly. Rewriting every caller at once would create migration risk, so this service mirrors the durable keys into an AppSandbox. AppSandbox then publishes one authenticated, device bound ciphertext container under /user/app data. Raw names and values never appear in Files. OPFS fallback records and rebuildable caches are deliberately excluded because their authoritative data already lives elsewhere. Classes Method Signature Summary Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9e5e8b00ab38fb8dfa4cae1b77e038f8baccc166a7f126a41dccb31acccdd477"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/MountDriver.md::0000","path":"webgpu-os/reference/storage/MountDriver.md","title":"storage/MountDriver.js","description":"","kind":"reference","source":"webgpu-os/storage/MountDriver.js","updated":"","headings":["storage/MountDriver.js","Classes","class MountDriver","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: MountDriver.js — File System Access API driver for user mounted folders. Manages persistent directory handles for: /mnt/engine — local engine source folder /mnt/assets — local asset folder /mnt/projects — local projects folder /mnt/apps — local user app folder Directory handles are persisted via IndexedDB (idbDriver) so mounts survive page reloads without re prompting the user (if permission granted). All read/write methods are async. Classes Method Signature Summary Open a directory picker and mount it at the given name. Restore persisted mount handles (call on OS boot). Request permission for an already stored mount handle. Prompts the user if permission was not already granted. Parse /mnt/<name /... → { mountName, relativeParts } Resolve a FileSystemFileHandle, optionally creating parent dirs and the file. Resolve a FileSystemDirectoryHandle, optionally creating along the path. Return { parent: DirectoryHandle, name: string } for the leaf of a path. Return the native File/Blob so callers can avoid a full memory copy. Move/rename within or across mounts. The FSAA has no rename primitive, so we copy then delete. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"07c12c07fce986db4a721f6e835702978581ee9111b77099e5e6f21858e98523"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/MountGraph.md::0000","path":"webgpu-os/reference/storage/MountGraph.md","title":"storage/MountGraph.js","description":"","kind":"reference","source":"webgpu-os/storage/MountGraph.js","updated":"","headings":["storage/MountGraph.js","Classes","class MountGraph","Re-exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Ordered provider layers with GMod style read fallthrough and one write layer. Method Signature Summary Re exports <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"449bf763dd31cfb77b28799108cc586ac0a29ccf5b8bb84cd6a5c902eb6e91c7"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/MountRegistry.md::0000","path":"webgpu-os/reference/storage/MountRegistry.md","title":"storage/MountRegistry.js","description":"","kind":"reference","source":"webgpu-os/storage/MountRegistry.js","updated":"","headings":["storage/MountRegistry.js","Classes","class MountAliasError extends Error","class MountRegistry","Functions","validateMountAlias(value)","mountAliasKey(value)","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Case insensitive registry for provider neutral mount metadata. Method Signature Summary Functions Return a portable, single segment mount alias without changing its case. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"da3e53c6eeb032175d68d041ed3810a404bd01ddb8c24c9b41987ae24abd4be2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/OPFSDriver.md::0000","path":"webgpu-os/reference/storage/OPFSDriver.md","title":"storage/OPFSDriver.js","description":"","kind":"reference","source":"webgpu-os/storage/OPFSDriver.js","updated":"","headings":["storage/OPFSDriver.js","Classes","class OPFSDriver","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes OPFSDriver.js — Origin Private File System driver. Uses navigator.storage.getDirectory() to provide a private OS disk that: survives page reloads and browser restarts is not subject to the 5 MB localStorage quota supports byte level writes and sync access from workers is not visible or accessible to other origins All methods are async. Paths are POSIX style: /os/state/foo.json Method Signature Summary Return the native File/Blob without copying it through an ArrayBuffer. Stream a Blob/File directly into OPFS without base64 or an eager byte copy. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"5c4e419f0588ef60f384f94d5ec1b2f44090846a37ab94de30cbf8ec1d4cfcaa"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/RealmContentStore.md::0000","path":"webgpu-os/reference/storage/RealmContentStore.md","title":"storage/RealmContentStore.js","description":"","kind":"reference","source":"webgpu-os/storage/RealmContentStore.js","updated":"","headings":["storage/RealmContentStore.js","Classes","class RealmContentStore","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"eff08aa0c2c3ea21581aee347e44b6e1c8547b0dbc0b295d84a2d0778425358a"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/StorageCoordination.md::0000","path":"webgpu-os/reference/storage/StorageCoordination.md","title":"storage/StorageCoordination.js","description":"","kind":"reference","source":"webgpu-os/storage/StorageCoordination.js","updated":"","headings":["storage/StorageCoordination.js","Classes","class StorageCoordinationUnavailableError extends Error","class StorageCoordination","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Same origin storage coordination shared by tabs and workers. BroadcastChannel keeps observers coherent; Web Locks serializes lifecycle mutations. Both degrade to an in process queue when unavailable. Classes Method Signature Summary Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"9f0f6d9128621449da88ee2a7c016501173012775850f6a19a70fe90ae606ec3"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/StorageManager.md::0000","path":"webgpu-os/reference/storage/StorageManager.md","title":"storage/StorageManager.js","description":"","kind":"reference","source":"webgpu-os/storage/StorageManager.js","updated":"","headings":["storage/StorageManager.js","Classes","class StorageAtomicConflictError extends Error","class StorageAtomicUnsupportedError extends Error","class StorageAtomicOutcomeUnknownError extends Error","class StorageAtomicAbortError extends Error","class StorageQuotaError extends Error","class RecycleBinSafetyError extends Error","class StorageContractError extends Error","class StorageManager","Constants","Notes & Examples","Backup restore authority boundary"],"chunkIndex":0,"chunkCount":2,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: StorageManager.js — unified storage facade. Routes filesystem paths to the correct backend: /os/ → OPFSDriver (OS internal files, packages, patches, logs) /user/ → OPFSDriver (user documents, settings, projects) /run/ → OPFSDriver (ephemeral runtime state — cleared on boot) /mnt/ → MountDriver (user mounted native folders via FSAA) /cache/ → CacheDriver (rebuildable assets, package chunks) (other) → OPFSDriver (fallback) IndexedDB (idbDriver) is NOT path routed — it is accessed directly by structured subsystems (PackageManager, PermissionManager, etc.). This is the backend for kernel/VirtualFS.js (which keeps its sync friendly public API and delegates here for persistence). Classes Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary Method Signature Summary True if the path lives in the compiled in, immutable /system tree. True if the path may be created/edited/deleted by the user. Throw a clear error when a mutating op targets the immutable system tree. Read a file without UTF 8 decoding. Required for PDFs and other binary assets. Read as a Blob/File without forcing an eager ArrayBuffer copy when supported. Compare and swap one exact text file under the same global mutation lock used by every cooperating StorageManager mutation. must describe either an absent path or the SHA 256 of the current exact UTF 8 text. A mismatch never reaches the backend write. Compare and swap exact binary bytes under the global mutation lock used by writeAtomic(). The caller buffer is copied before the first await, and the persisted bytes are hashed and compared byte for byte","contentHash":"5dbbd661e5ce0b9fedc077d888d596c5afdafb113c8ae7f265923ccecc2be550"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/StorageManager.md::0001","path":"webgpu-os/reference/storage/StorageManager.md","title":"storage/StorageManager.js","description":"","kind":"reference","source":"webgpu-os/storage/StorageManager.js","updated":"","headings":["storage/StorageManager.js","Classes","class StorageAtomicConflictError extends Error","class StorageAtomicUnsupportedError extends Error","class StorageAtomicOutcomeUnknownError extends Error","class StorageAtomicAbortError extends Error","class StorageQuotaError extends Error","class RecycleBinSafetyError extends Error","class StorageContractError extends Error","class StorageManager","Constants","Notes & Examples","Backup restore authority boundary"],"chunkIndex":1,"chunkCount":2,"text":"global mutation lock used by writeAtomic(). The caller buffer is copied before the first await, and the persisted bytes are hashed and compared byte for byte before the immutable receipt is returned. Persist a Blob/File directly; avoids base64 and avoids File.arrayBuffer(). Copy files or complete directory trees across OPFS and native mounts. Return an immutable observation token suitable for compare and swap edits. Constants <! HUMAN NOTES Notes & Examples Backup restore authority boundary Portable and native backups include checksummed files, but their ordinary merge and replace restore paths never import or . Replace mode preserves the active kernel owned records while removing and restoring ordinary user data. Preview and restore results expose and ; replace receipts also expose . Restoring those control records requires a separate kernel authorized recovery workflow.","contentHash":"22496d744970330285c27908def63bde1c0f936c1ba25a93ca364dd3da0722b9"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/StorageSafety.md::0000","path":"webgpu-os/reference/storage/StorageSafety.md","title":"storage/StorageSafety.js","description":"","kind":"reference","source":"webgpu-os/storage/StorageSafety.js","updated":"","headings":["storage/StorageSafety.js","Classes","class StorageContentValidationError extends Error","Functions","detectSecrets(value)","assertNoSecrets(value, { path = 'managed file' } = {})","async validateImportedFile(blob, name = '')","async safePreviewBlob(blob, name = '')","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Browser file validation and secret detection. Files remain untrusted after validation. Classes Method Signature Summary Functions <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"fabbdb898611310029c64eaba893c33fc1e51b3c0931f6db29e6b676c9ce3fa4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/StorageWorker.md::0000","path":"webgpu-os/reference/storage/StorageWorker.md","title":"storage/StorageWorker.js","description":"","kind":"reference","source":"webgpu-os/storage/StorageWorker.js","updated":"","headings":["storage/StorageWorker.js","Exports","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Exports No ES module exports detected in this file. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"31ed7478300acb06b7ad568378ff85feabdc9e8462a7ec419e8ba87ee8baa2bb"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/StorageWorkerClient.md::0000","path":"webgpu-os/reference/storage/StorageWorkerClient.md","title":"storage/StorageWorkerClient.js","description":"","kind":"reference","source":"webgpu-os/storage/StorageWorkerClient.js","updated":"","headings":["storage/StorageWorkerClient.js","Classes","class StorageWorkerUnavailableError extends Error","class StorageWorkerClient","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: No file level description found in source. Add one as a leading JSDoc comment, or document it below. Classes Method Signature Summary Method Signature Summary <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"b6077759142dd24da6d44d97eb7aeafae0a7d1dbb6963a70461335c7ba4855fc"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/SystemFS.md::0000","path":"webgpu-os/reference/storage/SystemFS.md","title":"storage/SystemFS.js","description":"","kind":"reference","source":"webgpu-os/storage/SystemFS.js","updated":"","headings":["storage/SystemFS.js","Classes","class SystemFS","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: SystemFS.js — read only virtual filesystem for the compiled in OS. The engine, Plauna shell, editor, AGI runtime and the built in apps are packaged directly into the OS bundle (ES modules compiled into the runtime). They are NOT stored in OPFS or IndexedDB, so they can never be edited, moved, or deleted — they are part of the system image. This driver surfaces them as a browsable, read only tree mounted at so the Files app can SHOW where they live and clearly mark them immutable, while user/installed content (OPFS + IndexedDB) stays fully writable. Every entry returned carries so the UI and the StorageManager guards can treat it as immutable. All methods are async to match the other storage drivers. Classes Method Signature Summary True for any path inside the read only system tree. Relative parts under /system, e.g. /system/apps/os.files → ['apps','os.files']. Navigate the SYSTEM DOCS stub tree (dev/raw mode fallback). Lazily build a directory tree index from globalThis. OS SOURCE FILES (populated by the bundle engine source tree barrel in bundle mode). Returns Map<relDirPath, { subdirs: Set<name , files: Map<name, content } where the root directory key is ''. Returns null when the global is absent (dev / raw mode). Bundled (compiled in) apps from the global the AppRegistry also reads. Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"ca45e03c4c0c4654d33619ef0edbdf68cb968c0d898af48769bc0baae3d6eb49"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/UserDataPaths.md::0000","path":"webgpu-os/reference/storage/UserDataPaths.md","title":"storage/UserDataPaths.js","description":"","kind":"reference","source":"webgpu-os/storage/UserDataPaths.js","updated":"","headings":["storage/UserDataPaths.js","Functions","appDataReadbackPath(appId)","cleanUserFileName(value, fallback = 'untitled')","joinUserDataPath(root, ...parts)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Canonical user owned locations shown and managed by the Files app. Functions Device bound encrypted readback container for an app owned sandbox. Constants — Canonical user owned locations shown and managed by the Files app. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"09d350a11c363df9a895c16bcf8fd352885fd042e870902f374fb13ae73d15b0"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/WorkspaceOutputTerminology.md::0000","path":"webgpu-os/reference/storage/WorkspaceOutputTerminology.md","title":"storage/WorkspaceOutputTerminology.js","description":"","kind":"reference","source":"webgpu-os/storage/WorkspaceOutputTerminology.js","updated":"","headings":["storage/WorkspaceOutputTerminology.js","Functions","workspaceOutputPresentation(entry, outputContracts = [])","workspaceOutputContractPresentation(contract)","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: Presentation only terminology for canonical Workspace Output references. Functions Classify an indexed output for human facing UI without changing its signed identity or treating a derived index entry as a second copy of the file. Human facing catalog projection for settings and Files coverage views. Constants — Presentation only terminology for canonical Workspace Output references. <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"6a77c1380d89db8fd869e66021ff7427da0eb710bcf3e5ecf1449734a4537e72"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/reference/storage/system-docs.md::0000","path":"webgpu-os/reference/storage/system-docs.md","title":"storage/system-docs.js","description":"","kind":"reference","source":"webgpu-os/storage/system-docs.js","updated":"","headings":["storage/system-docs.js","Classes","class MyGpuApp","class HelloApp","Constants","Notes & Examples"],"chunkIndex":0,"chunkCount":1,"text":"<! AUTOGENERATED by tools/extract api.py — content above HUMAN NOTES is overwritten Source: system docs.js — the \"examples database\" surfaced as the read only /system tree. Goal: expose HOW to use each part of the compiled in OS (engine, Plauna shell, editor, AGI runtime, built in apps) WITHOUT shipping the proprietary source. Every leaf here is a usage/recipe document — it shows the public API and example calls a developer would write, not the implementation. Shape — a recursive node: { icon?: string, // shown in the Files app files?: { '<name ': '<text ' }, // leaf docs (markdown / example text) dirs?: { '<name ': <node }, // sub folders } Notes for authors: Use 4 space indented code blocks (NOT triple backticks) so content stays valid inside these template literal strings. Only document verified, public API surface (syscalls, app lifecycle, manifest schema, VFS). Keep deep internals conceptual. This is a database: add files/dirs freely — SystemFS renders them as is. Classes Method Signature Summary Method Signature Summary Constants <! HUMAN NOTES Notes & Examples No hand authored notes yet. Add page notes in or a reusable block in — see API Reference Standard.","contentHash":"92762ef19cfe52d01c8efd60c2a170e8c05b282744d949a35190e3667afb4db2"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/smith-lab.md::0000","path":"webgpu-os/smith-lab.md","title":"Smith Lab","description":"Guided 2D and 3D Smith Chart learning, RF measurement analysis, and deterministic impedance-matching design in WebGPU OS.","kind":"guide","source":"MD/webgpu-os/smith-lab.md","updated":"2026-07-15","headings":["Smith Lab","Start here","Synchronized workbench","Physical and mathematical 3D","RF calculation core","Matching and tolerance automation","Touchstone and datasets","Public modules","Verification","Engineering references"],"chunkIndex":0,"chunkCount":3,"text":"Guided 2D and 3D Smith Chart learning, RF measurement analysis, and deterministic impedance-matching design in WebGPU OS. Smith Lab Smith Lab is the RF learning and design application. It combines an accessible Smith Chart academy, deterministic matching network synthesis, bounded Touchstone import, and synchronized SVG and WebGPU visualizations. The same frequency, load, reference impedance, selected marker, and sampled component path drive every visible result. (Source: ) The opening surface uses an original generated scientific cinematic coax and reflection field illustration. It is stored with its exact prompt and SHA 256 provenance and is explicitly labeled as a not to scale concept visualization. It never supplies chart coordinates or calculation results; the SVG, WebGPU, and RF model remain authoritative. Start here The opening screen separates three jobs instead of exposing every RF control at once: Learn the chart opens seven interactive lessons covering traveling waves, reflections, impedance, Smith mapping, components, stubs, and measurements. Match an impedance accepts ordinary , frequency, reference impedance, and velocity factor values, then synthesizes and ranks matching networks. Open measurement data accepts Touchstone files or pasted frequency tables and converts them to one canonical frequency indexed dataset. Guided mode uses plain language prompts and staged decisions. Engineer mode exposes overlays, exact numerical results, optimization, preferred value snapping, and tolerance controls. A metric can be selected to inspect its symbolic formula, substitutions, assumptions, result, and units. Synchronized workbench The central workbench provides an accessible SVG Smith Chart with impedance, admittance, and combined grids. Its marker supports pointer","contentHash":"5d73cc258a0b892190b69e6e61b713b1e5ab06ed54f8df09df4442f0be26d3e4"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/smith-lab.md::0001","path":"webgpu-os/smith-lab.md","title":"Smith Lab","description":"Guided 2D and 3D Smith Chart learning, RF measurement analysis, and deterministic impedance-matching design in WebGPU OS.","kind":"guide","source":"MD/webgpu-os/smith-lab.md","updated":"2026-07-15","headings":["Smith Lab","Start here","Synchronized workbench","Physical and mathematical 3D","RF calculation core","Matching and tolerance automation","Touchstone and datasets","Public modules","Verification","Engineering references"],"chunkIndex":1,"chunkCount":3,"text":"Synchronized workbench The central workbench provides an accessible SVG Smith Chart with impedance, admittance, and combined grids. Its marker supports pointer dragging and arrow keys. The selected point is synchronized with normalized impedance, admittance, reflection coefficient, phase, VSWR, return loss, mismatch loss, reflected power, voltage extrema, wavelength, and electrical length. A circuit strip shows each proposed element in source to load order and its value or electrical length. Selecting an element seeks the transformation timeline to that exact operation. The chart draws each impedance, admittance, or line segment separately, while the right panel shows the current substituted state and the calculated terminal residual. The linked Cartesian plot evaluates the selected network at every displayed frequency rather than repeating the unmatched load. (Source: ) The path record stores the load, ordered transformation steps, exact sampled impedance and admittance, normalized values, reflection coefficient, metrics, formula, and terminal state. Lossless line samples preserve reflection magnitude. Shunt stub samples add the calculated branch susceptance in the admittance domain. Exports include project JSON, chart SVG, 3D PNG, calculation CSV, Touchstone 2.1, and a printable report. Physical and mathematical 3D The physical RF view renders the current animated reflection coefficient as separate incident, reflected, and total voltage waves. It derives voltage and current envelopes from the same complex reflection state, uses selected line and stub electrical lengths, and adds energy flow and voltage stress cues. Dragging changes orientation and the wheel changes zoom. Smith Lab creates the WebGPU device and pipeline only when this view first opens, then retains","contentHash":"2c62bc13ee68fd17835cf448cac054b8308463e559b8e744c273f37cc3e1d6a8"}
{"schemaVersion":1,"recordType":"documentation-chunk","id":"webgpu-os/smith-lab.md::0002","path":"webgpu-os/smith-lab.md","title":"Smith Lab","description":"Guided 2D and 3D Smith Chart learning, RF measurement analysis, and deterministic impedance-matching design in WebGPU OS.","kind":"guide","source":"MD/webgpu-os/smith-lab.md","updated":"2026-07-15","headings":["Smith Lab","Start here","Synchronized workbench","Physical and mathematical 3D","RF calculation core","Matching and tolerance automation","Touchstone and datasets","Public modules","Verification","Engineering references"],"chunkIndex":2,"chunkCount":3,"text":"cues. Dragging changes orientation and the wheel changes zoom. Smith Lab creates the WebGPU device and pipeline only when this view first opens, then retains that runtime while the user switches views. A visible backend badge reports startup and fallback state. The scene is explanatory rather than a validated electromagnetic field solver. (Source: ) Three mathematical views are separate from the engineering chart: Calculated network path lifts the exact per element Smith trajectory into depth and colors impedance, admittance, and line operations separately. Frequency tower projects the evaluated sweep into a three dimensional Smith trajectory and synchronizes its selected frequency marker. Riemann view maps the s","contentHash":"b6d3e5160201865c74db92f9a443aae6e7729655b5a05546be4cf0c687dff3ab"}
